2a0da9ca67c3a8c1fd02364e3ea7cfbf06f13dd5
[yaffs-website] / vendor / symfony / event-dispatcher / Tests / ContainerAwareEventDispatcherTest.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\EventDispatcher\Tests;
13
14 use Symfony\Component\DependencyInjection\Container;
15 use Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher;
16 use Symfony\Component\EventDispatcher\Event;
17 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
18
19 class ContainerAwareEventDispatcherTest extends AbstractEventDispatcherTest
20 {
21     protected function createEventDispatcher()
22     {
23         $container = new Container();
24
25         return new ContainerAwareEventDispatcher($container);
26     }
27
28     public function testAddAListenerService()
29     {
30         $event = new Event();
31
32         $service = $this->getMockBuilder('Symfony\Component\EventDispatcher\Tests\Service')->getMock();
33
34         $service
35             ->expects($this->once())
36             ->method('onEvent')
37             ->with($event)
38         ;
39
40         $container = new Container();
41         $container->set('service.listener', $service);
42
43         $dispatcher = new ContainerAwareEventDispatcher($container);
44         $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent'));
45
46         $dispatcher->dispatch('onEvent', $event);
47     }
48
49     public function testAddASubscriberService()
50     {
51         $event = new Event();
52
53         $service = $this->getMockBuilder('Symfony\Component\EventDispatcher\Tests\SubscriberService')->getMock();
54
55         $service
56             ->expects($this->once())
57             ->method('onEvent')
58             ->with($event)
59         ;
60
61         $service
62             ->expects($this->once())
63             ->method('onEventWithPriority')
64             ->with($event)
65         ;
66
67         $service
68             ->expects($this->once())
69             ->method('onEventNested')
70             ->with($event)
71         ;
72
73         $container = new Container();
74         $container->set('service.subscriber', $service);
75
76         $dispatcher = new ContainerAwareEventDispatcher($container);
77         $dispatcher->addSubscriberService('service.subscriber', 'Symfony\Component\EventDispatcher\Tests\SubscriberService');
78
79         $dispatcher->dispatch('onEvent', $event);
80         $dispatcher->dispatch('onEventWithPriority', $event);
81         $dispatcher->dispatch('onEventNested', $event);
82     }
83
84     public function testPreventDuplicateListenerService()
85     {
86         $event = new Event();
87
88         $service = $this->getMockBuilder('Symfony\Component\EventDispatcher\Tests\Service')->getMock();
89
90         $service
91             ->expects($this->once())
92             ->method('onEvent')
93             ->with($event)
94         ;
95
96         $container = new Container();
97         $container->set('service.listener', $service);
98
99         $dispatcher = new ContainerAwareEventDispatcher($container);
100         $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent'), 5);
101         $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent'), 10);
102
103         $dispatcher->dispatch('onEvent', $event);
104     }
105
106     public function testHasListenersOnLazyLoad()
107     {
108         $event = new Event();
109
110         $service = $this->getMockBuilder('Symfony\Component\EventDispatcher\Tests\Service')->getMock();
111
112         $container = new Container();
113         $container->set('service.listener', $service);
114
115         $dispatcher = new ContainerAwareEventDispatcher($container);
116         $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent'));
117
118         $service
119             ->expects($this->once())
120             ->method('onEvent')
121             ->with($event)
122         ;
123
124         $this->assertTrue($dispatcher->hasListeners());
125
126         if ($dispatcher->hasListeners('onEvent')) {
127             $dispatcher->dispatch('onEvent');
128         }
129     }
130
131     public function testGetListenersOnLazyLoad()
132     {
133         $service = $this->getMockBuilder('Symfony\Component\EventDispatcher\Tests\Service')->getMock();
134
135         $container = new Container();
136         $container->set('service.listener', $service);
137
138         $dispatcher = new ContainerAwareEventDispatcher($container);
139         $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent'));
140
141         $listeners = $dispatcher->getListeners();
142
143         $this->assertTrue(isset($listeners['onEvent']));
144
145         $this->assertCount(1, $dispatcher->getListeners('onEvent'));
146     }
147
148     public function testRemoveAfterDispatch()
149     {
150         $service = $this->getMockBuilder('Symfony\Component\EventDispatcher\Tests\Service')->getMock();
151
152         $container = new Container();
153         $container->set('service.listener', $service);
154
155         $dispatcher = new ContainerAwareEventDispatcher($container);
156         $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent'));
157
158         $dispatcher->dispatch('onEvent', new Event());
159         $dispatcher->removeListener('onEvent', array($container->get('service.listener'), 'onEvent'));
160         $this->assertFalse($dispatcher->hasListeners('onEvent'));
161     }
162
163     public function testRemoveBeforeDispatch()
164     {
165         $service = $this->getMockBuilder('Symfony\Component\EventDispatcher\Tests\Service')->getMock();
166
167         $container = new Container();
168         $container->set('service.listener', $service);
169
170         $dispatcher = new ContainerAwareEventDispatcher($container);
171         $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent'));
172
173         $dispatcher->removeListener('onEvent', array($container->get('service.listener'), 'onEvent'));
174         $this->assertFalse($dispatcher->hasListeners('onEvent'));
175     }
176 }
177
178 class Service
179 {
180     public function onEvent(Event $e)
181     {
182     }
183 }
184
185 class SubscriberService implements EventSubscriberInterface
186 {
187     public static function getSubscribedEvents()
188     {
189         return array(
190             'onEvent' => 'onEvent',
191             'onEventWithPriority' => array('onEventWithPriority', 10),
192             'onEventNested' => array(array('onEventNested')),
193         );
194     }
195
196     public function onEvent(Event $e)
197     {
198     }
199
200     public function onEventWithPriority(Event $e)
201     {
202     }
203
204     public function onEventNested(Event $e)
205     {
206     }
207 }