14 use PHPUnit\Framework\TestCase;
19 abstract class AbstractEventDispatcherTest
extends TestCase
34 protected function setUp()
42 $this->dispatcher =
null;
43 $this->listener =
null;
50 $this->assertEquals(array(), $this->dispatcher->getListeners());
51 $this->assertFalse($this->dispatcher->hasListeners(self::preFoo));
52 $this->assertFalse($this->dispatcher->hasListeners(self::postFoo));
57 $this->dispatcher->addListener(
'pre.foo', array($this->listener,
'preFoo'));
58 $this->dispatcher->addListener(
'post.foo', array($this->listener,
'postFoo'));
59 $this->assertTrue($this->dispatcher->hasListeners());
60 $this->assertTrue($this->dispatcher->hasListeners(self::preFoo));
61 $this->assertTrue($this->dispatcher->hasListeners(self::postFoo));
62 $this->assertCount(1, $this->dispatcher->getListeners(self::preFoo));
63 $this->assertCount(1, $this->dispatcher->getListeners(self::postFoo));
64 $this->assertCount(2, $this->dispatcher->getListeners());
72 $listener1->name =
'1';
73 $listener2->name =
'2';
74 $listener3->name =
'3';
76 $this->dispatcher->addListener(
'pre.foo', array($listener1,
'preFoo'), -10);
77 $this->dispatcher->addListener(
'pre.foo', array($listener2,
'preFoo'), 10);
78 $this->dispatcher->addListener(
'pre.foo', array($listener3,
'preFoo'));
81 array($listener2,
'preFoo'),
82 array($listener3,
'preFoo'),
83 array($listener1,
'preFoo'),
86 $this->assertSame($expected, $this->dispatcher->getListeners(
'pre.foo'));
98 $this->dispatcher->addListener(
'pre.foo', $listener1, -10);
99 $this->dispatcher->addListener(
'pre.foo', $listener2);
100 $this->dispatcher->addListener(
'pre.foo', $listener3, 10);
101 $this->dispatcher->addListener(
'post.foo', $listener4, -10);
102 $this->dispatcher->addListener(
'post.foo', $listener5);
103 $this->dispatcher->addListener(
'post.foo', $listener6, 10);
106 'pre.foo' => array($listener3, $listener2, $listener1),
107 'post.foo' => array($listener6, $listener5, $listener4),
110 $this->assertSame($expected, $this->dispatcher->getListeners());
118 $this->dispatcher->addListener(
'pre.foo', $listener1, -10);
119 $this->dispatcher->addListener(
'pre.foo', $listener2);
121 $this->assertSame(-10, $this->dispatcher->getListenerPriority(
'pre.foo', $listener1));
122 $this->assertSame(0, $this->dispatcher->getListenerPriority(
'pre.foo', $listener2));
123 $this->assertNull($this->dispatcher->getListenerPriority(
'pre.bar', $listener2));
124 $this->assertNull($this->dispatcher->getListenerPriority(
'pre.foo', function () {}));
129 $this->dispatcher->addListener(
'pre.foo', array($this->listener,
'preFoo'));
130 $this->dispatcher->addListener(
'post.foo', array($this->listener,
'postFoo'));
131 $this->dispatcher->dispatch(self::preFoo);
132 $this->assertTrue($this->listener->preFooInvoked);
133 $this->assertFalse($this->listener->postFooInvoked);
134 $this->assertInstanceOf(
'Symfony\Component\EventDispatcher\Event', $this->dispatcher->dispatch(
'noevent'));
135 $this->assertInstanceOf(
'Symfony\Component\EventDispatcher\Event', $this->dispatcher->dispatch(self::preFoo));
136 $event =
new Event();
137 $return = $this->dispatcher->dispatch(self::preFoo, $event);
138 $this->assertSame($event, $return);
146 $event =
new Event();
147 $this->dispatcher->dispatch(self::preFoo, $event);
148 $this->assertEquals(
'pre.foo', $event->getName());
154 $listener =
function () use (&$invoked) {
157 $this->dispatcher->addListener(
'pre.foo', $listener);
158 $this->dispatcher->addListener(
'post.foo', $listener);
159 $this->dispatcher->dispatch(self::preFoo);
160 $this->assertEquals(1, $invoked);
165 $otherListener =
new TestEventListener();
170 $this->dispatcher->addListener(
'post.foo', array($this->listener,
'postFoo'), 10);
171 $this->dispatcher->addListener(
'post.foo', array($otherListener,
'postFoo'));
172 $this->dispatcher->dispatch(self::postFoo);
173 $this->assertTrue($this->listener->postFooInvoked);
174 $this->assertFalse($otherListener->postFooInvoked);
180 $listener1 =
function () use (&$invoked) {
183 $listener2 =
function () use (&$invoked) {
186 $listener3 =
function () use (&$invoked) {
189 $this->dispatcher->addListener(
'pre.foo', $listener1, -10);
190 $this->dispatcher->addListener(
'pre.foo', $listener2);
191 $this->dispatcher->addListener(
'pre.foo', $listener3, 10);
192 $this->dispatcher->dispatch(self::preFoo);
193 $this->assertEquals(array(
'3',
'2',
'1'), $invoked);
198 $this->dispatcher->addListener(
'pre.bar', $this->listener);
199 $this->assertTrue($this->dispatcher->hasListeners(self::preBar));
200 $this->dispatcher->removeListener(
'pre.bar', $this->listener);
201 $this->assertFalse($this->dispatcher->hasListeners(self::preBar));
202 $this->dispatcher->removeListener(
'notExists', $this->listener);
208 $this->dispatcher->addSubscriber($eventSubscriber);
209 $this->assertTrue($this->dispatcher->hasListeners(self::preFoo));
210 $this->assertTrue($this->dispatcher->hasListeners(self::postFoo));
216 $this->dispatcher->addSubscriber($eventSubscriber);
219 $this->dispatcher->addSubscriber($eventSubscriber);
221 $listeners = $this->dispatcher->getListeners(
'pre.foo');
222 $this->assertTrue($this->dispatcher->hasListeners(self::preFoo));
223 $this->assertCount(2, $listeners);
224 $this->assertInstanceOf(
'Symfony\Component\EventDispatcher\Tests\TestEventSubscriberWithPriorities', $listeners[0][0]);
230 $this->dispatcher->addSubscriber($eventSubscriber);
232 $listeners = $this->dispatcher->getListeners(
'pre.foo');
233 $this->assertTrue($this->dispatcher->hasListeners(self::preFoo));
234 $this->assertCount(2, $listeners);
235 $this->assertEquals(
'preFoo2', $listeners[0][1]);
241 $this->dispatcher->addSubscriber($eventSubscriber);
242 $this->assertTrue($this->dispatcher->hasListeners(self::preFoo));
243 $this->assertTrue($this->dispatcher->hasListeners(self::postFoo));
244 $this->dispatcher->removeSubscriber($eventSubscriber);
245 $this->assertFalse($this->dispatcher->hasListeners(self::preFoo));
246 $this->assertFalse($this->dispatcher->hasListeners(self::postFoo));
252 $this->dispatcher->addSubscriber($eventSubscriber);
253 $this->assertTrue($this->dispatcher->hasListeners(self::preFoo));
254 $this->dispatcher->removeSubscriber($eventSubscriber);
255 $this->assertFalse($this->dispatcher->hasListeners(self::preFoo));
261 $this->dispatcher->addSubscriber($eventSubscriber);
262 $this->assertTrue($this->dispatcher->hasListeners(self::preFoo));
263 $this->assertCount(2, $this->dispatcher->getListeners(self::preFoo));
264 $this->dispatcher->removeSubscriber($eventSubscriber);
265 $this->assertFalse($this->dispatcher->hasListeners(self::preFoo));
274 $this->dispatcher->addListener(
'test',
function ($event) use (&$dispatcher) {
275 $dispatcher = $event->getDispatcher();
277 $this->dispatcher->dispatch(
'test');
278 $this->assertSame($this->dispatcher, $dispatcher);
283 $listener =
new TestWithDispatcher();
284 $this->dispatcher->addListener(
'test', array($listener,
'foo'));
285 $this->assertNull($listener->name);
286 $this->assertNull($listener->dispatcher);
287 $this->dispatcher->dispatch(
'test');
288 $this->assertEquals(
'test', $listener->name);
289 $this->assertSame($this->dispatcher, $listener->dispatcher);
304 $dispatcher->removeListener(
'bug.62976',
function () {});
305 $this->assertTrue($dispatcher->hasListeners(
'bug.62976'));
310 $listener =
function () {};
311 $this->dispatcher->addListener(
'foo', $listener);
312 $this->dispatcher->removeListener(
'foo', $listener);
313 $this->assertFalse($this->dispatcher->hasListeners());
318 $listener =
function () {};
319 $this->dispatcher->addListener(
'foo', $listener);
320 $this->dispatcher->removeListener(
'foo', $listener);
321 $this->assertSame(array(), $this->dispatcher->getListeners());
326 $this->assertFalse($this->dispatcher->hasListeners(
'foo'));
327 $this->assertFalse($this->dispatcher->hasListeners());
347 $this->preFooInvoked =
true;
352 $this->postFooInvoked =
true;
358 class TestWithDispatcher
374 return array(
'pre.foo' =>
'preFoo',
'post.foo' =>
'postFoo');
383 'pre.foo' => array(
'preFoo', 10),
384 'post.foo' => array(
'postFoo'),
393 return array(
'pre.foo' => array(
395 array(
'preFoo2', 10),