[limb-svn] r6885 - in 3.x/trunk/limb/toolkit: src tests/cases
svn at limb-project.com
svn at limb-project.com
Tue Apr 1 22:34:18 MSD 2008
Author: pachanga
Date: 2008-04-01 22:34:17 +0400 (Tue, 01 Apr 2008)
New Revision: 6885
URL: http://fisheye.limb-project.com/changelog/limb/?cs=6885
Removed:
3.x/trunk/limb/toolkit/src/lmbCompositeNonItersectingToolkitTools.class.php
3.x/trunk/limb/toolkit/src/lmbCompositeToolkitTools.class.php
3.x/trunk/limb/toolkit/src/lmbEmptyToolkitTools.class.php
3.x/trunk/limb/toolkit/src/lmbStaticTools.class.php
3.x/trunk/limb/toolkit/tests/cases/lmbStaticToolsTest.class.php
Modified:
3.x/trunk/limb/toolkit/src/lmbRegistry.class.php
3.x/trunk/limb/toolkit/src/lmbToolkit.class.php
3.x/trunk/limb/toolkit/tests/cases/lmbToolkitTest.class.php
Log:
-- toolkit refactored and simplified, toolkit itself contains an array of tools, no more need for *Composite* and other too abstract stuff
Deleted: 3.x/trunk/limb/toolkit/src/lmbCompositeNonItersectingToolkitTools.class.php
===================================================================
--- 3.x/trunk/limb/toolkit/src/lmbCompositeNonItersectingToolkitTools.class.php 2008-04-01 18:32:52 UTC (rev 6884)
+++ 3.x/trunk/limb/toolkit/src/lmbCompositeNonItersectingToolkitTools.class.php 2008-04-01 18:34:17 UTC (rev 6885)
@@ -1,37 +0,0 @@
-<?php
-/*
- * Limb PHP Framework
- *
- * @link http://limb-project.com
- * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
- */
-lmb_require(dirname(__FILE__) . '/lmbCompositeToolkitTools.class.php');
-
-/**
- * Composes several tools into one
- * Checks if tools have intersecting methods. Throws an exception if two separate tools have the same method.
- * @see lmbToolkit :: extend()
- * @package toolkit
- * @version $Id$
- */
-class lmbCompositeNonItersectingToolkitTools extends lmbCompositeToolkitTools
-{
- function getToolsSignatures()
- {
- $result = array();
- foreach($this->tools as $tools)
- {
- $signatures = $tools->getToolsSignatures();
-
- if($intersect = array_intersect(array_keys($signatures), array_keys($result)))
- {
- throw new lmbException('tools signatures intersection',
- array('intersection' => $intersect));
- }
- $result = array_merge($result, $signatures);
- }
- return $result;
- }
-}
-
Deleted: 3.x/trunk/limb/toolkit/src/lmbCompositeToolkitTools.class.php
===================================================================
--- 3.x/trunk/limb/toolkit/src/lmbCompositeToolkitTools.class.php 2008-04-01 18:32:52 UTC (rev 6884)
+++ 3.x/trunk/limb/toolkit/src/lmbCompositeToolkitTools.class.php 2008-04-01 18:34:17 UTC (rev 6885)
@@ -1,57 +0,0 @@
-<?php
-/*
- * Limb PHP Framework
- *
- * @link http://limb-project.com
- * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
- */
-
-/**
- * Composes several tools into one
- * Doesn't check if tools have any intersecting methods. Method of the latter tools always wins.
- * @see lmbToolkit :: merge()
- * @package toolkit
- * @version $Id$
- */
-class lmbCompositeToolkitTools implements lmbToolkitTools
-{
- /**
- * @var array Array of {@link lmbToolkitTools}
- */
- protected $tools = array();
-
- /**
- * Constructor
- * Can accept array of tools or many arguments. In second case will treat all arguments as tools
- * @param array Array of {@link lmbToolkitTools}
- */
- function __construct($tools)
- {
- if(is_array($tools))
- $this->tools = $tools;
- else
- $this->tools = func_get_args();
- }
-
- function __clone()
- {
- foreach($this->tools as $key => $tools)
- $this->tools[$key] = clone($tools);
- }
-
- /**
- * @see lmbToolkitTools :: getToolsSignatures()
- */
- function getToolsSignatures()
- {
- $result = array();
- foreach($this->tools as $tools)
- {
- $signatures = $tools->getToolsSignatures();
- $result = array_merge($result, $signatures);
- }
- return $result;
- }
-}
-
Deleted: 3.x/trunk/limb/toolkit/src/lmbEmptyToolkitTools.class.php
===================================================================
--- 3.x/trunk/limb/toolkit/src/lmbEmptyToolkitTools.class.php 2008-04-01 18:32:52 UTC (rev 6884)
+++ 3.x/trunk/limb/toolkit/src/lmbEmptyToolkitTools.class.php 2008-04-01 18:34:17 UTC (rev 6885)
@@ -1,25 +0,0 @@
-<?php
-/*
- * Limb PHP Framework
- *
- * @link http://limb-project.com
- * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
- */
-
-/**
- * Empty tools. Supports no methods.
- * @package toolkit
- * @version $Id$
- */
-class lmbEmptyToolkitTools implements lmbToolkitTools
-{
- /**
- * @see lmbToolkitTools :: getToolsSignatures()
- */
- function getToolsSignatures()
- {
- return array();
- }
-}
-
Modified: 3.x/trunk/limb/toolkit/src/lmbRegistry.class.php
===================================================================
--- 3.x/trunk/limb/toolkit/src/lmbRegistry.class.php 2008-04-01 18:32:52 UTC (rev 6884)
+++ 3.x/trunk/limb/toolkit/src/lmbRegistry.class.php 2008-04-01 18:34:17 UTC (rev 6885)
@@ -52,7 +52,7 @@
if(isset(self :: $cache[$name]))
array_unshift(self :: $cache[$name], array());
else
- throw new lmbException('no such registry entry', array('name' => $name));
+ throw new lmbException("No such registry entry '$name'");
}
/**
@@ -63,9 +63,12 @@
static function restore($name)
{
if(isset(self :: $cache[$name]))
+ {
array_shift(self :: $cache[$name]);
+ return self :: $cache[$name][0];
+ }
else
- throw new lmbException('no such registry entry', array('name' => $name));
+ throw new lmbException("No such registry entry '$name'");
}
}
Deleted: 3.x/trunk/limb/toolkit/src/lmbStaticTools.class.php
===================================================================
--- 3.x/trunk/limb/toolkit/src/lmbStaticTools.class.php 2008-04-01 18:32:52 UTC (rev 6884)
+++ 3.x/trunk/limb/toolkit/src/lmbStaticTools.class.php 2008-04-01 18:34:17 UTC (rev 6885)
@@ -1,62 +0,0 @@
-<?php
-/*
- * Limb PHP Framework
- *
- * @link http://limb-project.com
- * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
- */
-
-/**
- * A special kind of tools that always returns some predefined result from each method
- * Created for testing purposes mostly
- * Example of usage:
- * <code>
- * $tools = new lmbStaticTools(array('getUser' => $mock_user, 'getDbConnection' => $mock_db_connection));
- * lmbToolkit :: merge($tools);
- * </code>
- * @package toolkit
- * @version $Id$
- */
-class lmbStaticTools implements lmbToolkitTools
-{
- /**
- * @var array Array of method results
- */
- protected $call_results;
-
- /**
- * Constructor
- * @param array Array of method results that should be returned in response to these methods calls
- */
- function __construct($call_results)
- {
- $this->call_results = $call_results;
- }
-
- /**
- * @see lmbToolkitTools :: getToolsSignatures()
- */
- function getToolsSignatures()
- {
- $signatures = array();
- foreach(array_keys($this->call_results) as $method)
- {
- $signatures[$method] = $this;
- }
- return $signatures;
- }
-
- /**
- * Magic caller. Simply returns result from {@link $call_results} attribute
- * @param string Method name
- * @param array Method arguments
- * @return mixed
- */
- function __call($method, $args)
- {
- return $this->call_results[$method];
- }
-}
-
-
Modified: 3.x/trunk/limb/toolkit/src/lmbToolkit.class.php
===================================================================
--- 3.x/trunk/limb/toolkit/src/lmbToolkit.class.php 2008-04-01 18:32:52 UTC (rev 6884)
+++ 3.x/trunk/limb/toolkit/src/lmbToolkit.class.php 2008-04-01 18:34:17 UTC (rev 6885)
@@ -8,10 +8,6 @@
*/
lmb_require('limb/toolkit/src/lmbToolkitTools.interface.php');
lmb_require('limb/toolkit/src/lmbRegistry.class.php');
-lmb_require('limb/toolkit/src/lmbEmptyToolkitTools.class.php');
-lmb_require('limb/toolkit/src/lmbCompositeToolkitTools.class.php');
-lmb_require('limb/toolkit/src/lmbCompositeNonItersectingToolkitTools.class.php');
-lmb_require('limb/toolkit/src/lmbToolkitTools.interface.php');
lmb_require('limb/core/src/lmbObject.class.php');
/**
@@ -45,10 +41,14 @@
class lmbToolkit extends lmbObject
{
/**
- * @var lmbToolkitTools Current tools
+ * @var lmbToolkit Toolkit singleton instance
*/
- protected $_tools;
+ static protected $_instance = null;
/**
+ * @var array Current tools array
+ */
+ protected $_tools = array();
+ /**
* @var array Cached tools signatures that is methods supported by tools
*/
protected $_tools_signatures = array();
@@ -63,7 +63,11 @@
*/
protected function setTools($tools)
{
- $this->_tools = $tools;
+ if(!is_array($tools))
+ $this->_tools = array($tools);
+ else
+ $this->_tools = $tools;
+
$this->_tools_signatures = array();
$this->_signatures_loaded = false;
}
@@ -77,31 +81,11 @@
*/
static function instance()
{
- self :: _ensureInstance();
- return lmbRegistry :: get(__CLASS__);
- }
+ if(is_object(self :: $_instance))
+ return self :: $_instance;
- /**
- * Ensures that instance of lmbToolkit class exists.
- * If instance is not initialized yet - creates one with empty tools
- * @see lmbRegistry
- * @return void
- */
- static protected function _ensureInstance()
- {
- $instance = lmbRegistry :: get(__CLASS__);
-
- if(is_object($instance))
- return;
-
- $instance = new lmbToolkit();
- lmbRegistry :: set(__CLASS__, $instance);
-
- $instance->setTools($tools = new lmbEmptyToolkitTools());
-
- lmbRegistry :: set('lmbToolkitTools', $tools);
- lmbRegistry :: set('lmbToolkitToolsCopy', clone($tools));
- lmbRegistry :: set('lmbToolkitProperties', array());
+ self :: $_instance = new lmbToolkit();
+ return self :: $_instance;
}
/**
@@ -114,9 +98,6 @@
$toolkit = lmbToolkit :: instance();
$toolkit->setTools($tools);
- lmbRegistry :: set('lmbToolkitTools', $tools);
- lmbRegistry :: set('lmbToolkitToolsCopy', clone($tools));
-
return $toolkit;
}
@@ -129,23 +110,19 @@
{
$toolkit = lmbToolkit :: instance();
- //$tools = lmbRegistry :: get('lmbToolkitToolsCopy');
- //$tools_copy = clone($tools);
-
$tools = $toolkit->_tools;
- $tools_copy = clone($tools);
+ $tools_copy = array();
+ foreach($toolkit->_tools as $tool)
+ $tools_copy[] = clone($tool);
+ lmbRegistry :: set('__tools', $tools);
+ lmbRegistry :: save('__tools');
$toolkit->setTools($tools_copy);
- lmbRegistry :: save('lmbToolkitTools');
- lmbRegistry :: save('lmbToolkitToolsCopy');
+ lmbRegistry :: set('__props', $toolkit->export());
+ lmbRegistry :: save('__props');
+ //do we need to clone properties as well?
- lmbRegistry :: set('lmbToolkitTools', $tools);
- lmbRegistry :: set('lmbToolkitToolsCopy', $tools_copy);
-
- lmbRegistry :: set('lmbToolkitProperties', $toolkit->export());
- lmbRegistry :: save('lmbToolkitProperties');
-
return $toolkit;
}
@@ -157,45 +134,35 @@
{
$toolkit = lmbToolkit :: instance();
- lmbRegistry :: restore('lmbToolkitTools');
- lmbRegistry :: restore('lmbToolkitToolsCopy');
- lmbRegistry :: restore('lmbToolkitProperties');
+ $tools = lmbRegistry :: restore('__tools');
+ $props = lmbRegistry :: restore('__props');
- $tools = lmbRegistry :: get('lmbToolkitTools');
+ $toolkit->reset();
+ $toolkit->import($props);
$toolkit->setTools($tools);
- $toolkit->reset();
- $toolkit->import(lmbRegistry :: get('lmbToolkitProperties'));
-
return $toolkit;
}
/**
- * Extends current tools with new tools
- * Merges tools together using {@link lmbCompositeNonItersectingToolkitTools} that doesn't allow tools methods intersection
- * @see lmbCompositeNonItersectingToolkitTools
+ * Extends current tools with new tool
* @return lmbToolkit The only instance of lmbToolkit class
*/
- static function extend($tools)
+ static function merge($tool)
{
- self :: _ensureInstance();
-
- $tools_copy = lmbRegistry :: get('lmbToolkitToolsCopy');
- return self :: setup(new lmbCompositeNonItersectingToolkitTools($tools_copy, $tools));
+ $toolkit = lmbToolkit :: instance();
+ $toolkit->add($tool);
+ return $toolkit;
}
/**
- * Extends current tools with new tools
- * Merges tools together using {@link lmbCompositeToolkitTools}
- * @see lmbCompositeToolkitTools
- * @return lmbToolkit The only instance of lmbToolkit class
+ * Extends current tools with new tool
*/
- static function merge($tools)
+ function add($tool)
{
- self :: _ensureInstance();
-
- $tools_copy = lmbRegistry :: get('lmbToolkitToolsCopy');
- return self :: setup(new lmbCompositeToolkitTools($tools_copy, $tools));
+ $tools = $this->_tools;
+ array_unshift($tools, $tool);
+ $this->setTools($tools);
}
/**
@@ -214,7 +181,7 @@
/**
* Gets variable from toolkit
* Checks if appropriate getter method in tools exists to delegate to
- * @return void
+ * @return mixed
*/
function get($var, $default = LIMB_UNDEFINED)
{
@@ -224,22 +191,29 @@
return parent :: get($var, $default);
}
+ function has($var)
+ {
+ return $this->_hasGetMethodFor($var) || parent :: has($var);
+ }
+
+ /**
+ * Sets variable into toolkit directly
+ * @return void
+ */
function setRaw($var, $value)
{
return parent :: _setRaw($var, $value);
}
+ /**
+ * Gets variable from toolkit directly
+ * @return mixed
+ */
function getRaw($var)
{
return parent :: _getRaw($var);
}
-
- function has($var)
- {
- return $this->_hasGetMethodFor($var) || parent :: has($var);
- }
-
/**
* Magic caller. Delegates to {@link $tools} if $tools_signatures has required method
* @param string Method name
@@ -266,7 +240,17 @@
if($this->_signatures_loaded)
return;
- $this->_tools_signatures = $this->_tools->getToolsSignatures();
+ $this->_tools_signatures = array();
+ foreach($this->_tools as $tool)
+ {
+ $signatures = $tool->getToolsSignatures();
+ foreach($signatures as $method => $obj)
+ {
+ if(!isset($this->_tools_signatures[$method]))
+ $this->_tools_signatures[$method] = $obj;
+ }
+ }
+
$this->_signatures_loaded = true;
}
Deleted: 3.x/trunk/limb/toolkit/tests/cases/lmbStaticToolsTest.class.php
===================================================================
--- 3.x/trunk/limb/toolkit/tests/cases/lmbStaticToolsTest.class.php 2008-04-01 18:32:52 UTC (rev 6884)
+++ 3.x/trunk/limb/toolkit/tests/cases/lmbStaticToolsTest.class.php 2008-04-01 18:34:17 UTC (rev 6885)
@@ -1,34 +0,0 @@
-<?php
-/*
- * Limb PHP Framework
- *
- * @link http://limb-project.com
- * @copyright Copyright © 2004-2007 BIT(http://bit-creative.com)
- * @license LGPL http://www.gnu.org/copyleft/lesser.html
- */
-lmb_require('limb/toolkit/src/lmbStaticTools.class.php');
-
-class lmbStaticToolsTest extends UnitTestCase
-{
- function setUp()
- {
- lmbToolkit :: save();
- }
-
- function tearDown()
- {
- lmbToolkit :: restore();
- }
-
- function testGetToolsSignatures()
- {
- $tools = new lmbStaticTools(array('foo' => 'a', 'bar' => 'b'));
-
- $toolkit = lmbToolkit :: setup($tools);
-
- $this->assertEqual($toolkit->foo(), 'a');
- $this->assertEqual($toolkit->bar(), 'b');
- }
-}
-
-
Modified: 3.x/trunk/limb/toolkit/tests/cases/lmbToolkitTest.class.php
===================================================================
--- 3.x/trunk/limb/toolkit/tests/cases/lmbToolkitTest.class.php 2008-04-01 18:32:52 UTC (rev 6884)
+++ 3.x/trunk/limb/toolkit/tests/cases/lmbToolkitTest.class.php 2008-04-01 18:34:17 UTC (rev 6885)
@@ -32,28 +32,15 @@
function getVar()
{
- return $this->_getRaw('var'); // this way we can prevent recursion
+ return $this->_getRaw('var'); // this way we prevent recursion
}
function setVar($value)
{
- $this->_setRaw('var', $value); // this way we can prevent recursion
+ $this->_setRaw('var', $value); // this way we prevent recursion
}
}
-class TestExtendingTools implements lmbToolkitTools
-{
- function getToolsSignatures()
- {
- return array('baz' => $this);
- }
-
- function baz()
- {
- return 'c';
- }
-}
-
class TestIntersectingTools implements lmbToolkitTools
{
function getToolsSignatures()
@@ -74,26 +61,14 @@
class lmbToolkitTest extends UnitTestCase
{
- function setUp()
- {
- lmbToolkit :: save();
- }
-
- function tearDown()
- {
- lmbToolkit :: restore();
- }
-
function testInstance()
{
- return;
- $this->assertReference(lmbToolkit :: instance(),
- lmbToolkit :: instance());
+ $this->assertIdentical(lmbToolkit :: instance(), lmbToolkit :: instance());
}
function testNoSuchMethod()
{
- $toolkit = lmbToolkit :: setup(new TestTools());
+ $toolkit = new lmbToolkit();
try
{
@@ -103,13 +78,26 @@
catch(lmbException $e){}
}
- function testUseTools()
+ function testAddTools()
{
- $toolkit = lmbToolkit :: setup(new TestTools());
+ $toolkit = new lmbToolkit();
+ $toolkit->add(new TestTools());
$this->assertEqual($toolkit->foo(), 'a');
$this->assertEqual($toolkit->bar('b'), 'b');
}
+ function testAddSeveralTools()
+ {
+ $toolkit = new lmbToolkit();
+ $toolkit->add(new TestTools());
+ $this->assertEqual($toolkit->foo(), 'a');
+ $this->assertEqual($toolkit->bar('b'), 'b');
+
+ $toolkit->add(new TestIntersectingTools());
+ $this->assertEqual($toolkit->foo(), 'd');
+ $this->assertEqual($toolkit->bar('b'), 'b');
+ }
+
function testSaveRestoreToolkit()
{
$toolkit = lmbToolkit :: setup(new TestTools());
@@ -127,6 +115,7 @@
$toolkit = lmbToolkit :: restore();
$this->assertEqual($toolkit->getFooCounter(), 3);
+
$toolkit = lmbToolkit :: restore();
$this->assertEqual($toolkit->getFooCounter(), 2);
}
@@ -134,97 +123,43 @@
function testSaveAndRestoreAlwaysReturnTheSameToolkitInstance()
{
$toolkit = lmbToolkit :: setup(new TestTools());
+
$toolkit1 = lmbToolkit :: save();
$toolkit1->foo();
+
$toolkit2 = lmbToolkit :: restore();
- $this->assertReference($toolkit1, $toolkit2);
+ $this->assertIdentical($toolkit1, $toolkit2);
+
$toolkit3 = lmbToolkit :: save();
- $this->assertReference($toolkit1, $toolkit3);
- lmbToolkit :: restore();
- }
+ $this->assertIdentical($toolkit1, $toolkit3);
- function testExtendToolkit()
- {
- $toolkit = lmbToolkit :: setup(new TestTools());
- $toolkit->foo();
- $toolkit->foo();
- $this->assertEqual($toolkit->getFooCounter(), 2);
-
- try
- {
- $toolkit->baz();
- $this->assertTrue(false);
- }
- catch(lmbException $e){}
-
- $toolkit = lmbToolkit :: extend(new TestExtendingTools());
- $this->assertEqual($toolkit->baz(), 'c');
-
- $toolkit->foo();
- $this->assertEqual($toolkit->getFooCounter(), 1);
- }
-
- function testExtendPreserveCleanCopy()
- {
- lmbToolkit :: setup(new TestTools());
- $toolkit = lmbToolkit :: instance();
- $toolkit->foo();
- $toolkit->foo();
- $this->assertEqual($toolkit->getFooCounter(), 2);
-
- lmbToolkit :: extend(new TestExtendingTools());
- $toolkit = lmbToolkit :: instance();
- $this->assertEqual($toolkit->getFooCounter(), 0);
-
- lmbToolkit :: save();
- $toolkit = lmbToolkit :: instance();
- $toolkit->foo();
- $this->assertEqual($toolkit->getFooCounter(), 1);
lmbToolkit :: restore();
-
- $toolkit = lmbToolkit :: instance();
- $this->assertEqual($toolkit->getFooCounter(), 0);
}
- function testIntersectingToolkit()
+ function testMerge()
{
lmbToolkit :: setup(new TestTools());
- $toolkit = lmbToolkit :: extend(new TestIntersectingTools());
-
- try
- {
- $toolkit->foo(); //we must call this method due to lazy loading of signatures
- $this->assertTrue(false);
- }
- catch(lmbException $e){}
- }
-
- function testSubstitute()
- {
- lmbToolkit :: setup(new TestTools());
$toolkit = lmbToolkit :: merge(new TestIntersectingTools());
$this->assertEqual($toolkit->foo(), 'd');
}
- function testSubstitutePreserveCleanCopy()
+ function testMergeSeveral()
{
- lmbToolkit :: setup(new TestTools());
- $toolkit = lmbToolkit :: instance();
+ lmbToolkit :: merge(new TestTools());
+ $toolkit = lmbToolkit :: save();
+
$toolkit->foo();
$toolkit->foo();
$this->assertEqual($toolkit->getFooCounter(), 2);
- lmbToolkit :: merge(new TestTools());
- $toolkit = lmbToolkit :: instance();
+ $toolkit = lmbToolkit :: merge(new TestTools());
$this->assertEqual($toolkit->getFooCounter(), 0);
- lmbToolkit :: save();
$toolkit = lmbToolkit :: instance();
$toolkit->foo();
$this->assertEqual($toolkit->getFooCounter(), 1);
- lmbToolkit :: restore();
- $toolkit = lmbToolkit :: instance();
+ $toolkit = lmbToolkit :: restore();
$this->assertEqual($toolkit->getFooCounter(), 0);
}
More information about the limb-svn
mailing list