* @copyright 2008-2014 Alexey Borzov * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License * @link http://pear.php.net/package/HTTP_Request2 */ /** Sets up includes */ require_once dirname(__FILE__) . '/TestHelper.php'; /** * Class representing a HTTP request */ require_once 'HTTP/Request2.php'; /** * Mock observer */ class HTTP_Request2_MockObserver implements SplObserver { public $calls = 0; public $event; public function update (SplSubject $subject) { $this->calls++; $this->event = $subject->getLastEvent(); } } /** * Unit test for subject-observer pattern implementation in HTTP_Request2 */ class HTTP_Request2_ObserverTest extends PHPUnit_Framework_TestCase { public function testSetLastEvent() { $request = new HTTP_Request2(); $observer = new HTTP_Request2_MockObserver(); $request->attach($observer); $request->setLastEvent('foo', 'bar'); $this->assertEquals(1, $observer->calls); $this->assertEquals(array('name' => 'foo', 'data' => 'bar'), $observer->event); $request->setLastEvent('baz'); $this->assertEquals(2, $observer->calls); $this->assertEquals(array('name' => 'baz', 'data' => null), $observer->event); } public function testAttachOnlyOnce() { $request = new HTTP_Request2(); $observer = new HTTP_Request2_MockObserver(); $observer2 = new HTTP_Request2_MockObserver(); $request->attach($observer); $request->attach($observer2); $request->attach($observer); $request->setLastEvent('event', 'data'); $this->assertEquals(1, $observer->calls); $this->assertEquals(1, $observer2->calls); } public function testDetach() { $request = new HTTP_Request2(); $observer = new HTTP_Request2_MockObserver(); $observer2 = new HTTP_Request2_MockObserver(); $request->attach($observer); $request->detach($observer2); // should not be a error $request->setLastEvent('first'); $request->detach($observer); $request->setLastEvent('second'); $this->assertEquals(1, $observer->calls); $this->assertEquals(array('name' => 'first', 'data' => null), $observer->event); } } ?>