diff --git a/Observer/Observer.php b/Observer/User.php similarity index 64% rename from Observer/Observer.php rename to Observer/User.php index 1cb07dc..3b41867 100644 --- a/Observer/Observer.php +++ b/Observer/User.php @@ -1,30 +1,16 @@ notify(); } + } -$user = new User(); -$user->attach(new UserObserver()); - -$user->notify(); diff --git a/Observer/UserObserver.php b/Observer/UserObserver.php new file mode 100644 index 0000000..3cb8b9a --- /dev/null +++ b/Observer/UserObserver.php @@ -0,0 +1,32 @@ +observer = new UserObserver(); + } + + /** + * Tests the notification + */ + public function testNotify() + { + $this->expectOutputString('DesignPatterns\Observer\User has been updated'); + $subject = new User(); + + $subject->attach($this->observer); + $subject->property = 123; + } + + /** + * Tests the subscribing + */ + public function testAttachDetach() + { + $subject = new User(); + $this->assertAttributeEmpty('_observers', $subject); + $subject->attach($this->observer); + $this->assertAttributeNotEmpty('_observers', $subject); + $subject->detach($this->observer); + $this->assertAttributeEmpty('_observers', $subject); + } + + /** + * Tests the update() invocation on a mockup + */ + public function testUpdateCalling() + { + $subject = new User(); + $observer = $this->getMock('SplObserver'); + $subject->attach($observer); + + $observer->expects($this->once()) + ->method('update') + ->with($subject); + + $subject->notify(); + } + +} \ No newline at end of file