14 use PHPUnit\Framework\TestCase;
21 use Symfony\Component\Stopwatch\Stopwatch;
30 $tdispatcher->addListener(
'foo', $listener =
function () {});
31 $listeners = $dispatcher->getListeners(
'foo');
32 $this->assertCount(1, $listeners);
33 $this->assertSame($listener, $listeners[0]);
35 $tdispatcher->removeListener(
'foo', $listener);
36 $this->assertCount(0, $dispatcher->getListeners(
'foo'));
44 $tdispatcher->addListener(
'foo', $listener =
function () {});
45 $this->assertSame($dispatcher->getListeners(
'foo'), $tdispatcher->getListeners(
'foo'));
53 $this->assertFalse($dispatcher->hasListeners(
'foo'));
54 $this->assertFalse($tdispatcher->hasListeners(
'foo'));
56 $tdispatcher->addListener(
'foo', $listener =
function () {});
57 $this->assertTrue($dispatcher->hasListeners(
'foo'));
58 $this->assertTrue($tdispatcher->hasListeners(
'foo'));
66 $tdispatcher->addListener(
'foo',
function () {}, 123);
68 $listeners = $dispatcher->getListeners(
'foo');
69 $this->assertSame(123, $tdispatcher->getListenerPriority(
'foo', $listeners[0]));
73 $tdispatcher->dispatch(
'foo',
new Event());
74 $listeners = $dispatcher->getListeners(
'foo');
75 $this->assertSame(123, $tdispatcher->getListenerPriority(
'foo', $listeners[0]));
80 $dispatcher = $this->getMockBuilder(
'Symfony\Component\EventDispatcher\EventDispatcherInterface')->getMock();
82 $traceableEventDispatcher->addListener(
'foo',
function () {}, 123);
83 $listeners = $traceableEventDispatcher->getListeners(
'foo');
85 $this->assertSame(0, $traceableEventDispatcher->getListenerPriority(
'foo', $listeners[0]));
95 $tdispatcher->addSubscriber($subscriber);
96 $listeners = $dispatcher->getListeners(
'foo');
97 $this->assertCount(1, $listeners);
98 $this->assertSame(array($subscriber,
'call'), $listeners[0]);
100 $tdispatcher->removeSubscriber($subscriber);
101 $this->assertCount(0, $dispatcher->getListeners(
'foo'));
112 $stopWatch =
new Stopwatch();
115 $listener =
function () {};
117 $listener =
new WrappedListener($listener,
'foo', $stopWatch, $dispatcher);
120 $tdispatcher->addListener(
'foo', $listener, 5);
122 $this->assertEquals(array(), $tdispatcher->getCalledListeners());
123 $this->assertEquals(array(
'foo.closure' => array(
'event' =>
'foo',
'type' =>
'Closure',
'pretty' =>
'closure',
'priority' => 5)), $tdispatcher->getNotCalledListeners());
125 $tdispatcher->dispatch(
'foo');
127 $this->assertEquals(array(
'foo.closure' => array(
'event' =>
'foo',
'type' =>
'Closure',
'pretty' =>
'closure',
'priority' => 5)), $tdispatcher->getCalledListeners());
128 $this->assertEquals(array(), $tdispatcher->getNotCalledListeners());
143 $dispatcher->addListener(
'foo',
function (
Event $event, $eventName, $dispatcher) use (&$tdispatcher) {
144 $tdispatcher = $dispatcher;
145 $dispatcher->dispatch(
'bar');
147 $dispatcher->addListener(
'bar',
function (
Event $event) {});
148 $dispatcher->dispatch(
'foo');
149 $this->assertSame($dispatcher, $tdispatcher);
150 $this->assertCount(2, $dispatcher->getCalledListeners());
155 $logger = $this->getMockBuilder(
'Psr\Log\LoggerInterface')->getMock();
159 $tdispatcher->addListener(
'foo', $listener1 =
function () {});
160 $tdispatcher->addListener(
'foo', $listener2 =
function () {});
162 $logger->expects($this->at(0))->method(
'debug')->with(
'Notified event "foo" to listener "closure".');
163 $logger->expects($this->at(1))->method(
'debug')->with(
'Notified event "foo" to listener "closure".');
165 $tdispatcher->dispatch(
'foo');
170 $logger = $this->getMockBuilder(
'Psr\Log\LoggerInterface')->getMock();
174 $tdispatcher->addListener(
'foo', $listener1 =
function (
Event $event) { $event->
stopPropagation(); });
175 $tdispatcher->addListener(
'foo', $listener2 =
function () {});
177 $logger->expects($this->at(0))->method(
'debug')->with(
'Notified event "foo" to listener "closure".');
178 $logger->expects($this->at(1))->method(
'debug')->with(
'Listener "closure" stopped propagation of the event "foo".');
179 $logger->expects($this->at(2))->method(
'debug')->with(
'Listener "closure" was not called for event "foo".');
181 $tdispatcher->dispatch(
'foo');
190 $tdispatcher->addListener(
'foo',
function () use (&$called) { $called[] =
'foo1'; }, 10);
191 $tdispatcher->addListener(
'foo',
function () use (&$called) { $called[] =
'foo2'; }, 20);
193 $tdispatcher->dispatch(
'foo');
195 $this->assertSame(array(
'foo2',
'foo1'), $called);
202 $dispatchedEvents = 0;
203 $dispatcher->addListener(
'foo', $listener1 =
function () use ($dispatcher, &$loop) {
206 $dispatcher->dispatch(
'foo');
209 $dispatcher->addListener(
'foo',
function () use (&$dispatchedEvents) {
213 $dispatcher->dispatch(
'foo');
215 $this->assertSame(2, $dispatchedEvents);
222 $dispatcher->addListener(
'foo',
function (
Event $e) use ($dispatcher) {
223 $dispatcher->dispatch(
'bar', $e);
225 $dispatcher->addListener(
'bar',
function (
Event $e) use (&$nestedCall) {
229 $this->assertFalse($nestedCall);
230 $dispatcher->dispatch(
'foo');
231 $this->assertTrue($nestedCall);
238 $dispatcher->removeListener(
'foo', $listener1);
240 $eventDispatcher->addListener(
'foo', $listener1);
241 $eventDispatcher->addListener(
'foo',
function () {});
242 $eventDispatcher->dispatch(
'foo');
244 $this->assertCount(1, $eventDispatcher->getListeners(
'foo'),
'expected listener1 to be removed');
252 return array(
'foo' =>
'call');