moved Libs out of core folder
This commit is contained in:
		| @@ -0,0 +1,244 @@ | ||||
| <?php | ||||
|  | ||||
| /* | ||||
|  * This file is part of the Symfony package. | ||||
|  * | ||||
|  * (c) Fabien Potencier <fabien@symfony.com> | ||||
|  * | ||||
|  * For the full copyright and license information, please view the LICENSE | ||||
|  * file that was distributed with this source code. | ||||
|  */ | ||||
|  | ||||
| namespace Symfony\Component\EventDispatcher\Tests; | ||||
|  | ||||
| use Symfony\Component\DependencyInjection\Container; | ||||
| use Symfony\Component\DependencyInjection\Scope; | ||||
| use Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher; | ||||
| use Symfony\Component\EventDispatcher\Event; | ||||
| use Symfony\Component\EventDispatcher\EventSubscriberInterface; | ||||
|  | ||||
| class ContainerAwareEventDispatcherTest extends \PHPUnit_Framework_TestCase | ||||
| { | ||||
|     public function testAddAListenerService() | ||||
|     { | ||||
|         $event = new Event(); | ||||
|  | ||||
|         $service = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service'); | ||||
|  | ||||
|         $service | ||||
|             ->expects($this->once()) | ||||
|             ->method('onEvent') | ||||
|             ->with($event) | ||||
|         ; | ||||
|  | ||||
|         $container = new Container(); | ||||
|         $container->set('service.listener', $service); | ||||
|  | ||||
|         $dispatcher = new ContainerAwareEventDispatcher($container); | ||||
|         $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent')); | ||||
|  | ||||
|         $dispatcher->dispatch('onEvent', $event); | ||||
|     } | ||||
|  | ||||
|     public function testAddASubscriberService() | ||||
|     { | ||||
|         $event = new Event(); | ||||
|  | ||||
|         $service = $this->getMock('Symfony\Component\EventDispatcher\Tests\SubscriberService'); | ||||
|  | ||||
|         $service | ||||
|             ->expects($this->once()) | ||||
|             ->method('onEvent') | ||||
|             ->with($event) | ||||
|         ; | ||||
|  | ||||
|         $container = new Container(); | ||||
|         $container->set('service.subscriber', $service); | ||||
|  | ||||
|         $dispatcher = new ContainerAwareEventDispatcher($container); | ||||
|         $dispatcher->addSubscriberService('service.subscriber', 'Symfony\Component\EventDispatcher\Tests\SubscriberService'); | ||||
|  | ||||
|         $dispatcher->dispatch('onEvent', $event); | ||||
|     } | ||||
|  | ||||
|     public function testPreventDuplicateListenerService() | ||||
|     { | ||||
|         $event = new Event(); | ||||
|  | ||||
|         $service = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service'); | ||||
|  | ||||
|         $service | ||||
|             ->expects($this->once()) | ||||
|             ->method('onEvent') | ||||
|             ->with($event) | ||||
|         ; | ||||
|  | ||||
|         $container = new Container(); | ||||
|         $container->set('service.listener', $service); | ||||
|  | ||||
|         $dispatcher = new ContainerAwareEventDispatcher($container); | ||||
|         $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent'), 5); | ||||
|         $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent'), 10); | ||||
|  | ||||
|         $dispatcher->dispatch('onEvent', $event); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @expectedException \InvalidArgumentException | ||||
|      */ | ||||
|     public function testTriggerAListenerServiceOutOfScope() | ||||
|     { | ||||
|         $service = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service'); | ||||
|  | ||||
|         $scope = new Scope('scope'); | ||||
|         $container = new Container(); | ||||
|         $container->addScope($scope); | ||||
|         $container->enterScope('scope'); | ||||
|  | ||||
|         $container->set('service.listener', $service, 'scope'); | ||||
|  | ||||
|         $dispatcher = new ContainerAwareEventDispatcher($container); | ||||
|         $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent')); | ||||
|  | ||||
|         $container->leaveScope('scope'); | ||||
|         $dispatcher->dispatch('onEvent'); | ||||
|     } | ||||
|  | ||||
|     public function testReEnteringAScope() | ||||
|     { | ||||
|         $event = new Event(); | ||||
|  | ||||
|         $service1 = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service'); | ||||
|  | ||||
|         $service1 | ||||
|             ->expects($this->exactly(2)) | ||||
|             ->method('onEvent') | ||||
|             ->with($event) | ||||
|         ; | ||||
|  | ||||
|         $scope = new Scope('scope'); | ||||
|         $container = new Container(); | ||||
|         $container->addScope($scope); | ||||
|         $container->enterScope('scope'); | ||||
|  | ||||
|         $container->set('service.listener', $service1, 'scope'); | ||||
|  | ||||
|         $dispatcher = new ContainerAwareEventDispatcher($container); | ||||
|         $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent')); | ||||
|         $dispatcher->dispatch('onEvent', $event); | ||||
|  | ||||
|         $service2 = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service'); | ||||
|  | ||||
|         $service2 | ||||
|             ->expects($this->once()) | ||||
|             ->method('onEvent') | ||||
|             ->with($event) | ||||
|         ; | ||||
|  | ||||
|         $container->enterScope('scope'); | ||||
|         $container->set('service.listener', $service2, 'scope'); | ||||
|  | ||||
|         $dispatcher->dispatch('onEvent', $event); | ||||
|  | ||||
|         $container->leaveScope('scope'); | ||||
|  | ||||
|         $dispatcher->dispatch('onEvent'); | ||||
|     } | ||||
|  | ||||
|     public function testHasListenersOnLazyLoad() | ||||
|     { | ||||
|         $event = new Event(); | ||||
|  | ||||
|         $service = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service'); | ||||
|  | ||||
|         $container = new Container(); | ||||
|         $container->set('service.listener', $service); | ||||
|  | ||||
|         $dispatcher = new ContainerAwareEventDispatcher($container); | ||||
|         $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent')); | ||||
|  | ||||
|         $event->setDispatcher($dispatcher); | ||||
|         $event->setName('onEvent'); | ||||
|  | ||||
|         $service | ||||
|             ->expects($this->once()) | ||||
|             ->method('onEvent') | ||||
|             ->with($event) | ||||
|         ; | ||||
|  | ||||
|         $this->assertTrue($dispatcher->hasListeners()); | ||||
|  | ||||
|         if ($dispatcher->hasListeners('onEvent')) { | ||||
|             $dispatcher->dispatch('onEvent'); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public function testGetListenersOnLazyLoad() | ||||
|     { | ||||
|         $service = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service'); | ||||
|  | ||||
|         $container = new Container(); | ||||
|         $container->set('service.listener', $service); | ||||
|  | ||||
|         $dispatcher = new ContainerAwareEventDispatcher($container); | ||||
|         $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent')); | ||||
|  | ||||
|         $listeners = $dispatcher->getListeners(); | ||||
|  | ||||
|         $this->assertTrue(isset($listeners['onEvent'])); | ||||
|  | ||||
|         $this->assertCount(1, $dispatcher->getListeners('onEvent')); | ||||
|     } | ||||
|  | ||||
|     public function testRemoveAfterDispatch() | ||||
|     { | ||||
|         $service = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service'); | ||||
|  | ||||
|         $container = new Container(); | ||||
|         $container->set('service.listener', $service); | ||||
|  | ||||
|         $dispatcher = new ContainerAwareEventDispatcher($container); | ||||
|         $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent')); | ||||
|  | ||||
|         $dispatcher->dispatch('onEvent', new Event()); | ||||
|         $dispatcher->removeListener('onEvent', array($container->get('service.listener'), 'onEvent')); | ||||
|         $this->assertFalse($dispatcher->hasListeners('onEvent')); | ||||
|     } | ||||
|  | ||||
|     public function testRemoveBeforeDispatch() | ||||
|     { | ||||
|         $service = $this->getMock('Symfony\Component\EventDispatcher\Tests\Service'); | ||||
|  | ||||
|         $container = new Container(); | ||||
|         $container->set('service.listener', $service); | ||||
|  | ||||
|         $dispatcher = new ContainerAwareEventDispatcher($container); | ||||
|         $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent')); | ||||
|  | ||||
|         $dispatcher->removeListener('onEvent', array($container->get('service.listener'), 'onEvent')); | ||||
|         $this->assertFalse($dispatcher->hasListeners('onEvent')); | ||||
|     } | ||||
| } | ||||
|  | ||||
| class Service | ||||
| { | ||||
|     public function onEvent(Event $e) | ||||
|     { | ||||
|     } | ||||
| } | ||||
|  | ||||
| class SubscriberService implements EventSubscriberInterface | ||||
| { | ||||
|     public static function getSubscribedEvents() | ||||
|     { | ||||
|         return array( | ||||
|             'onEvent' => 'onEvent', | ||||
|             'onEvent' => array('onEvent', 10), | ||||
|             'onEvent' => array('onEvent'), | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function onEvent(Event $e) | ||||
|     { | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,346 @@ | ||||
| <?php | ||||
|  | ||||
| /* | ||||
|  * This file is part of the Symfony package. | ||||
|  * | ||||
|  * (c) Fabien Potencier <fabien@symfony.com> | ||||
|  * | ||||
|  * For the full copyright and license information, please view the LICENSE | ||||
|  * file that was distributed with this source code. | ||||
|  */ | ||||
|  | ||||
| namespace Symfony\Component\EventDispatcher\Tests; | ||||
|  | ||||
| use Symfony\Component\EventDispatcher\Event; | ||||
| use Symfony\Component\EventDispatcher\EventDispatcher; | ||||
| use Symfony\Component\EventDispatcher\EventSubscriberInterface; | ||||
|  | ||||
| class EventDispatcherTest extends \PHPUnit_Framework_TestCase | ||||
| { | ||||
|     /* Some pseudo events */ | ||||
|     const preFoo = 'pre.foo'; | ||||
|     const postFoo = 'post.foo'; | ||||
|     const preBar = 'pre.bar'; | ||||
|     const postBar = 'post.bar'; | ||||
|  | ||||
|     /** | ||||
|      * @var EventDispatcher | ||||
|      */ | ||||
|     private $dispatcher; | ||||
|  | ||||
|     private $listener; | ||||
|  | ||||
|     protected function setUp() | ||||
|     { | ||||
|         $this->dispatcher = new EventDispatcher(); | ||||
|         $this->listener = new TestEventListener(); | ||||
|     } | ||||
|  | ||||
|     protected function tearDown() | ||||
|     { | ||||
|         $this->dispatcher = null; | ||||
|         $this->listener = null; | ||||
|     } | ||||
|  | ||||
|     public function testInitialState() | ||||
|     { | ||||
|         $this->assertEquals(array(), $this->dispatcher->getListeners()); | ||||
|         $this->assertFalse($this->dispatcher->hasListeners(self::preFoo)); | ||||
|         $this->assertFalse($this->dispatcher->hasListeners(self::postFoo)); | ||||
|     } | ||||
|  | ||||
|     public function testAddListener() | ||||
|     { | ||||
|         $this->dispatcher->addListener('pre.foo', array($this->listener, 'preFoo')); | ||||
|         $this->dispatcher->addListener('post.foo', array($this->listener, 'postFoo')); | ||||
|         $this->assertTrue($this->dispatcher->hasListeners(self::preFoo)); | ||||
|         $this->assertTrue($this->dispatcher->hasListeners(self::postFoo)); | ||||
|         $this->assertCount(1, $this->dispatcher->getListeners(self::preFoo)); | ||||
|         $this->assertCount(1, $this->dispatcher->getListeners(self::postFoo)); | ||||
|         $this->assertCount(2, $this->dispatcher->getListeners()); | ||||
|     } | ||||
|  | ||||
|     public function testGetListenersSortsByPriority() | ||||
|     { | ||||
|         $listener1 = new TestEventListener(); | ||||
|         $listener2 = new TestEventListener(); | ||||
|         $listener3 = new TestEventListener(); | ||||
|         $listener1->name = '1'; | ||||
|         $listener2->name = '2'; | ||||
|         $listener3->name = '3'; | ||||
|  | ||||
|         $this->dispatcher->addListener('pre.foo', array($listener1, 'preFoo'), -10); | ||||
|         $this->dispatcher->addListener('pre.foo', array($listener2, 'preFoo'), 10); | ||||
|         $this->dispatcher->addListener('pre.foo', array($listener3, 'preFoo')); | ||||
|  | ||||
|         $expected = array( | ||||
|             array($listener2, 'preFoo'), | ||||
|             array($listener3, 'preFoo'), | ||||
|             array($listener1, 'preFoo'), | ||||
|         ); | ||||
|  | ||||
|         $this->assertSame($expected, $this->dispatcher->getListeners('pre.foo')); | ||||
|     } | ||||
|  | ||||
|     public function testGetAllListenersSortsByPriority() | ||||
|     { | ||||
|         $listener1 = new TestEventListener(); | ||||
|         $listener2 = new TestEventListener(); | ||||
|         $listener3 = new TestEventListener(); | ||||
|         $listener4 = new TestEventListener(); | ||||
|         $listener5 = new TestEventListener(); | ||||
|         $listener6 = new TestEventListener(); | ||||
|  | ||||
|         $this->dispatcher->addListener('pre.foo', $listener1, -10); | ||||
|         $this->dispatcher->addListener('pre.foo', $listener2); | ||||
|         $this->dispatcher->addListener('pre.foo', $listener3, 10); | ||||
|         $this->dispatcher->addListener('post.foo', $listener4, -10); | ||||
|         $this->dispatcher->addListener('post.foo', $listener5); | ||||
|         $this->dispatcher->addListener('post.foo', $listener6, 10); | ||||
|  | ||||
|         $expected = array( | ||||
|             'pre.foo'  => array($listener3, $listener2, $listener1), | ||||
|             'post.foo' => array($listener6, $listener5, $listener4), | ||||
|         ); | ||||
|  | ||||
|         $this->assertSame($expected, $this->dispatcher->getListeners()); | ||||
|     } | ||||
|  | ||||
|     public function testDispatch() | ||||
|     { | ||||
|         $this->dispatcher->addListener('pre.foo', array($this->listener, 'preFoo')); | ||||
|         $this->dispatcher->addListener('post.foo', array($this->listener, 'postFoo')); | ||||
|         $this->dispatcher->dispatch(self::preFoo); | ||||
|         $this->assertTrue($this->listener->preFooInvoked); | ||||
|         $this->assertFalse($this->listener->postFooInvoked); | ||||
|         $this->assertInstanceOf('Symfony\Component\EventDispatcher\Event', $this->dispatcher->dispatch('noevent')); | ||||
|         $this->assertInstanceOf('Symfony\Component\EventDispatcher\Event', $this->dispatcher->dispatch(self::preFoo)); | ||||
|         $event = new Event(); | ||||
|         $return = $this->dispatcher->dispatch(self::preFoo, $event); | ||||
|         $this->assertEquals('pre.foo', $event->getName()); | ||||
|         $this->assertSame($event, $return); | ||||
|     } | ||||
|  | ||||
|     public function testDispatchForClosure() | ||||
|     { | ||||
|         $invoked = 0; | ||||
|         $listener = function () use (&$invoked) { | ||||
|             $invoked++; | ||||
|         }; | ||||
|         $this->dispatcher->addListener('pre.foo', $listener); | ||||
|         $this->dispatcher->addListener('post.foo', $listener); | ||||
|         $this->dispatcher->dispatch(self::preFoo); | ||||
|         $this->assertEquals(1, $invoked); | ||||
|     } | ||||
|  | ||||
|     public function testStopEventPropagation() | ||||
|     { | ||||
|         $otherListener = new TestEventListener(); | ||||
|  | ||||
|         // postFoo() stops the propagation, so only one listener should | ||||
|         // be executed | ||||
|         // Manually set priority to enforce $this->listener to be called first | ||||
|         $this->dispatcher->addListener('post.foo', array($this->listener, 'postFoo'), 10); | ||||
|         $this->dispatcher->addListener('post.foo', array($otherListener, 'preFoo')); | ||||
|         $this->dispatcher->dispatch(self::postFoo); | ||||
|         $this->assertTrue($this->listener->postFooInvoked); | ||||
|         $this->assertFalse($otherListener->postFooInvoked); | ||||
|     } | ||||
|  | ||||
|     public function testDispatchByPriority() | ||||
|     { | ||||
|         $invoked = array(); | ||||
|         $listener1 = function () use (&$invoked) { | ||||
|             $invoked[] = '1'; | ||||
|         }; | ||||
|         $listener2 = function () use (&$invoked) { | ||||
|             $invoked[] = '2'; | ||||
|         }; | ||||
|         $listener3 = function () use (&$invoked) { | ||||
|             $invoked[] = '3'; | ||||
|         }; | ||||
|         $this->dispatcher->addListener('pre.foo', $listener1, -10); | ||||
|         $this->dispatcher->addListener('pre.foo', $listener2); | ||||
|         $this->dispatcher->addListener('pre.foo', $listener3, 10); | ||||
|         $this->dispatcher->dispatch(self::preFoo); | ||||
|         $this->assertEquals(array('3', '2', '1'), $invoked); | ||||
|     } | ||||
|  | ||||
|     public function testRemoveListener() | ||||
|     { | ||||
|         $this->dispatcher->addListener('pre.bar', $this->listener); | ||||
|         $this->assertTrue($this->dispatcher->hasListeners(self::preBar)); | ||||
|         $this->dispatcher->removeListener('pre.bar', $this->listener); | ||||
|         $this->assertFalse($this->dispatcher->hasListeners(self::preBar)); | ||||
|         $this->dispatcher->removeListener('notExists', $this->listener); | ||||
|     } | ||||
|  | ||||
|     public function testAddSubscriber() | ||||
|     { | ||||
|         $eventSubscriber = new TestEventSubscriber(); | ||||
|         $this->dispatcher->addSubscriber($eventSubscriber); | ||||
|         $this->assertTrue($this->dispatcher->hasListeners(self::preFoo)); | ||||
|         $this->assertTrue($this->dispatcher->hasListeners(self::postFoo)); | ||||
|     } | ||||
|  | ||||
|     public function testAddSubscriberWithPriorities() | ||||
|     { | ||||
|         $eventSubscriber = new TestEventSubscriber(); | ||||
|         $this->dispatcher->addSubscriber($eventSubscriber); | ||||
|  | ||||
|         $eventSubscriber = new TestEventSubscriberWithPriorities(); | ||||
|         $this->dispatcher->addSubscriber($eventSubscriber); | ||||
|  | ||||
|         $listeners = $this->dispatcher->getListeners('pre.foo'); | ||||
|         $this->assertTrue($this->dispatcher->hasListeners(self::preFoo)); | ||||
|         $this->assertCount(2, $listeners); | ||||
|         $this->assertInstanceOf('Symfony\Component\EventDispatcher\Tests\TestEventSubscriberWithPriorities', $listeners[0][0]); | ||||
|     } | ||||
|  | ||||
|     public function testAddSubscriberWithMultipleListeners() | ||||
|     { | ||||
|         $eventSubscriber = new TestEventSubscriberWithMultipleListeners(); | ||||
|         $this->dispatcher->addSubscriber($eventSubscriber); | ||||
|  | ||||
|         $listeners = $this->dispatcher->getListeners('pre.foo'); | ||||
|         $this->assertTrue($this->dispatcher->hasListeners(self::preFoo)); | ||||
|         $this->assertCount(2, $listeners); | ||||
|         $this->assertEquals('preFoo2', $listeners[0][1]); | ||||
|     } | ||||
|  | ||||
|     public function testRemoveSubscriber() | ||||
|     { | ||||
|         $eventSubscriber = new TestEventSubscriber(); | ||||
|         $this->dispatcher->addSubscriber($eventSubscriber); | ||||
|         $this->assertTrue($this->dispatcher->hasListeners(self::preFoo)); | ||||
|         $this->assertTrue($this->dispatcher->hasListeners(self::postFoo)); | ||||
|         $this->dispatcher->removeSubscriber($eventSubscriber); | ||||
|         $this->assertFalse($this->dispatcher->hasListeners(self::preFoo)); | ||||
|         $this->assertFalse($this->dispatcher->hasListeners(self::postFoo)); | ||||
|     } | ||||
|  | ||||
|     public function testRemoveSubscriberWithPriorities() | ||||
|     { | ||||
|         $eventSubscriber = new TestEventSubscriberWithPriorities(); | ||||
|         $this->dispatcher->addSubscriber($eventSubscriber); | ||||
|         $this->assertTrue($this->dispatcher->hasListeners(self::preFoo)); | ||||
|         $this->dispatcher->removeSubscriber($eventSubscriber); | ||||
|         $this->assertFalse($this->dispatcher->hasListeners(self::preFoo)); | ||||
|     } | ||||
|  | ||||
|     public function testRemoveSubscriberWithMultipleListeners() | ||||
|     { | ||||
|         $eventSubscriber = new TestEventSubscriberWithMultipleListeners(); | ||||
|         $this->dispatcher->addSubscriber($eventSubscriber); | ||||
|         $this->assertTrue($this->dispatcher->hasListeners(self::preFoo)); | ||||
|         $this->assertCount(2, $this->dispatcher->getListeners(self::preFoo)); | ||||
|         $this->dispatcher->removeSubscriber($eventSubscriber); | ||||
|         $this->assertFalse($this->dispatcher->hasListeners(self::preFoo)); | ||||
|     } | ||||
|  | ||||
|     public function testEventReceivesTheDispatcherInstance() | ||||
|     { | ||||
|         $dispatcher = null; | ||||
|         $this->dispatcher->addListener('test', function ($event) use (&$dispatcher) { | ||||
|             $dispatcher = $event->getDispatcher(); | ||||
|         }); | ||||
|         $this->dispatcher->dispatch('test'); | ||||
|         $this->assertSame($this->dispatcher, $dispatcher); | ||||
|     } | ||||
|  | ||||
|     public function testEventReceivesTheDispatcherInstanceAsArgument() | ||||
|     { | ||||
|         $listener = new TestWithDispatcher(); | ||||
|         $this->dispatcher->addListener('test', array($listener, 'foo')); | ||||
|         $this->assertNull($listener->name); | ||||
|         $this->assertNull($listener->dispatcher); | ||||
|         $this->dispatcher->dispatch('test'); | ||||
|         $this->assertEquals('test', $listener->name); | ||||
|         $this->assertSame($this->dispatcher, $listener->dispatcher); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @see https://bugs.php.net/bug.php?id=62976 | ||||
|      * | ||||
|      * This bug affects: | ||||
|      *  - The PHP 5.3 branch for versions < 5.3.18 | ||||
|      *  - The PHP 5.4 branch for versions < 5.4.8 | ||||
|      *  - The PHP 5.5 branch is not affected | ||||
|      */ | ||||
|     public function testWorkaroundForPhpBug62976() | ||||
|     { | ||||
|         $dispatcher = new EventDispatcher(); | ||||
|         $dispatcher->addListener('bug.62976', new CallableClass()); | ||||
|         $dispatcher->removeListener('bug.62976', function () {}); | ||||
|         $this->assertTrue($dispatcher->hasListeners('bug.62976')); | ||||
|     } | ||||
| } | ||||
|  | ||||
| class CallableClass | ||||
| { | ||||
|     public function __invoke() | ||||
|     { | ||||
|     } | ||||
| } | ||||
|  | ||||
| class TestEventListener | ||||
| { | ||||
|     public $preFooInvoked = false; | ||||
|     public $postFooInvoked = false; | ||||
|  | ||||
|     /* Listener methods */ | ||||
|  | ||||
|     public function preFoo(Event $e) | ||||
|     { | ||||
|         $this->preFooInvoked = true; | ||||
|     } | ||||
|  | ||||
|     public function postFoo(Event $e) | ||||
|     { | ||||
|         $this->postFooInvoked = true; | ||||
|  | ||||
|         $e->stopPropagation(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| class TestWithDispatcher | ||||
| { | ||||
|     public $name; | ||||
|     public $dispatcher; | ||||
|  | ||||
|     public function foo(Event $e, $name, $dispatcher) | ||||
|     { | ||||
|         $this->name = $name; | ||||
|         $this->dispatcher = $dispatcher; | ||||
|     } | ||||
| } | ||||
|  | ||||
| class TestEventSubscriber implements EventSubscriberInterface | ||||
| { | ||||
|     public static function getSubscribedEvents() | ||||
|     { | ||||
|         return array('pre.foo' => 'preFoo', 'post.foo' => 'postFoo'); | ||||
|     } | ||||
| } | ||||
|  | ||||
| class TestEventSubscriberWithPriorities implements EventSubscriberInterface | ||||
| { | ||||
|     public static function getSubscribedEvents() | ||||
|     { | ||||
|         return array( | ||||
|             'pre.foo' => array('preFoo', 10), | ||||
|             'post.foo' => array('postFoo'), | ||||
|             ); | ||||
|     } | ||||
| } | ||||
|  | ||||
| class TestEventSubscriberWithMultipleListeners implements EventSubscriberInterface | ||||
| { | ||||
|     public static function getSubscribedEvents() | ||||
|     { | ||||
|         return array('pre.foo' => array( | ||||
|             array('preFoo1'), | ||||
|             array('preFoo2', 10) | ||||
|         )); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,84 @@ | ||||
| <?php | ||||
|  | ||||
| /* | ||||
|  * This file is part of the Symfony package. | ||||
|  * | ||||
|  * (c) Fabien Potencier <fabien@symfony.com> | ||||
|  * | ||||
|  * For the full copyright and license information, please view the LICENSE | ||||
|  * file that was distributed with this source code. | ||||
|  */ | ||||
|  | ||||
| namespace Symfony\Component\EventDispatcher\Tests; | ||||
|  | ||||
| use Symfony\Component\EventDispatcher\Event; | ||||
| use Symfony\Component\EventDispatcher\EventDispatcher; | ||||
|  | ||||
| /** | ||||
|  * Test class for Event. | ||||
|  */ | ||||
| class EventTest extends \PHPUnit_Framework_TestCase | ||||
| { | ||||
|     /** | ||||
|      * @var \Symfony\Component\EventDispatcher\Event | ||||
|      */ | ||||
|     protected $event; | ||||
|  | ||||
|     /** | ||||
|      * @var \Symfony\Component\EventDispatcher\EventDispatcher | ||||
|      */ | ||||
|     protected $dispatcher; | ||||
|  | ||||
|     /** | ||||
|      * Sets up the fixture, for example, opens a network connection. | ||||
|      * This method is called before a test is executed. | ||||
|      */ | ||||
|     protected function setUp() | ||||
|     { | ||||
|         $this->event = new Event(); | ||||
|         $this->dispatcher = new EventDispatcher(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Tears down the fixture, for example, closes a network connection. | ||||
|      * This method is called after a test is executed. | ||||
|      */ | ||||
|     protected function tearDown() | ||||
|     { | ||||
|         $this->event = null; | ||||
|         $this->dispatcher = null; | ||||
|     } | ||||
|  | ||||
|     public function testIsPropagationStopped() | ||||
|     { | ||||
|         $this->assertFalse($this->event->isPropagationStopped()); | ||||
|     } | ||||
|  | ||||
|     public function testStopPropagationAndIsPropagationStopped() | ||||
|     { | ||||
|         $this->event->stopPropagation(); | ||||
|         $this->assertTrue($this->event->isPropagationStopped()); | ||||
|     } | ||||
|  | ||||
|     public function testSetDispatcher() | ||||
|     { | ||||
|         $this->event->setDispatcher($this->dispatcher); | ||||
|         $this->assertSame($this->dispatcher, $this->event->getDispatcher()); | ||||
|     } | ||||
|  | ||||
|     public function testGetDispatcher() | ||||
|     { | ||||
|         $this->assertNull($this->event->getDispatcher()); | ||||
|     } | ||||
|  | ||||
|     public function testGetName() | ||||
|     { | ||||
|         $this->assertNull($this->event->getName()); | ||||
|     } | ||||
|  | ||||
|     public function testSetName() | ||||
|     { | ||||
|         $this->event->setName('foo'); | ||||
|         $this->assertEquals('foo', $this->event->getName()); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,140 @@ | ||||
| <?php | ||||
|  | ||||
| /* | ||||
|  * This file is part of the Symfony package. | ||||
|  * | ||||
|  * (c) Fabien Potencier <fabien@symfony.com> | ||||
|  * | ||||
|  * For the full copyright and license information, please view the LICENSE | ||||
|  * file that was distributed with this source code. | ||||
|  */ | ||||
|  | ||||
| namespace Symfony\Component\EventDispatcher\Tests; | ||||
|  | ||||
| use Symfony\Component\EventDispatcher\GenericEvent; | ||||
|  | ||||
| /** | ||||
|  * Test class for Event. | ||||
|  */ | ||||
| class GenericEventTest extends \PHPUnit_Framework_TestCase | ||||
| { | ||||
|  | ||||
|     /** | ||||
|      * @var GenericEvent | ||||
|      */ | ||||
|     private $event; | ||||
|  | ||||
|     private $subject; | ||||
|  | ||||
|     /** | ||||
|      * Prepares the environment before running a test. | ||||
|      */ | ||||
|     protected function setUp() | ||||
|     { | ||||
|         parent::setUp(); | ||||
|  | ||||
|         $this->subject = new \stdClass(); | ||||
|         $this->event = new GenericEvent($this->subject, array('name' => 'Event'), 'foo'); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Cleans up the environment after running a test. | ||||
|      */ | ||||
|     protected function tearDown() | ||||
|     { | ||||
|         $this->subject = null; | ||||
|         $this->event = null; | ||||
|  | ||||
|         parent::tearDown(); | ||||
|     } | ||||
|  | ||||
|     public function testConstruct() | ||||
|     { | ||||
|         $this->assertEquals($this->event, new GenericEvent($this->subject, array('name' => 'Event'))); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Tests Event->getArgs() | ||||
|      */ | ||||
|     public function testGetArguments() | ||||
|     { | ||||
|         // test getting all | ||||
|         $this->assertSame(array('name' => 'Event'), $this->event->getArguments()); | ||||
|     } | ||||
|  | ||||
|     public function testSetArguments() | ||||
|     { | ||||
|         $result = $this->event->setArguments(array('foo' => 'bar')); | ||||
|         $this->assertAttributeSame(array('foo' => 'bar'), 'arguments', $this->event); | ||||
|         $this->assertSame($this->event, $result); | ||||
|     } | ||||
|  | ||||
|     public function testSetArgument() | ||||
|     { | ||||
|         $result = $this->event->setArgument('foo2', 'bar2'); | ||||
|         $this->assertAttributeSame(array('name' => 'Event', 'foo2' => 'bar2'), 'arguments', $this->event); | ||||
|         $this->assertEquals($this->event, $result); | ||||
|     } | ||||
|  | ||||
|     public function testGetArgument() | ||||
|     { | ||||
|         // test getting key | ||||
|         $this->assertEquals('Event', $this->event->getArgument('name')); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @expectedException \InvalidArgumentException | ||||
|      */ | ||||
|     public function testGetArgException() | ||||
|     { | ||||
|         $this->event->getArgument('nameNotExist'); | ||||
|     } | ||||
|  | ||||
|     public function testOffsetGet() | ||||
|     { | ||||
|         // test getting key | ||||
|         $this->assertEquals('Event', $this->event['name']); | ||||
|  | ||||
|         // test getting invalid arg | ||||
|         $this->setExpectedException('InvalidArgumentException'); | ||||
|         $this->assertFalse($this->event['nameNotExist']); | ||||
|     } | ||||
|  | ||||
|     public function testOffsetSet() | ||||
|     { | ||||
|         $this->event['foo2'] = 'bar2'; | ||||
|         $this->assertAttributeSame(array('name' => 'Event', 'foo2' => 'bar2'), 'arguments', $this->event); | ||||
|     } | ||||
|  | ||||
|     public function testOffsetUnset() | ||||
|     { | ||||
|         unset($this->event['name']); | ||||
|         $this->assertAttributeSame(array(), 'arguments', $this->event); | ||||
|     } | ||||
|  | ||||
|     public function testOffsetIsset() | ||||
|     { | ||||
|         $this->assertTrue(isset($this->event['name'])); | ||||
|         $this->assertFalse(isset($this->event['nameNotExist'])); | ||||
|     } | ||||
|  | ||||
|     public function testHasArgument() | ||||
|     { | ||||
|         $this->assertTrue($this->event->hasArgument('name')); | ||||
|         $this->assertFalse($this->event->hasArgument('nameNotExist')); | ||||
|     } | ||||
|  | ||||
|     public function testGetSubject() | ||||
|     { | ||||
|         $this->assertSame($this->subject, $this->event->getSubject()); | ||||
|     } | ||||
|  | ||||
|     public function testHasIterator() | ||||
|     { | ||||
|         $data = array(); | ||||
|         foreach ($this->event as $key => $value) { | ||||
|             $data[$key] = $value; | ||||
|         } | ||||
|         $this->assertEquals(array('name' => 'Event'), $data); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,105 @@ | ||||
| <?php | ||||
|  | ||||
| /* | ||||
|  * This file is part of the Symfony package. | ||||
|  * | ||||
|  * (c) Fabien Potencier <fabien@symfony.com> | ||||
|  * | ||||
|  * For the full copyright and license information, please view the LICENSE | ||||
|  * file that was distributed with this source code. | ||||
|  */ | ||||
|  | ||||
| namespace Symfony\Component\EventDispatcher\Tests; | ||||
|  | ||||
| use Symfony\Component\EventDispatcher\Event; | ||||
| use Symfony\Component\EventDispatcher\ImmutableEventDispatcher; | ||||
|  | ||||
| /** | ||||
|  * @author Bernhard Schussek <bschussek@gmail.com> | ||||
|  */ | ||||
| class ImmutableEventDispatcherTest extends \PHPUnit_Framework_TestCase | ||||
| { | ||||
|     /** | ||||
|      * @var \PHPUnit_Framework_MockObject_MockObject | ||||
|      */ | ||||
|     private $innerDispatcher; | ||||
|  | ||||
|     /** | ||||
|      * @var ImmutableEventDispatcher | ||||
|      */ | ||||
|     private $dispatcher; | ||||
|  | ||||
|     protected function setUp() | ||||
|     { | ||||
|         $this->innerDispatcher = $this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface'); | ||||
|         $this->dispatcher = new ImmutableEventDispatcher($this->innerDispatcher); | ||||
|     } | ||||
|  | ||||
|     public function testDispatchDelegates() | ||||
|     { | ||||
|         $event = new Event(); | ||||
|  | ||||
|         $this->innerDispatcher->expects($this->once()) | ||||
|             ->method('dispatch') | ||||
|             ->with('event', $event) | ||||
|             ->will($this->returnValue('result')); | ||||
|  | ||||
|         $this->assertSame('result', $this->dispatcher->dispatch('event', $event)); | ||||
|     } | ||||
|  | ||||
|     public function testGetListenersDelegates() | ||||
|     { | ||||
|         $this->innerDispatcher->expects($this->once()) | ||||
|             ->method('getListeners') | ||||
|             ->with('event') | ||||
|             ->will($this->returnValue('result')); | ||||
|  | ||||
|         $this->assertSame('result', $this->dispatcher->getListeners('event')); | ||||
|     } | ||||
|  | ||||
|     public function testHasListenersDelegates() | ||||
|     { | ||||
|         $this->innerDispatcher->expects($this->once()) | ||||
|             ->method('hasListeners') | ||||
|             ->with('event') | ||||
|             ->will($this->returnValue('result')); | ||||
|  | ||||
|         $this->assertSame('result', $this->dispatcher->hasListeners('event')); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @expectedException \BadMethodCallException | ||||
|      */ | ||||
|     public function testAddListenerDisallowed() | ||||
|     { | ||||
|         $this->dispatcher->addListener('event', function () { return 'foo'; }); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @expectedException \BadMethodCallException | ||||
|      */ | ||||
|     public function testAddSubscriberDisallowed() | ||||
|     { | ||||
|         $subscriber = $this->getMock('Symfony\Component\EventDispatcher\EventSubscriberInterface'); | ||||
|  | ||||
|         $this->dispatcher->addSubscriber($subscriber); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @expectedException \BadMethodCallException | ||||
|      */ | ||||
|     public function testRemoveListenerDisallowed() | ||||
|     { | ||||
|         $this->dispatcher->removeListener('event', function () { return 'foo'; }); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @expectedException \BadMethodCallException | ||||
|      */ | ||||
|     public function testRemoveSubscriberDisallowed() | ||||
|     { | ||||
|         $subscriber = $this->getMock('Symfony\Component\EventDispatcher\EventSubscriberInterface'); | ||||
|  | ||||
|         $this->dispatcher->removeSubscriber($subscriber); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user