diff options
Diffstat (limited to 'tests/unit/TComponentTest.php')
-rw-r--r-- | tests/unit/TComponentTest.php | 970 |
1 files changed, 484 insertions, 486 deletions
diff --git a/tests/unit/TComponentTest.php b/tests/unit/TComponentTest.php index 93668dc0..9a2299da 100644 --- a/tests/unit/TComponentTest.php +++ b/tests/unit/TComponentTest.php @@ -13,24 +13,24 @@ class NewComponent extends TComponent { public function getAutoGlobalListen() { return true; - } + } public function getText() { return $this->_text; } - + public function setText($value) { $this->_text=$value; } - + public function getReadOnlyProperty() { return 'read only'; } - + public function getJsReadOnlyJsProperty() { return 'js read only'; } - + public function getObject() { if(!$this->_object) { $this->_object=new NewComponent; @@ -38,19 +38,19 @@ class NewComponent extends TComponent { } return $this->_object; } - + public function onMyEvent($param) { $this->raiseEvent('OnMyEvent',$this,$param); } - + public function myEventHandler($sender,$param) { $this->_eventHandled=true; } - + public function eventReturnValue($sender,$param) { return $param->Return; } - + public function isEventHandled() { return $this->_eventHandled; } @@ -82,14 +82,14 @@ class NewComponentNoListen extends NewComponent { class DynamicCatchingComponent extends NewComponentNoListen implements IDynamicMethods { public function __dycall($method, $args) { - + } } class GlobalRaiseComponent extends NewComponent implements IDynamicMethods { private $_callorder = array(); - + public function getCallOrders() { return $this->_callorder; @@ -128,7 +128,7 @@ class FooClassBehavior extends TClassBehavior { class FooFooClassBehavior extends FooClassBehavior { public function faafaaEverMore($object, $laa, $sol) { - + } } @@ -146,7 +146,7 @@ class FooBehavior extends TBehavior { } } class FooFooBehavior extends FooBehavior { - + public function faafaaEverMore($laa, $sol) { return sqrt($laa * $laa + $sol * $sol); } @@ -162,11 +162,11 @@ class PreBarBehavior extends TBehavior { class BarBehavior extends PreBarBehavior implements IInstanceCheck { private $_instanceReturn = null; - + public function moreFunction($laa, $sol) { return pow($laa+$sol+1, 2); } - + public function isinstanceof($class, $instance=null) { return $this->_instanceReturn; } @@ -200,7 +200,7 @@ class BehaviorTestBehavior extends TBehavior { public function getReadOnly() { return true; } - + public function onBehaviorEvent($sender, $param,$responsetype=null,$postfunction=null) { return $this->getOwner()->raiseEvent('onBehaviorEvent',$sender,$param,$responsetype,$postfunction); } @@ -264,40 +264,40 @@ class dy3ClassTextReplace extends dy1ClassTextReplace { class IntraObjectExtenderBehavior extends TBehavior { - + private $lastCall = null; private $arglist = null; - + public function getLastCall() { $v = $this->lastCall; $this->lastCall = null; return $v; } - + public function getLastArgumentList() { $v = $this->arglist; $this->arglist = null; return $v; } - - - + + + public function dyListen($fx, $chain) { $this->lastCall = 1; $this->arglist = func_get_args(); - + return $chain->dyListen($fx); // Calls the next event, within a chain } public function dyUnlisten($fx, $chain) { $this->lastCall = 2; $this->arglist = func_get_args(); - + return $chain->dyUnlisten($fx); } public function dyPreRaiseEvent($name,$sender,$param,$responsetype,$postfunction, $chain) { $this->lastCall = 3; $this->arglist = func_get_args(); - + return $chain->dyPreRaiseEvent($name);// Calls the next event, within a chain, if parameters are left off, they are filled in with // the original parameters passed to the dynamic event. Parameters can be passed if they are changed. } @@ -409,7 +409,7 @@ class TDynamicClassBehavior extends TClassBehavior implements IDynamicMethods { * @package System */ class TComponentTest extends PHPUnit_Framework_TestCase { - + protected $component; public function setUp() { @@ -424,21 +424,21 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->component->unlisten(); $this->component = null; } - - + + public function testGetListeningToGlobalEvents() { $this->assertEquals(true, $this->component->getListeningToGlobalEvents()); $this->component->unlisten(); $this->assertEquals(false, $this->component->getListeningToGlobalEvents()); } - - + + public function testConstructorAutoListen() { // the default object auto installs class behavior hooks $this->assertEquals(1, $this->component->getEventHandlers('fxAttachClassBehavior')->getCount()); $this->assertEquals(1, $this->component->getEventHandlers('fxDetachClassBehavior')->getCount()); $this->assertTrue($this->component->getListeningToGlobalEvents()); - + // this object does not auto install class behavior hooks, thus not changing the global event structure. // Creating a new instance should _not_ influence the fxAttachClassBehavior and fxDetachClassBehavior // count. @@ -447,655 +447,655 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->assertEquals(1, $this->component->getEventHandlers('fxDetachClassBehavior')->getCount()); $this->assertEquals(1, $component_nolisten->getEventHandlers('fxAttachClassBehavior')->getCount()); $this->assertEquals(1, $component_nolisten->getEventHandlers('fxDetachClassBehavior')->getCount()); - - // tests order of class behaviors when a parent and class have class behavior. + + // tests order of class behaviors when a parent and class have class behavior. // The child should override the parent object-oriented programming style $this->component->attachClassBehavior('Bar', 'BarBehavior', 'NewComponentNoListen'); $this->component->attachClassBehavior('FooBar', 'FooBarBehavior', 'NewComponent'); - + //create new object with new class behaviors built in, defined in the two lines above $component = new NewComponentNoListen; - + $this->assertEquals(25, $component->moreFunction(2, 2)); - + $this->assertEquals(25, $component->Bar->moreFunction(2, 2)); $this->assertEquals(8, $component->FooBar->moreFunction(2, 2)); - + $component->unlisten();// unwind object and class behaviors $this->component->detachClassBehavior('FooBar', 'NewComponent'); $this->component->detachClassBehavior('Bar', 'NewComponentNoListen'); - + } - - + + public function testListenAndUnlisten() { - + $component = new NewComponentNoListen(); - + $this->assertEquals(false, $component->getListeningToGlobalEvents()); - + //This is from $this->component being instanced and listening. $component is accessing the global event structure $this->assertEquals(1, $component->getEventHandlers('fxAttachClassBehavior')->getCount()); - + $this->assertEquals(2, $component->listen()); - + $this->assertEquals(true, $component->getListeningToGlobalEvents()); - + //This is from $this->component being instanced and listening. $component is accessing the global event structure $this->assertEquals(2, $component->getEventHandlers('fxAttachClassBehavior')->getCount()); - + $this->assertEquals(2, $component->unlisten()); - + $this->assertEquals(false, $component->getListeningToGlobalEvents()); - + //This is from $this->component being instanced and listening. $component is accessing the global event structure $this->assertEquals(1, $component->getEventHandlers('fxAttachClassBehavior')->getCount()); } - - + + public function testListenAndUnlistenWithDynamicEventCatching() { - + $component = new DynamicCatchingComponent(); - + $this->assertEquals(false, $component->getListeningToGlobalEvents()); - + //This is from $this->component being instanced and listening. $component is accessing the global event structure $this->assertEquals(0, $component->getEventHandlers(TComponent::GLOBAL_RAISE_EVENT_LISTENER)->getCount()); - + // this adds the fxAttachClassBehavior, fxDetachClassBehavior, and __dycall of the component $this->assertEquals(3, $component->listen()); - + $this->assertEquals(true, $component->getListeningToGlobalEvents()); - + //This is from $this->component being instanced and listening. $component is accessing the global event structure $this->assertEquals(1, $component->getEventHandlers(TComponent::GLOBAL_RAISE_EVENT_LISTENER)->getCount()); - + $this->assertEquals(3, $component->unlisten()); - + $this->assertEquals(false, $component->getListeningToGlobalEvents()); - + //This is from $this->component being instanced and listening. $component is accessing the global event structure $this->assertEquals(0, $component->getEventHandlers(TComponent::GLOBAL_RAISE_EVENT_LISTENER)->getCount()); } - - - + + + //Test Class behaviors public function testAttachClassBehavior() { - + // ensure that the class is listening $this->assertEquals(1, $this->component->getEventHandlers('fxAttachClassBehavior')->getCount()); - + //Test that the component is not a FooClassBehavior $this->assertNull($this->component->asa('FooClassBehavior'), "Component is already a FooClassBehavior and should not have this behavior"); - + //Add the FooClassBehavior $this->component->attachClassBehavior('FooClassBehavior', new FooClassBehavior); - + //Test that the existing listening component can be a FooClassBehavior $this->assertNotNull($this->component->asa('FooClassBehavior'), "Component is does not have the FooClassBehavior and should have this behavior"); - + // test if the function modifies new instances of the object $anothercomponent = new NewComponent(); - + //The new component should be a FooClassBehavior $this->assertNotNull($anothercomponent->asa('FooClassBehavior'), "anothercomponent does not have the FooClassBehavior"); - + // test when overwriting an existing class behavior, it should throw an TInvalidOperationException try { $this->component->attachClassBehavior('FooClassBehavior', new BarClassBehavior); $this->fail('TInvalidOperationException not raised when overwriting an existing behavior'); } catch(TInvalidOperationException $e) { } - - + + // test when overwriting an existing class behavior, it should throw an TInvalidOperationException try { $this->component->attachClassBehavior('FooBarBehavior', 'FooBarBehavior', 'TComponent'); $this->fail('TInvalidOperationException not raised when trying to place a behavior on the root object TComponent'); } catch(TInvalidOperationException $e) { } - - + + // test if the function does not modify any existing objects that are not listening // The FooClassBehavior is already a part of the class behaviors thus the new instance gets the behavior. $nolistencomponent = new NewComponentNoListen(); - + // test if the function modifies all existing objects that are listening // Adding a behavior to the first object, the second instance should automatically get the class behavior. // This is because the second object is listening to the global events of class behaviors $this->component->attachClassBehavior('BarClassBehavior', new BarClassBehavior); $this->assertNotNull($anothercomponent->asa('BarClassBehavior'), "anothercomponent is does not have the BarClassBehavior"); - + // The no listen object should not have the BarClassBehavior because it was added as a class behavior after the object was instanced $this->assertNull($nolistencomponent->asa('BarClassBehavior'), "nolistencomponent has the BarClassBehavior and should not"); - + // But the no listen object should have the FooClassBehavior because the class behavior was installed before the object was instanced $this->assertNotNull($nolistencomponent->asa('FooClassBehavior'), "nolistencomponent is does not have the FooClassBehavior"); - + //Clear out what was done during this test $anothercomponent->unlisten(); $this->component->detachClassBehavior('FooClassBehavior'); $this->component->detachClassBehavior('BarClassBehavior'); - + // Test attaching of single object behaviors as class-wide behaviors $this->component->attachClassBehavior('BarBehaviorObject', 'BarBehavior'); $this->assertTrue($this->component->asa('BarBehaviorObject') instanceof BarBehavior); $this->assertEquals($this->component->BarBehaviorObject->Owner, $this->component); $this->component->detachClassBehavior('BarBehaviorObject'); } - - - - - + + + + + public function testDetachClassBehavior() { // ensure that the component is listening $this->assertEquals(1, $this->component->getEventHandlers('fxDetachClassBehavior')->getCount()); - + $prenolistencomponent = new NewComponentNoListen(); - + //Attach a class behavior $this->component->attachClassBehavior('FooClassBehavior', new FooClassBehavior); - + //Create new components that listen and don't listen to global events $anothercomponent = new NewComponent(); $postnolistencomponent = new NewComponentNoListen(); - + //ensures that all the Components are properly initialized $this->assertEquals(2, $this->component->getEventHandlers('fxDetachClassBehavior')->getCount()); $this->assertNotNull($this->component->asa('FooClassBehavior'), "Component does not have the FooClassBehavior and should have this behavior"); $this->assertNull($prenolistencomponent->asa('FooClassBehavior'), "Component has the FooClassBehavior and should _not_ have this behavior"); $this->assertNotNull($anothercomponent->asa('FooClassBehavior'), "Component does not have the FooClassBehavior and should have this behavior"); $this->assertNotNull($postnolistencomponent->asa('FooClassBehavior'), "Component does not have the FooClassBehavior and should have this behavior"); - - + + $this->component->detachClassBehavior('FooClassBehavior'); - + $this->assertNull($this->component->asa('FooClassBehavior'), "Component has the FooClassBehavior and should _not_ have this behavior"); $this->assertNull($prenolistencomponent->asa('FooClassBehavior'), "Component has the FooClassBehavior and should _not_ have this behavior"); $this->assertNull($anothercomponent->asa('FooClassBehavior'), "Component has the FooClassBehavior and should _not_ have this behavior"); $this->assertNotNull($postnolistencomponent->asa('FooClassBehavior'), "Component does not have the FooClassBehavior and should have this behavior"); - - + + //tear down function variables $anothercomponent->unlisten(); } - + public function testGetClassHierarchy() { $component = new DynamicCatchingComponent; $this->assertEquals(array('TComponent', 'NewComponent', 'NewComponentNoListen', 'DynamicCatchingComponent'), $component->getClassHierarchy()); $this->assertEquals(array('TComponent', 'NewComponent', 'NewComponentNoListen', 'DynamicCatchingComponent'), $component->getClassHierarchy(false)); $this->assertEquals(array('tcomponent', 'newcomponent', 'newcomponentnolisten', 'dynamiccatchingcomponent'), $component->getClassHierarchy(true)); } - - + + public function testAsA() { $anothercomponent = new NewComponent(); - + // ensure the component does not have the FooClassBehavior $this->assertNull($this->component->asa('FooClassBehavior')); $this->assertNull($this->component->asa('FooFooClassBehavior')); $this->assertNull($this->component->asa('BarClassBehavior')); $this->assertNull($this->component->asa('NonExistantClassBehavior')); - + $this->assertNull($anothercomponent->asa('FooClassBehavior')); $this->assertNull($anothercomponent->asa('FooFooClassBehavior')); $this->assertNull($anothercomponent->asa('BarClassBehavior')); $this->assertNull($anothercomponent->asa('NonExistantClassBehavior')); - + // add the class behavior $this->component->attachClassBehavior('FooClassBehavior', new FooClassBehavior); - + //Check that the component has only the class behavior assigned $this->assertNotNull($this->component->asa('FooClassBehavior')); $this->assertNull($this->component->asa('FooFooClassBehavior')); $this->assertNull($this->component->asa('BarClassBehavior')); $this->assertNull($this->component->asa('NonExistantClassBehavior')); - + //Check that the component has only the class behavior assigned $this->assertNotNull($anothercomponent->asa('FooClassBehavior')); $this->assertNull($anothercomponent->asa('FooFooClassBehavior')); $this->assertNull($anothercomponent->asa('BarClassBehavior')); $this->assertNull($anothercomponent->asa('NonExistantClassBehavior')); - + // remove the class behavior $this->component->detachClassBehavior('FooClassBehavior'); - + // Check the function doesn't have the behavior any more $this->assertNull($this->component->asa('FooClassBehavior')); $this->assertNull($this->component->asa('FooFooClassBehavior')); $this->assertNull($this->component->asa('BarClassBehavior')); $this->assertNull($this->component->asa('NonExistantClassBehavior')); - + $this->assertNull($anothercomponent->asa('FooClassBehavior')); $this->assertNull($anothercomponent->asa('FooFooClassBehavior')); $this->assertNull($anothercomponent->asa('BarClassBehavior')); $this->assertNull($anothercomponent->asa('NonExistantClassBehavior')); - - - - + + + + $this->component->attachBehavior('BarBehavior', new BarBehavior); - + //Check that the component has only the object behavior assigned $this->assertNull($this->component->asa('FooBehavior')); $this->assertNull($this->component->asa('FooFooBehavior')); $this->assertNotNull($this->component->asa('BarBehavior')); $this->assertNull($this->component->asa('NonExistantBehavior')); - + //Check that the component has the behavior assigned $this->assertNull($anothercomponent->asa('FooBehavior')); $this->assertNull($anothercomponent->asa('FooFooBehavior')); $this->assertNull($anothercomponent->asa('BarBehavior')); $this->assertNull($anothercomponent->asa('NonExistantBehavior')); - + $this->component->detachBehavior('BarBehavior'); - + //Check that the component has no object behaviors assigned $this->assertNull($this->component->asa('FooBehavior')); $this->assertNull($this->component->asa('FooFooBehavior')); $this->assertNull($this->component->asa('BarBehavior')); $this->assertNull($this->component->asa('NonExistantBehavior')); - + //Check that the component has no behavior assigned $this->assertNull($anothercomponent->asa('FooBehavior')); $this->assertNull($anothercomponent->asa('FooFooBehavior')); $this->assertNull($anothercomponent->asa('BarBehavior')); $this->assertNull($anothercomponent->asa('NonExistantBehavior')); - + $anothercomponent->unlisten(); } - + public function testIsA() { //This doesn't check the IInstanceCheck functionality, separate function - + $this->assertTrue($this->component->isa('TComponent')); $this->assertTrue($this->component->isa('NewComponent')); $this->assertFalse($this->component->isa(new FooBehavior)); $this->assertFalse($this->component->isa('FooBehavior')); - + //Ensure there is no BarBehavior $this->assertNull($this->component->asa('FooFooBehavior')); - + $this->assertFalse($this->component->isa('FooBehavior')); $this->assertFalse($this->component->isa('FooFooBehavior')); - + $this->component->attachBehavior('FooFooBehavior', new FooFooBehavior); - + $this->assertNotNull($this->component->asa('FooFooBehavior')); - + $this->assertTrue($this->component->isa('FooBehavior')); $this->assertTrue($this->component->isa('FooFooBehavior')); - + $this->component->disableBehaviors(); // It still has the behavior $this->assertNotNull($this->component->asa('FooFooBehavior')); - + // But it is not expressed $this->assertFalse($this->component->isa('FooBehavior')); $this->assertFalse($this->component->isa('FooFooBehavior')); - + $this->component->enableBehaviors(); $this->assertNotNull($this->component->asa('FooFooBehavior')); - + $this->assertTrue($this->component->isa('FooFooBehavior')); - - - + + + $this->component->attachBehavior('FooBarBehavior', new FooBarBehavior); - + $this->assertTrue($this->component->isa('FooBehavior')); $this->assertTrue($this->component->isa('FooBarBehavior')); - + $this->component->disableBehavior('FooBarBehavior'); - + $this->assertTrue($this->component->isa('FooBehavior')); $this->assertFalse($this->component->isa('FooBarBehavior')); - + $this->component->enableBehavior('FooBarBehavior'); $this->component->disableBehavior('FooFooBehavior'); $this->assertFalse($this->component->isa('FooBehavior')); $this->assertFalse($this->component->isa('FooFooBehavior')); $this->assertTrue($this->component->isa('FooBarBehavior')); - + $this->component->disableBehavior('FooBarBehavior'); $this->component->disableBehavior('FooFooBehavior'); - + $this->assertFalse($this->component->isa('FooBehavior')); $this->assertFalse($this->component->isa('FooFooBehavior')); $this->assertFalse($this->component->isa('FooBarBehavior')); - + $this->component->enableBehavior('FooBarBehavior'); $this->component->enableBehavior('FooFooBehavior'); - + $this->assertTrue($this->component->isa('FooFooBehavior')); $this->assertTrue($this->component->isa('FooBarBehavior')); - - + + $this->component->detachBehavior('FooFooBehavior'); $this->component->detachBehavior('FooBarBehavior'); - + $this->assertFalse($this->component->isa(new FooBehavior)); $this->assertFalse($this->component->isa('FooBehavior')); $this->assertFalse($this->component->isa(new FooFooBehavior)); $this->assertFalse($this->component->isa('FooFooBehavior')); $this->assertFalse($this->component->isa(new FooBarBehavior)); $this->assertFalse($this->component->isa('FooBarBehavior')); - + } - + public function testIsA_with_IInstanceCheck() { - + $this->assertTrue($this->component->isa('NewComponent')); $this->assertFalse($this->component->isa('PreBarBehavior')); - + $this->component->attachBehavior('BarBehavior', $behavior = new BarBehavior); - + $behavior->setInstanceReturn(null); - + $this->assertTrue($this->component->isa('NewComponent')); $this->assertTrue($this->component->isa('PreBarBehavior')); $this->assertFalse($this->component->isa('FooBehavior')); - + // This forces the iso on the BarBehavior to respond to any class with false $behavior->setInstanceReturn(false); $this->assertFalse($this->component->isa('PreBarBehavior')); $this->assertFalse($this->component->isa('FooBehavior')); - + //This forces the isa on the BarBehavior to respond to any class with true $behavior->setInstanceReturn(true); $this->assertTrue($this->component->isa('FooBehavior')); - - + + } - + public function testAttachDetachBehavior() { - + try { $this->component->faaEverMore(true, true); $this->fail('TApplicationException not raised trying to execute a undefined class method'); } catch(TApplicationException $e) {} - + $this->assertNull($this->component->asa('FooBehavior')); $this->assertFalse($this->component->isa('FooBehavior')); $this->assertNull($this->component->asa('BarBehavior')); $this->assertFalse($this->component->isa('BarBehavior')); - + try { $this->component->attachBehavior('FooBehavior', new TComponent); $this->fail('TApplicationException not raised trying to execute a undefined class method'); } catch(TInvalidDataTypeException $e) {} - + $this->component->attachBehavior('FooBehavior', new FooBehavior); - + $this->assertNotNull($this->component->asa('FooBehavior')); $this->assertTrue($this->component->isa('FooBehavior')); $this->assertNull($this->component->asa('BarBehavior')); $this->assertFalse($this->component->isa('BarBehavior')); - + try { $this->assertTrue($this->component->faaEverMore(true, true)); } catch(TApplicationException $e) { $this->fail('TApplicationException raised while trying to execute a behavior class method'); } - + try { $this->component->noMethodHere(true); $this->fail('TApplicationException not raised trying to execute a undefined class method'); } catch(TApplicationException $e) {} - + $this->assertTrue($this->component->disableBehavior('FooBehavior')); - + //BarBehavior is not a behavior at this time $this->assertNull($this->component->disableBehavior('BarBehavior')); - + try { $this->component->faaEverMore(true, true); $this->fail('TApplicationException not raised trying to execute a undefined class method'); } catch(TApplicationException $e) {} - + $this->assertTrue($this->component->enableBehavior('FooBehavior')); - + //BarBehavior is not a behavior at this time $this->assertNull($this->component->enableBehavior('BarBehavior')); - + try { $this->assertTrue($this->component->faaEverMore(true, true)); } catch(TApplicationException $e) { $this->fail('TApplicationException raised while trying to execute a behavior class method'); } - + $this->component->detachBehavior('FooBehavior'); - + $this->assertNull($this->component->asa('FooBehavior')); $this->assertFalse($this->component->isa('FooBehavior')); $this->assertNull($this->component->asa('BarBehavior')); $this->assertFalse($this->component->isa('BarBehavior')); - + } - + public function testAttachDetachBehaviors() { $this->assertNull($this->component->asa('FooBehavior')); $this->assertNull($this->component->asa('BarBehavior')); $this->assertNull($this->component->asa('FooBarBehavior')); $this->assertNull($this->component->asa('PreBarBehavior')); - + $this->component->attachBehaviors(array('FooFooBehavior' => new FooFooBehavior, 'BarBehavior' => new BarBehavior, 'PreBarBehavior' => new PreBarBehavior)); - + $this->assertNull($this->component->asa('FooBehavior')); $this->assertNotNull($this->component->asa('FooFooBehavior')); $this->assertNotNull($this->component->asa('BarBehavior')); $this->assertNull($this->component->asa('FooBarBehavior')); $this->assertNotNull($this->component->asa('PreBarBehavior')); - + $this->assertTrue($this->component->isa('FooFooBehavior')); $this->assertTrue($this->component->isa('FooBehavior')); $this->assertTrue($this->component->isa('BarBehavior')); $this->assertTrue($this->component->isa('PreBarBehavior')); $this->assertFalse($this->component->isa('FooBarBehavior')); - + $this->component->detachBehaviors(array('FooFooBehavior' => new FooFooBehavior, 'BarBehavior' => new BarBehavior)); - + $this->assertNull($this->component->asa('FooBehavior')); $this->assertNull($this->component->asa('FooFooBehavior')); $this->assertNull($this->component->asa('BarBehavior')); $this->assertNull($this->component->asa('FooBarBehavior')); $this->assertNotNull($this->component->asa('PreBarBehavior')); - + $this->assertFalse($this->component->isa('FooFooBehavior')); $this->assertFalse($this->component->isa('FooBehavior')); $this->assertFalse($this->component->isa('BarBehavior')); $this->assertFalse($this->component->isa('FooBarBehavior')); $this->assertTrue($this->component->isa('PreBarBehavior')); - - - + + + // testing if we can detachBehaviors just by the name of the behavior instead of an array of the behavior $this->component->attachBehaviors(array('FooFooBehavior' => new FooFooBehavior, 'BarBehavior' => new BarBehavior)); - + $this->assertTrue($this->component->isa('FooBehavior')); $this->assertTrue($this->component->isa('BarBehavior')); - + $this->component->detachBehaviors(array('FooFooBehavior', 'BarBehavior')); - + $this->assertNull($this->component->asa('FooBehavior')); $this->assertNull($this->component->asa('FooFooBehavior')); $this->assertNull($this->component->asa('BarBehavior')); $this->assertNull($this->component->asa('FooBarBehavior')); - + $this->assertFalse($this->component->isa('FooFooBehavior')); $this->assertFalse($this->component->isa('FooBehavior')); $this->assertFalse($this->component->isa('BarBehavior')); $this->assertFalse($this->component->isa('FooBarBehavior')); } - - + + public function testClearBehaviors() { - + $this->assertNull($this->component->asa('FooBehavior')); $this->assertNull($this->component->asa('BarBehavior')); $this->assertNull($this->component->asa('FooBarBehavior')); $this->assertNull($this->component->asa('PreBarBehavior')); - + $this->component->attachBehaviors(array('FooFooBehavior' => new FooFooBehavior, 'BarBehavior' => new BarBehavior, 'PreBarBehavior' => new PreBarBehavior)); - + $this->assertNull($this->component->asa('FooBehavior')); $this->assertNotNull($this->component->asa('FooFooBehavior')); $this->assertNotNull($this->component->asa('BarBehavior')); $this->assertNull($this->component->asa('FooBarBehavior')); $this->assertNotNull($this->component->asa('PreBarBehavior')); - + $this->component->clearBehaviors(); - + $this->assertNull($this->component->asa('FooBehavior')); $this->assertNull($this->component->asa('BarBehavior')); $this->assertNull($this->component->asa('FooBarBehavior')); $this->assertNull($this->component->asa('PreBarBehavior')); } - + public function testEnableDisableBehavior() { - + $this->assertNull($this->component->enableBehavior('FooBehavior')); $this->assertNull($this->component->disableBehavior('FooBehavior')); - + try { $this->component->faaEverMore(true, true); $this->fail('TApplicationException not raised trying to execute a undefined class method'); } catch(TApplicationException $e) {} - + $this->component->attachBehavior('FooBehavior', new FooBehavior); - + $this->assertTrue($this->component->isa('FooBehavior')); try { $this->assertTrue($this->component->faaEverMore(true, true)); } catch(TApplicationException $e) { $this->fail('TApplicationException raised while trying to execute a behavior class method'); } - + $this->assertTrue($this->component->disableBehavior('FooBehavior')); - + $this->assertFalse($this->component->isa('FooBehavior')); - + try { $this->component->faaEverMore(true, true); $this->fail('TApplicationException not raised trying to execute a undefined class method'); } catch(TApplicationException $e) {} - + $this->assertTrue($this->component->enableBehavior('FooBehavior')); - + $this->assertTrue($this->component->isa('FooBehavior')); try { $this->assertTrue($this->component->faaEverMore(true, true)); } catch(TApplicationException $e) { $this->fail('TApplicationException raised while trying to execute a behavior class method'); } - - - + + + $this->assertNull($this->component->enableBehavior('BarClassBehavior')); $this->assertNull($this->component->disableBehavior('BarClassBehavior')); - + try { $this->component->moreFunction(true, true); $this->fail('TApplicationException not raised trying to execute an undefined class method'); } catch(TApplicationException $e) {} - + $this->component->attachClassBehavior('BarClassBehavior', new BarClassBehavior); - + $this->assertFalse($this->component->enableBehavior('BarClassBehavior')); $this->assertFalse($this->component->disableBehavior('BarClassBehavior')); - + try { $this->assertTrue($this->component->moreFunction(true, true)); } catch(TApplicationException $e) { $this->fail('TApplicationException raised while trying to execute a behavior class method'); } - + $this->component->detachClassBehavior('BarClassBehavior'); } - - + + public function testBehaviorFunctionCalls() { - + $this->component->attachBehavior('FooBarBehavior', $behavior = new FooBarBehavior); $this->component->attachClassBehavior('FooClassBehavior', $classbehavior = new FooClassBehavior); - + // Test the Class Methods $this->assertEquals(12, $this->component->faaEverMore(3, 4)); - + // Check that the called object is shifted in front of the array of a class behavior call $this->assertEquals($this->component, $this->component->getLastClassObject()); - - + + //Test the FooBarBehavior $this->assertEquals(27, $this->component->moreFunction(3, 3)); - + $this->assertTrue($this->component->disableBehavior('FooBarBehavior')); try { $this->assertNull($this->component->moreFunction(3, 4)); $this->fail('TApplicationException not raised trying to execute a disabled behavior'); } catch(TApplicationException $e) {} $this->assertTrue($this->component->enableBehavior('FooBarBehavior')); - + // Test the global event space, this should work and return false because no function implements these methods $this->assertNull($this->component->fxSomeUndefinedGlobalEvent()); $this->assertNull($this->component->dySomeUndefinedIntraObjectEvent()); - + $this->component->detachClassBehavior('FooClassBehavior'); - - - + + + // test object instance behaviors implemented through class-wide behaviors $this->component->attachClassBehavior('FooFooBehaviorAsClass', 'FooFooBehavior'); - + $component = new NewComponent; - + $this->assertEquals(5, $this->component->faafaaEverMore(3, 4)); $this->assertEquals(10, $component->faafaaEverMore(6, 8)); - + $this->component->detachClassBehavior('FooFooBehaviorAsClass'); $component->unlisten(); $component = null; - + try { $this->component->faafaaEverMore(3, 4); $this->fail('TApplicationException not raised trying to execute a disabled behavior'); } catch(TApplicationException $e) {} - - - + + + // make a call to an unpatched fx and dy call so that it's passed through to the __dycall function $dynamicComponent = new DynamicCallComponent; - + $this->assertNull($dynamicComponent->fxUndefinedEvent()); $this->assertNull($dynamicComponent->dyUndefinedEvent()); - + //This tests the dynamic __dycall function $this->assertEquals(1024, $dynamicComponent->dyPowerFunction(2, 10)); $this->assertEquals(5, $dynamicComponent->dyDivisionFunction(10, 2)); - + $this->assertEquals(2048, $dynamicComponent->fxPowerFunction(2, 10)); $this->assertEquals(10, $dynamicComponent->fxDivisionFunction(10, 2)); - + $dynamicComponent->unlisten(); - + } - + public function testHasProperty() { $this->assertTrue($this->component->hasProperty('Text'), "Component hasn't property Text"); $this->assertTrue($this->component->hasProperty('text'), "Component hasn't property text"); $this->assertFalse($this->component->hasProperty('Caption'), "Component has property Caption"); - + $this->assertTrue($this->component->hasProperty('ColorAttribute'), "Component hasn't property JsColorAttribute"); $this->assertTrue($this->component->hasProperty('colorattribute'), "Component hasn't property JsColorAttribute"); $this->assertFalse($this->component->canGetProperty('PastelAttribute'), "Component has property JsPastelAttribute"); - + $this->assertTrue($this->component->hasProperty('JSColorAttribute'), "Component hasn't property JsColorAttribute"); $this->assertTrue($this->component->hasProperty('jscolorattribute'), "Component hasn't property JsColorAttribute"); $this->assertFalse($this->component->hasProperty('jsPastelAttribute'), "Component has property JsPastelAttribute"); - + $this->assertFalse($this->component->hasProperty('Excitement'), "Component has property Excitement"); $this->component->attachBehavior('ExcitementPropBehavior', new BehaviorTestBehavior); $this->assertTrue($this->component->hasProperty('Excitement'), "Component hasn't property Excitement"); @@ -1107,27 +1107,27 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->assertFalse($this->component->hasProperty('Excitement'), "Component has property Excitement"); $this->component->enableBehavior('ExcitementPropBehavior'); $this->assertTrue($this->component->hasProperty('Excitement'), "Component hasn't property Excitement"); - + $this->component->detachBehavior('ExcitementPropBehavior'); - + $this->assertFalse($this->component->hasProperty('Excitement'), "Component has property Excitement"); - + } public function testCanGetProperty() { $this->assertTrue($this->component->canGetProperty('Text')); $this->assertTrue($this->component->canGetProperty('text')); $this->assertFalse($this->component->canGetProperty('Caption')); - + $this->assertTrue($this->component->canGetProperty('ColorAttribute')); $this->assertTrue($this->component->canGetProperty('colorattribute')); $this->assertFalse($this->component->canGetProperty('PastelAttribute')); - + $this->assertTrue($this->component->canGetProperty('JSColorAttribute')); $this->assertTrue($this->component->canGetProperty('jscolorattribute')); $this->assertFalse($this->component->canGetProperty('jsPastelAttribute')); - - + + $this->assertFalse($this->component->canGetProperty('Excitement'), "Component has property Excitement"); $this->component->attachBehavior('ExcitementPropBehavior', new BehaviorTestBehavior); $this->assertTrue($this->component->canGetProperty('Excitement'), "Component hasn't property Excitement"); @@ -1139,9 +1139,9 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->assertFalse($this->component->canGetProperty('Excitement'), "Component has property Excitement"); $this->component->enableBehavior('ExcitementPropBehavior'); $this->assertTrue($this->component->canGetProperty('Excitement'), "Component hasn't property Excitement"); - + $this->component->detachBehavior('ExcitementPropBehavior'); - + $this->assertFalse($this->component->canGetProperty('Excitement'), "Component has property Excitement"); } @@ -1149,15 +1149,15 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->assertTrue($this->component->canSetProperty('Text')); $this->assertTrue($this->component->canSetProperty('text')); $this->assertFalse($this->component->canSetProperty('Caption')); - + $this->assertTrue($this->component->canSetProperty('ColorAttribute')); $this->assertTrue($this->component->canSetProperty('colorattribute')); $this->assertFalse($this->component->canSetProperty('PastelAttribute')); - + $this->assertTrue($this->component->canSetProperty('JSColorAttribute')); $this->assertTrue($this->component->canSetProperty('jscolorattribute')); $this->assertFalse($this->component->canSetProperty('jsPastelAttribute')); - + $this->assertFalse($this->component->canSetProperty('Excitement'), "Component has property Excitement"); $this->component->attachBehavior('ExcitementPropBehavior', new BehaviorTestBehavior); $this->assertTrue($this->component->canSetProperty('Excitement'), "Component hasn't property Excitement"); @@ -1169,7 +1169,7 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->assertFalse($this->component->canSetProperty('Excitement'), "Component has property Excitement"); $this->component->enableBehavior('ExcitementPropBehavior'); $this->assertTrue($this->component->canSetProperty('Excitement'), "Component hasn't property Excitement"); - + $this->component->detachBehavior('ExcitementPropBehavior'); } @@ -1180,55 +1180,55 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->fail('exception not raised when getting undefined property'); } catch(TInvalidOperationException $e) { } - + $this->assertTrue($this->component->OnMyEvent instanceof TPriorityList); try { $value2=$this->component->onUndefinedEvent; $this->fail('exception not raised when getting undefined property'); } catch(TInvalidOperationException $e) { } - - //Without the function parenthesis, the function is _not_ called but the __get + + //Without the function parenthesis, the function is _not_ called but the __get // method is called and the global events (list) are accessed $this->assertTrue($this->component->fxAttachClassBehavior instanceof TPriorityList); $this->assertTrue($this->component->fxDetachClassBehavior instanceof TPriorityList); - + // even undefined global events have a list as every object is able to access every event $this->assertTrue($this->component->fxUndefinedEvent instanceof TPriorityList); - - + + // Test the behaviors within the __get function $this->component->enableBehaviors(); - + try { $value2=$this->component->Excitement; $this->fail('exception not raised when getting undefined property'); } catch(TInvalidOperationException $e) { } - + $this->component->attachBehavior('BehaviorTestBehavior', $behavior = new BehaviorTestBehavior); $this->assertEquals('faa', $this->component->Excitement); - + $this->component->disableBehaviors(); - + try { $this->assertEquals('faa', $this->component->Excitement); $this->fail('exception not raised when getting undefined property'); } catch(TInvalidOperationException $e) { } - + $this->component->enableBehaviors(); $this->assertEquals('faa', $this->component->getExcitement()); - + $this->component->disableBehavior('BehaviorTestBehavior'); - + $this->assertEquals($behavior, $this->component->BehaviorTestBehavior); try { $behavior = $this->component->BehaviorTestBehavior2; $this->fail('exception not raised when getting undefined property'); } catch(TInvalidOperationException $e) { } - + try { $this->assertEquals('faa', $this->component->Excitement); $this->fail('exception not raised when getting undefined property'); @@ -1236,13 +1236,13 @@ class TComponentTest extends PHPUnit_Framework_TestCase { } $this->component->enableBehavior('BehaviorTestBehavior'); $this->assertEquals('faa', $this->component->getExcitement()); - - + + // behaviors allow on and fx events to be passed through. $this->assertTrue($this->component->onBehaviorEvent instanceof TPriorityList); - + } - + public function testSetProperty() { $value='new value'; $this->component->Text=$value; @@ -1253,64 +1253,64 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->fail('exception not raised when setting undefined property'); } catch(TInvalidOperationException $e) { } - + // Test get only properties is a set function try { $this->component->ReadOnlyProperty = 'setting read only'; $this->fail('a property without a set function was set to a new value without error'); } catch(TInvalidOperationException $e) { } - + try { $this->component->ReadOnlyJsProperty = 'jssetting read only'; $this->fail('a js property without a set function was set to a new value without error'); } catch(TInvalidOperationException $e) { } - + try { $this->component->JsReadOnlyJsProperty = 'jssetting read only'; $this->fail('a js property without a set function was set to a new value without error'); } catch(TInvalidOperationException $e) { } - + $this->assertEquals(0, $this->component->getEventHandlers('onMyEvent')->getCount()); $this->component->onMyEvent = array($this->component,'myEventHandler'); $this->assertEquals(1, $this->component->getEventHandlers('onMyEvent')->getCount()); $this->component->onMyEvent[] = array($this->component,'Object.myEventHandler'); $this->assertEquals(2, $this->component->getEventHandlers('onMyEvent')->getCount()); - + $this->component->getEventHandlers('onMyEvent')->clear(); - + // Test the behaviors within the __get function $this->component->enableBehaviors(); - + try { $this->component->Excitement = 'laa'; $this->fail('exception not raised when getting undefined property'); } catch(TInvalidOperationException $e) { } - + $this->component->attachBehavior('BehaviorTestBehavior', $behavior1 = new BehaviorTestBehavior); $this->component->Excitement = 'laa'; $this->assertEquals('laa', $this->component->Excitement); $this->assertEquals('sol', $this->component->Excitement = 'sol'); - - + + $this->component->disableBehaviors(); - + try { $this->component->Excitement = false; $this->assertEquals(false, $this->component->Excitement); $this->fail('exception not raised when getting undefined property'); } catch(TInvalidOperationException $e) { } - + $this->component->enableBehaviors(); $this->component->Excitement = 'faa'; $this->assertEquals('faa', $this->component->getExcitement()); - + $this->component->disableBehavior('BehaviorTestBehavior'); - + try { $this->component->Excitement = false; $this->assertEquals(false, $this->component->Excitement); @@ -1320,82 +1320,82 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->component->enableBehavior('BehaviorTestBehavior'); $this->component->Excitement = 'sol'; $this->assertEquals('sol', $this->component->Excitement); - - + + $this->component->attachBehavior('BehaviorTestBehavior2', $behavior2 = new BehaviorTestBehavior); - + $this->assertEquals('sol', $this->component->Excitement); $this->assertEquals('faa', $behavior2->Excitement); - + // this sets Excitement for both because they are not uniquely named $this->component->Excitement = 'befaad'; - + $this->assertEquals('befaad', $this->component->Excitement); $this->assertEquals('befaad', $behavior1->Excitement); $this->assertEquals('befaad', $behavior2->Excitement); - - + + $this->component->detachBehavior('BehaviorTestBehavior2'); - + // behaviors allow on and fx events to be passed through. $this->assertTrue($this->component->BehaviorTestBehavior->onBehaviorEvent instanceof TPriorityList); - + $this->assertEquals(0, $this->component->BehaviorTestBehavior->getEventHandlers('onBehaviorEvent')->getCount()); $this->component->onBehaviorEvent = array($this->component,'myEventHandler'); $this->assertEquals(1, $this->component->BehaviorTestBehavior->getEventHandlers('onBehaviorEvent')->getCount()); $this->component->onBehaviorEvent[] = array($this->component,'Object.myEventHandler'); $this->assertEquals(2, $this->component->BehaviorTestBehavior->getEventHandlers('onBehaviorEvent')->getCount()); - + $this->component->BehaviorTestBehavior->getEventHandlers('onBehaviorEvent')->clear(); } - - + + public function testIsSetFunction() { $this->assertTrue(isset($this->component->fxAttachClassBehavior)); $this->component->unlisten(); - + $this->assertFalse(isset($this->component->onMyEvent)); $this->assertFalse(isset($this->component->undefinedEvent)); $this->assertFalse(isset($this->component->fxAttachClassBehavior)); - + $this->assertFalse(isset($this->component->BehaviorTestBehavior)); $this->assertFalse(isset($this->component->onBehaviorEvent)); - + $this->component->attachBehavior('BehaviorTestBehavior', new BehaviorTestBehavior); - + $this->assertTrue(isset($this->component->BehaviorTestBehavior)); $this->assertFalse(isset($this->component->onBehaviorEvent)); - + $this->component->attachEventHandler('onBehaviorEvent','foo'); $this->assertTrue(isset($this->component->onBehaviorEvent)); - + $this->component->attachEventHandler('onMyEvent','foo'); $this->assertTrue(isset($this->component->onMyEvent)); - + $this->assertTrue(isset($this->component->Excitement)); $this->component->Excitement = null; $this->assertFalse(isset($this->component->Excitement)); $this->assertFalse(isset($this->component->UndefinedBehaviorProperty)); - - + + } - - + + public function testUnsetFunction() { - + $this->assertEquals('default', $this->component->getText()); unset($this->component->Text); $this->assertNull($this->component->getText()); - + unset($this->component->UndefinedProperty); - + // object events $this->assertEquals(0, $this->component->onMyEvent->Count); $this->component->attachEventHandler('onMyEvent','foo'); $this->assertEquals(1, $this->component->onMyEvent->Count); unset($this->component->onMyEvent); $this->assertEquals(0, $this->component->onMyEvent->Count); - + //global events $this->assertEquals(1, $this->component->fxAttachClassBehavior->Count); $component = new NewComponent(); @@ -1404,22 +1404,22 @@ class TComponentTest extends PHPUnit_Framework_TestCase { // retain the other object event $this->assertEquals(1, $this->component->fxAttachClassBehavior->Count); $component->unlisten(); - + try { unset($this->component->Object); $this->fail('TInvalidOperationException not raised when unsetting get only property'); } catch(TInvalidOperationException $e) {} - + $this->component->attachBehavior('BehaviorTestBehavior', new BehaviorTestBehavior); $this->assertTrue($this->component->asa('BehaviorTestBehavior') instanceof BehaviorTestBehavior); $this->assertFalse($this->component->asa('BehaviorTestBehavior2') instanceof BehaviorTestBehavior); - + $this->assertEquals('faa', $this->component->Excitement); unset($this->component->Excitement); $this->assertNull($this->component->Excitement); $this->component->Excitement = 'sol'; $this->assertEquals('sol', $this->component->Excitement); - + // Test the disabling of unset within behaviors $this->component->disableBehaviors(); unset($this->component->Excitement); @@ -1430,60 +1430,60 @@ class TComponentTest extends PHPUnit_Framework_TestCase { unset($this->component->Excitement); $this->component->enableBehavior('BehaviorTestBehavior'); $this->assertEquals('sol', $this->component->Excitement); - + unset($this->component->Excitement); $this->assertNull($this->component->Excitement); - + try { unset($this->component->ReadOnly); $this->fail('TInvalidOperationException not raised when unsetting get only property'); } catch(TInvalidOperationException $e) {} - + $this->component->onBehaviorEvent = 'foo'; $this->assertEquals(1, count($this->component->onBehaviorEvent)); $this->assertEquals(1, count($this->component->BehaviorTestBehavior->onBehaviorEvent)); unset($this->component->onBehaviorEvent); $this->assertEquals(0, count($this->component->onBehaviorEvent)); $this->assertEquals(0, count($this->component->BehaviorTestBehavior->onBehaviorEvent)); - + // Remove behavior via unset unset($this->component->BehaviorTestBehavior); $this->assertFalse($this->component->asa('BehaviorTestBehavior') instanceof BehaviorTestBehavior); - + } public function testGetSubProperty() { $this->assertTrue('object text'===$this->component->getSubProperty('Object.Text')); } - + public function testSetSubProperty() { $this->component->setSubProperty('Object.Text','new object text'); $this->assertEquals('new object text',$this->component->getSubProperty('Object.Text')); } - + public function testHasEvent() { $this->assertTrue($this->component->hasEvent('OnMyEvent')); $this->assertTrue($this->component->hasEvent('onmyevent')); $this->assertFalse($this->component->hasEvent('onYourEvent')); - + // fx won't throw an error if any of these fx function are called on an object. // It is a special prefix event designation that every object responds to all events. $this->assertTrue($this->component->hasEvent('fxAttachClassBehavior')); $this->assertTrue($this->component->hasEvent('fxattachclassbehavior')); - + $this->assertTrue($this->component->hasEvent('fxNonExistantGlobalEvent')); $this->assertTrue($this->component->hasEvent('fxnonexistantglobalevent')); - + $this->assertTrue($this->component->hasEvent('dyNonExistantLocalEvent')); $this->assertTrue($this->component->hasEvent('fxnonexistantlocalevent')); - - + + //Test behavior events $this->assertFalse($this->component->hasEvent('onBehaviorEvent')); $this->component->attachBehavior('BehaviorTestBehavior', new BehaviorTestBehavior); $this->assertTrue($this->component->hasEvent('onBehaviorEvent')); $this->assertTrue($this->component->BehaviorTestBehavior->hasEvent('onBehaviorEvent')); - + $this->component->disableBehavior('BehaviorTestBehavior'); $this->assertFalse($this->component->hasEvent('onBehaviorEvent')); $this->component->enableBehavior('BehaviorTestBehavior'); @@ -1494,20 +1494,20 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->assertFalse($this->component->hasEventHandler('OnMyEvent')); $this->component->attachEventHandler('OnMyEvent','foo'); $this->assertTrue($this->component->hasEventHandler('OnMyEvent')); - + $this->assertFalse($this->component->hasEventHandler('fxNonExistantGlobalEvent')); $this->component->attachEventHandler('fxNonExistantGlobalEvent','foo'); $this->assertTrue($this->component->hasEventHandler('fxNonExistantGlobalEvent')); - + //Test behavior events $this->assertFalse($this->component->hasEventHandler('onBehaviorEvent')); $this->component->attachBehavior('BehaviorTestBehavior', new BehaviorTestBehavior); $this->assertFalse($this->component->hasEventHandler('onBehaviorEvent')); $this->assertFalse($this->component->BehaviorTestBehavior->hasEventHandler('onBehaviorEvent')); - + $this->component->attachEventHandler('onBehaviorEvent','foo'); $this->assertTrue($this->component->hasEventHandler('onBehaviorEvent')); - + $this->component->disableBehavior('BehaviorTestBehavior'); $this->assertFalse($this->component->hasEvent('onBehaviorEvent')); $this->assertFalse($this->component->hasEventHandler('onBehaviorEvent')); @@ -1526,7 +1526,7 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->fail('exception not raised when getting event handlers for undefined event'); } catch(TInvalidOperationException $e) { } - + $list=$this->component->getEventHandlers('fxRandomEvent'); $this->assertTrue(($list instanceof TPriorityList) && ($list->getCount()===0)); $this->component->attachEventHandler('fxRandomEvent','foo'); @@ -1536,9 +1536,9 @@ class TComponentTest extends PHPUnit_Framework_TestCase { } catch(TInvalidOperationException $e) { $this->fail('exception raised when getting event handlers for universal global event'); } - - - + + + //Test behavior events try { $list=$this->component->getEventHandlers('onBehaviorEvent'); @@ -1546,13 +1546,13 @@ class TComponentTest extends PHPUnit_Framework_TestCase { } catch(TInvalidOperationException $e) { } $this->assertFalse($this->component->hasEventHandler('onBehaviorEvent')); - + $this->component->attachBehavior('BehaviorTestBehavior', new BehaviorTestBehavior); $list=$this->component->getEventHandlers('onBehaviorEvent'); $this->assertTrue(($list instanceof TPriorityList) && ($list->getCount()===0)); $this->component->attachEventHandler('onBehaviorEvent','foo'); $this->assertTrue(($list instanceof TPriorityList) && ($list->getCount()===1)); - + $this->component->disableBehavior('BehaviorTestBehavior'); try { $list=$this->component->getEventHandlers('onBehaviorEvent'); @@ -1561,11 +1561,11 @@ class TComponentTest extends PHPUnit_Framework_TestCase { } $this->component->enableBehavior('BehaviorTestBehavior'); $this->assertTrue(($this->component->getEventHandlers('onBehaviorEvent') instanceof TPriorityList) && ($list->getCount()===1)); - + } public function testAttachEventHandler() { - + $this->component->attachEventHandler('OnMyEvent','foo'); $this->assertEquals(1, $this->component->getEventHandlers('OnMyEvent')->getCount()); try { @@ -1573,7 +1573,7 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->fail('exception not raised when attaching event handlers for undefined event'); } catch(TInvalidOperationException $e) { } - + //Testing the priorities of attaching events $this->component->attachEventHandler('OnMyEvent','foopre', 5); $this->component->attachEventHandler('OnMyEvent','foopost', 15); @@ -1584,8 +1584,8 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->assertEquals('foo', $list[1]); $this->assertEquals('foobar', $list[2]); $this->assertEquals('foopost', $list[3]); - - + + //Test attaching behavior events try { $this->component->attachEventHandler('onBehaviorEvent','foo'); @@ -1593,9 +1593,9 @@ class TComponentTest extends PHPUnit_Framework_TestCase { } catch(TInvalidOperationException $e) { } $this->component->attachBehavior('BehaviorTestBehavior', new BehaviorTestBehavior); - + $this->component->attachEventHandler('onBehaviorEvent','foo'); - + //Testing the priorities of attaching behavior events $this->component->attachEventHandler('onBehaviorEvent','foopre', 5); $this->component->attachEventHandler('onBehaviorEvent','foopost', 15); @@ -1608,7 +1608,7 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->assertEquals('foobar', $list[2]); $this->assertEquals('foobarfoobar', $list[3]); $this->assertEquals('foopost', $list[4]); - + $this->component->disableBehavior('BehaviorTestBehavior'); try { $this->component->attachEventHandler('onBehaviorEvent','bar'); @@ -1616,37 +1616,37 @@ class TComponentTest extends PHPUnit_Framework_TestCase { } catch(TInvalidOperationException $e) { } $this->component->enableBehavior('BehaviorTestBehavior'); - + } public function testDetachEventHandler() { - + $this->component->attachEventHandler('OnMyEvent','foo'); $this->assertEquals(1, $this->component->getEventHandlers('OnMyEvent')->getCount()); - + $this->component->attachEventHandler('OnMyEvent','foopre', 5); $this->component->attachEventHandler('OnMyEvent','foopost', 15); $this->component->attachEventHandler('OnMyEvent','foobar', 10); $this->component->attachEventHandler('OnMyEvent','foobarfoobar', 10); - - - + + + $this->component->detachEventHandler('OnMyEvent','foo'); $list = $this->component->getEventHandlers('OnMyEvent'); $this->assertEquals(4, $list->getCount()); - + $this->assertEquals('foopre', $list[0]); $this->assertEquals('foobar', $list[1]); $this->assertEquals('foobarfoobar', $list[2]); $this->assertEquals('foopost', $list[3]); - + $this->component->detachEventHandler('OnMyEvent','foopre', null); $this->assertEquals(4, $list->getCount()); - + $this->component->detachEventHandler('OnMyEvent','foopre', 5); $this->assertEquals(3, $list->getCount()); - - + + // Now do detaching of behavior on events try { $this->component->attachEventHandler('onBehaviorEvent','foo'); @@ -1654,29 +1654,29 @@ class TComponentTest extends PHPUnit_Framework_TestCase { } catch(TInvalidOperationException $e) { } $this->component->attachBehavior('BehaviorTestBehavior', new BehaviorTestBehavior); - + $this->component->attachEventHandler('onBehaviorEvent','foo'); $this->assertEquals(1, $this->component->getEventHandlers('onBehaviorEvent')->getCount()); - + $this->component->attachEventHandler('onBehaviorEvent','foopre', 5); $this->component->attachEventHandler('onBehaviorEvent','foopost', 15); $this->component->attachEventHandler('onBehaviorEvent','foobar', 10); $this->component->attachEventHandler('onBehaviorEvent','foobarfoobar', 10); - - - + + + $this->component->detachEventHandler('onBehaviorEvent','foo'); $list = $this->component->getEventHandlers('onBehaviorEvent'); $this->assertEquals(4, $list->getCount()); - + $this->assertEquals('foopre', $list[0]); $this->assertEquals('foobar', $list[1]); $this->assertEquals('foobarfoobar', $list[2]); $this->assertEquals('foopost', $list[3]); - + $this->component->detachEventHandler('onBehaviorEvent','foopre', null); $this->assertEquals(4, $list->getCount()); - + $this->component->detachEventHandler('onBehaviorEvent','foopre', 5); $this->assertEquals(3, $list->getCount()); } @@ -1693,14 +1693,14 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->assertFalse($this->component->Object->isEventHandled()); $this->component->raiseEvent('OnMyEvent',$this,null); $this->assertTrue($this->component->Object->isEventHandled()); - + $this->component->resetEventHandled(); $this->component->Object->resetEventHandled(); - - + + // Test a behavior on event $this->component->attachBehavior('test', new BehaviorTestBehavior); - + $this->component->attachEventHandler('onBehaviorEvent',array($this->component,'myEventHandler')); $this->assertFalse($this->component->isEventHandled()); $this->component->raiseEvent('onBehaviorEvent',$this,null); @@ -1709,13 +1709,13 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->assertFalse($this->component->Object->isEventHandled()); $this->component->raiseEvent('onBehaviorEvent',$this,null); $this->assertTrue($this->component->Object->isEventHandled()); - + //test behavior enabled/disabled events $this->component->disableBehavior('test'); - + $this->component->resetEventHandled(); $this->component->Object->resetEventHandled(); - + try { $this->component->attachEventHandler('onBehaviorEvent',array($this->component,'myEventHandler')); $this->fail('exception not raised when getting event handlers for undefined event'); @@ -1726,172 +1726,172 @@ class TComponentTest extends PHPUnit_Framework_TestCase { $this->fail('exception not raised when getting event handlers for undefined event'); } catch(TInvalidOperationException $e) {} $this->assertFalse($this->component->isEventHandled()); - + $this->component->enableBehavior('test'); - - - + + + //Test the return types of this function - + $this->assertFalse($this->component->isEventHandled()); $this->assertFalse($this->component->Object->isEventHandled()); $this->assertEquals(array(), $this->component->onBehaviorEvent($this,$this->component)); $this->assertTrue($this->component->isEventHandled()); $this->assertTrue($this->component->Object->isEventHandled()); - + // This accumulates all the responses from each of the events $arr=$this->component->onBehaviorEvent($this, $this->component, TEventResults::EVENT_RESULT_ALL); $this->assertEquals($this, $arr[0]['sender']); $this->assertEquals($this->component, $arr[0]['param']); $this->assertTrue(null === $arr[0]['response']); - + $this->assertEquals($this, $arr[1]['sender']); $this->assertEquals($this->component, $arr[1]['param']); $this->assertTrue(null === $arr[1]['response']); - + $this->assertEquals(2, count($arr)); - + // This tests without the default filtering-out of null $arr=$this->component->onBehaviorEvent($this, $this->component, false); $this->assertEquals(array(null, null), $arr); - - + + unset($this->component->onBehaviorEvent); $this->assertEquals(0, $this->component->onBehaviorEvent->Count); - + $this->component->onBehaviorEvent = array($this, 'returnValue4'); $this->component->onBehaviorEvent = array($this, 'returnValue1'); - + // Test the per event post processing function $arr=$this->component->onBehaviorEvent($this, $this->component, array($this, 'postEventFunction')); $this->assertEquals(array(exp(4), exp(1)), $arr); $arr=$this->component->onBehaviorEvent($this, $this->component, array($this, 'postEventFunction2')); $this->assertEquals(array(sin(4), sin(1)), $arr); - - + + //Testing Feed-forward functionality unset($this->component->onBehaviorEvent); - + $this->component->onBehaviorEvent = array($this, 'ffValue4'); $this->component->onBehaviorEvent = array($this, 'ffValue2'); $arr=$this->component->onBehaviorEvent($this, 5, TEventResults::EVENT_RESULT_FEED_FORWARD); $this->assertEquals(array(20, 40), $arr); - - + + unset($this->component->onBehaviorEvent); - + //Order of these events affects the response order in feed forward $this->component->onBehaviorEvent = array($this, 'ffValue2'); $this->component->onBehaviorEvent = array($this, 'ffValue4'); $arr=$this->component->onBehaviorEvent($this, 5, TEventResults::EVENT_RESULT_FEED_FORWARD); $this->assertEquals(array(10, 40), $arr); } - + public function returnValue1(){return 1;} public function returnValue4(){return 4;} public function postEventFunction($sender, $param, $caller, $response){return exp($response);} public function postEventFunction2($sender, $param, $caller, $response){return sin($response);} public function ffValue2($sender, $param){return $param*2;} public function ffValue4($sender, $param){return $param*4;} - - + + public function testGlobalEventListenerInRaiseEvent() { //TODO Test the Global Event Listener } - - + + public function testIDynamicMethodsOnBehavior() { - + //Add Behavior with dynamic call $this->component->attachBehavior('TDynamicBehavior', new TDynamicBehavior); - + //Check that the behavior is working as it should $this->assertTrue($this->component->isa('TDynamicBehavior')); $this->assertNull($this->component->getLastBehaviorDynamicMethodCalled()); - + // call basic behavior implemented method from object (containing behavior) $this->assertEquals(42, $this->component->TestBehaviorMethod(6, 7)); - + //Test out undefined behavior/host object method try { $this->component->objectAndBehaviorUndefinedMethod(); $this->fail('exception not raised when evaluating an undefined method by the object and behavior'); } catch(TApplicationException $e) { } - + // calling undefined dynamic method, caught by the __dycall method in the behavior and implemented // this behavior catches undefined dynamic event and divides param1 by param 2 $this->assertEquals(22, $this->component->dyTestDynamicBehaviorMethod(242, 11)); $this->assertEquals('dyTestDynamicBehaviorMethod', $this->component->getLastBehaviorDynamicMethodCalled()); - + // calling undefined dynamic method, caught by the __dycall in the behavior and ignored $this->assertNull($this->component->dyUndefinedIntraEvent(242, 11)); $this->assertEquals('dyUndefinedIntraEvent', $this->component->getLastBehaviorDynamicMethodCalled()); - + //call behavior defined dynamic event // param1 * 2 * param2 $this->assertEquals(2420, $this->component->dyTestIntraEvent(121, 10)); - + $this->component->detachBehavior('TDynamicBehavior'); $this->assertFalse($this->component->isa('TDynamicBehavior')); - - - + + + //Add Class Behavior with dynamic call $this->component->attachBehavior('TDynamicClassBehavior', new TDynamicClassBehavior); - + //Check that the behavior is working as it should $this->assertTrue($this->component->isa('TDynamicClassBehavior')); $this->assertNull($this->component->getLastBehaviorDynamicMethodCalled()); - + // call basic behavior implemented method from object (containing behavior) $this->assertEquals(42, $this->component->TestBehaviorMethod(6, 7)); - + //Test out undefined behavior/host object method try { $this->component->objectAndBehaviorUndefinedMethod(); $this->fail('exception not raised when evaluating an undefined method by the object and behavior'); } catch(TApplicationException $e) { } - + // calling undefined dynamic method, caught by the __dycall method in the behavior and implemented // this behavior catches undefined dynamic event and divides param1 by param 2 $this->assertEquals(22, $this->component->dyTestDynamicClassBehaviorMethod(242, 11)); $this->assertEquals('dyTestDynamicClassBehaviorMethod', $this->component->getLastBehaviorDynamicMethodCalled()); - + // calling undefined dynamic method, caught by the __dycall in the behavior and ignored $this->assertNull($this->component->dyUndefinedIntraEvent(242, 11)); $this->assertEquals('dyUndefinedIntraEvent', $this->component->getLastBehaviorDynamicMethodCalled()); - + //call behavior defined dynamic event // param1 * 2 * param2 $this->assertEquals(2420, $this->component->dyTestIntraEvent(121, 10)); - + $this->component->detachBehavior('TDynamicClassBehavior'); $this->assertFalse($this->component->isa('TDynamicClassBehavior')); - + } - + // This also tests the priority of the common global raiseEvent events public function testIDynamicMethodsOnBehaviorGlobalEvents() { $component = new GlobalRaiseComponent(); - + // common function has a default priority of 10 $component->attachEventHandler(TComponent::GLOBAL_RAISE_EVENT_LISTENER, array($component, 'commonRaiseEventListener')); $component->attachEventHandler(TComponent::GLOBAL_RAISE_EVENT_LISTENER, array($component, 'postglobalRaiseEventListener'), 1); $component->attachEventHandler(TComponent::GLOBAL_RAISE_EVENT_LISTENER, array($component, 'preglobalRaiseEventListener'), -1); - + $this->assertEquals(5, $this->component->fxGlobalListener->getCount()); $this->assertEquals(1, $this->component->fxPrimaryGlobalEvent->getCount()); $this->assertEquals(1, $this->component->fxPrimaryGlobalEvent->getCount(), 'fxPrimaryGlobalEvent is not installed on test object'); - + // call the global event on a different object than the test object $res = $this->component->raiseEvent('fxPrimaryGlobalEvent', $this, null, TEventResults::EVENT_RESULT_ALL); - + $this->assertEquals(6, count($res)); $this->assertEquals(array('pregl', 'primary', 'postgl', 'fxGL', 'fxcall', 'com'), $component->getCallOrders()); - + $component->unlisten(); } @@ -1907,10 +1907,10 @@ class TComponentTest extends PHPUnit_Framework_TestCase { } catch(Exception $e) { } } - - - - + + + + public function testEvaluateStatements() { $statements='$a="test string"; echo $a;'; $this->assertEquals('test string',$this->component->evaluateStatements($statements)); @@ -1921,169 +1921,167 @@ class TComponentTest extends PHPUnit_Framework_TestCase { } catch(Exception $e) { } } - - + + public function testDynamicFunctionCall() { - + $this->assertEquals(' aa bb cc __ .. ++ || !! ?? ', $this->component->dyTextFilter(' aa bb cc __ .. ++ || !! ?? ')); - + $this->component->attachBehavior('dy1', new dy1TextReplace); $this->assertFalse($this->component->dy1->isCalled()); $this->assertEquals(' aa bb cc __ __ ++ || !! ?? ', $this->component->dyTextFilter(' aa bb cc __ .. ++ || !! ?? ')); $this->assertTrue($this->component->dy1->isCalled()); - + $this->component->attachBehavior('dy2', new dy2TextReplace); $this->assertFalse($this->component->dy2->isCalled()); $this->assertEquals(' aa bb cc __ __ || || !! ?? ', $this->component->dyTextFilter(' aa bb cc __ .. ++ || !! ?? ')); $this->assertTrue($this->component->dy2->isCalled()); - + $this->component->attachBehavior('dy3', new dy3TextReplace); $this->assertFalse($this->component->dy3->isCalled()); $this->assertEquals(' aa bb cc __ __ || || ?? ?? ', $this->component->dyTextFilter(' aa bb cc __ .. ++ || !! ?? ')); $this->assertTrue($this->component->dy3->isCalled()); - + $this->assertEquals(' aa bb cc __ .. ++ || !! ?? ', $this->component->dyUndefinedEvent(' aa bb cc __ .. ++ || !! ?? ')); - + $this->assertEquals(0.25, $this->component->dyPowerFunction(2,2)); - - + + $this->component->detachBehavior('dy1'); $this->component->detachBehavior('dy2'); $this->component->detachBehavior('dy3'); - + //test class behaviors of dynamic events and the argument list order - + $this->assertEquals(' aa bb cc __ .. ++ || !! ?? ', $this->component->dyTextFilter(' aa bb cc __ .. ++ || !! ?? ')); - + $this->component->attachBehavior('dy1', new dy1ClassTextReplace); $this->assertFalse($this->component->dy1->isCalled()); $this->assertEquals(' aa bb cc .. .. ++ || !! ?? ', $this->component->dyTextFilter(' aa bb cc __ .. ++ || !! ?? ')); $this->assertTrue($this->component->dy1->isCalled()); - + $this->component->attachBehavior('dy2', new dy2ClassTextReplace); $this->assertFalse($this->component->dy2->isCalled()); $this->assertEquals(' aa bb cc .. .. ++ ++ !! ?? ', $this->component->dyTextFilter(' aa bb cc __ .. ++ || !! ?? ')); $this->assertTrue($this->component->dy2->isCalled()); - + $this->component->attachBehavior('dy3', new dy3ClassTextReplace); $this->assertFalse($this->component->dy3->isCalled()); $this->assertEquals(' aa bb cc .. .. ++ ++ !! ^_^ ', $this->component->dyTextFilter(' aa bb cc __ .. ++ || !! ?? ')); $this->assertTrue($this->component->dy3->isCalled()); - + $this->assertEquals(' aa bb cc __ .. ++ || !! ?? ', $this->component->dyUndefinedEvent(' aa bb cc __ .. ++ || !! ?? ')); - + $this->assertEquals(0.25, $this->component->dyPowerFunction(2,2)); - - + + } - - - - + + + + public function testDynamicIntraObjectEvents() { - + $this->component->attachBehavior('IntraEvents', new IntraObjectExtenderBehavior); - + $this->assertNull($this->component->IntraEvents->LastCall); - + //unlisten first, this object listens upon instantiation. $this->component->unlisten(); $this->assertEquals(2, $this->component->IntraEvents->LastCall); - + // ensures that IntraEvents nulls the last call variable when calling this getter $this->assertNull($this->component->IntraEvents->LastCall); - + //listen next to undo the unlisten $this->component->listen(); $this->assertEquals(1, $this->component->IntraEvents->LastCall); - - + + $this->assertEquals(3, $this->component->evaluateExpression('1+2')); $this->assertEquals(7, $this->component->IntraEvents->LastCall); - + $statements='$a="test string"; echo $a;'; $this->assertEquals('test string', $this->component->evaluateStatements($statements)); $this->assertEquals(8, $this->component->IntraEvents->LastCall); - + $component2 = new NewComponentNoListen(); $this->assertNull($this->component->createdOnTemplate($component2)); $this->assertEquals(9, $this->component->IntraEvents->LastCall); - + $this->assertNull($this->component->addParsedObject($component2)); $this->assertEquals(10, $this->component->IntraEvents->LastCall); - - - + + + $behavior = new BarBehavior; $this->assertEquals($behavior, $this->component->attachBehavior('BarBehavior', $behavior)); $this->assertEquals(11, $this->component->IntraEvents->LastCall); - + $this->assertNull($this->component->disableBehaviors()); $this->assertNull($this->component->enableBehaviors()); $this->assertEquals(27, $this->component->IntraEvents->LastCall); - + $this->assertTrue($this->component->disableBehavior('BarBehavior')); $this->assertEquals(16, $this->component->IntraEvents->LastCall); - + $this->assertTrue($this->component->enableBehavior('BarBehavior')); $this->assertEquals(15, $this->component->IntraEvents->LastCall); - + $this->assertEquals($behavior, $this->component->detachBehavior('BarBehavior')); $this->assertEquals(12, $this->component->IntraEvents->LastCall); - - + + $this->component->attachEventHandler('OnMyEvent',array($this->component,'myEventHandler')); $this->component->raiseEvent('OnMyEvent',$this,null); - + //3 + 4 + 5 + 6 = 18 (the behavior adds these together when each raiseEvent dynamic intra event is called) $this->assertEquals(18, $this->component->IntraEvents->LastCall); } - - - + + + public function testJavascriptGetterSetter() { - + $this->assertFalse(isset($this->component->ColorAttribute)); $this->assertFalse(isset($this->component->JsColorAttribute)); - + $this->component->ColorAttribute = "('#556677', '#abcdef', 503987)"; $this->assertEquals("('#556677', '#abcdef', 503987)", $this->component->ColorAttribute); - + $this->assertTrue(isset($this->component->ColorAttribute)); $this->assertTrue(isset($this->component->JsColorAttribute)); - + $this->component->ColorAttribute = "new Array(1, 2, 3, 4, 5)"; $this->assertEquals("new Array(1, 2, 3, 4, 5)", $this->component->JsColorAttribute); - + $this->component->JsColorAttribute = "['#112233', '#fedcba', 22009837]"; $this->assertEquals("['#112233', '#fedcba', 22009837]", $this->component->ColorAttribute); } - - + + public function testJavascriptIssetUnset() { - + $this->component->JsColorAttribute = "['#112233', '#fedcba', 22009837]"; $this->assertEquals("['#112233', '#fedcba', 22009837]", $this->component->ColorAttribute); - + unset($this->component->ColorAttribute); - + $this->assertFalse(isset($this->component->ColorAttribute)); $this->assertFalse(isset($this->component->JsColorAttribute)); - + $this->component->JsColorAttribute = "['#112233', '#fedcba', 22009837]"; - + $this->assertTrue(isset($this->component->ColorAttribute)); $this->assertTrue(isset($this->component->JsColorAttribute)); - + unset($this->component->JsColorAttribute); - + $this->assertFalse(isset($this->component->ColorAttribute)); $this->assertFalse(isset($this->component->JsColorAttribute)); - + } - - - -} -?>
\ No newline at end of file + + +} |