__NAMESPACE__ . '\BarBehavior', ); } } class BarBehavior extends Behavior { public $behaviorProperty = 'behavior property'; public function behaviorMethod() { return 'behavior method'; } } class BehaviorTest extends TestCase { public function testAttachAndAccessing() { $bar = new BarClass(); $behavior = new BarBehavior(); $bar->attachBehavior('bar', $behavior); $this->assertEquals('behavior property', $bar->behaviorProperty); $this->assertEquals('behavior method', $bar->behaviorMethod()); $this->assertEquals('behavior property', $bar->getBehavior('bar')->behaviorProperty); $this->assertEquals('behavior method', $bar->getBehavior('bar')->behaviorMethod()); $behavior = new BarBehavior(array('behaviorProperty' => 'reattached')); $bar->attachBehavior('bar', $behavior); $this->assertEquals('reattached', $bar->behaviorProperty); } public function testAutomaticAttach() { $foo = new FooClass(); $this->assertEquals('behavior property', $foo->behaviorProperty); $this->assertEquals('behavior method', $foo->behaviorMethod()); } }