You are here

class TraceableEventDispatcherTest in Zircon Profile 8

Same name in this branch
  1. 8 vendor/symfony/event-dispatcher/Tests/Debug/TraceableEventDispatcherTest.php \Symfony\Component\EventDispatcher\Tests\Debug\TraceableEventDispatcherTest
  2. 8 vendor/symfony/http-kernel/Tests/Debug/TraceableEventDispatcherTest.php \Symfony\Component\HttpKernel\Tests\Debug\TraceableEventDispatcherTest
Same name and namespace in other branches
  1. 8.0 vendor/symfony/event-dispatcher/Tests/Debug/TraceableEventDispatcherTest.php \Symfony\Component\EventDispatcher\Tests\Debug\TraceableEventDispatcherTest

Hierarchy

  • class \Symfony\Component\EventDispatcher\Tests\Debug\TraceableEventDispatcherTest extends \Symfony\Component\EventDispatcher\Tests\Debug\PHPUnit_Framework_TestCase

Expanded class hierarchy of TraceableEventDispatcherTest

File

vendor/symfony/event-dispatcher/Tests/Debug/TraceableEventDispatcherTest.php, line 21

Namespace

Symfony\Component\EventDispatcher\Tests\Debug
View source
class TraceableEventDispatcherTest extends \PHPUnit_Framework_TestCase {
  public function testAddRemoveListener() {
    $dispatcher = new EventDispatcher();
    $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
    $tdispatcher
      ->addListener('foo', $listener = function () {
    });
    $listeners = $dispatcher
      ->getListeners('foo');
    $this
      ->assertCount(1, $listeners);
    $this
      ->assertSame($listener, $listeners[0]);
    $tdispatcher
      ->removeListener('foo', $listener);
    $this
      ->assertCount(0, $dispatcher
      ->getListeners('foo'));
  }
  public function testGetListeners() {
    $dispatcher = new EventDispatcher();
    $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
    $tdispatcher
      ->addListener('foo', $listener = function () {
    });
    $this
      ->assertSame($dispatcher
      ->getListeners('foo'), $tdispatcher
      ->getListeners('foo'));
  }
  public function testHasListeners() {
    $dispatcher = new EventDispatcher();
    $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
    $this
      ->assertFalse($dispatcher
      ->hasListeners('foo'));
    $this
      ->assertFalse($tdispatcher
      ->hasListeners('foo'));
    $tdispatcher
      ->addListener('foo', $listener = function () {
    });
    $this
      ->assertTrue($dispatcher
      ->hasListeners('foo'));
    $this
      ->assertTrue($tdispatcher
      ->hasListeners('foo'));
  }
  public function testAddRemoveSubscriber() {
    $dispatcher = new EventDispatcher();
    $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
    $subscriber = new EventSubscriber();
    $tdispatcher
      ->addSubscriber($subscriber);
    $listeners = $dispatcher
      ->getListeners('foo');
    $this
      ->assertCount(1, $listeners);
    $this
      ->assertSame(array(
      $subscriber,
      'call',
    ), $listeners[0]);
    $tdispatcher
      ->removeSubscriber($subscriber);
    $this
      ->assertCount(0, $dispatcher
      ->getListeners('foo'));
  }
  public function testGetCalledListeners() {
    $dispatcher = new EventDispatcher();
    $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
    $tdispatcher
      ->addListener('foo', $listener = function () {
    });
    $this
      ->assertEquals(array(), $tdispatcher
      ->getCalledListeners());
    $this
      ->assertEquals(array(
      'foo.closure' => array(
        'event' => 'foo',
        'type' => 'Closure',
        'pretty' => 'closure',
      ),
    ), $tdispatcher
      ->getNotCalledListeners());
    $tdispatcher
      ->dispatch('foo');
    $this
      ->assertEquals(array(
      'foo.closure' => array(
        'event' => 'foo',
        'type' => 'Closure',
        'pretty' => 'closure',
      ),
    ), $tdispatcher
      ->getCalledListeners());
    $this
      ->assertEquals(array(), $tdispatcher
      ->getNotCalledListeners());
  }
  public function testGetCalledListenersNested() {
    $tdispatcher = null;
    $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
    $dispatcher
      ->addListener('foo', function (Event $event, $eventName, $dispatcher) use (&$tdispatcher) {
      $tdispatcher = $dispatcher;
      $dispatcher
        ->dispatch('bar');
    });
    $dispatcher
      ->addListener('bar', function (Event $event) {
    });
    $dispatcher
      ->dispatch('foo');
    $this
      ->assertSame($dispatcher, $tdispatcher);
    $this
      ->assertCount(2, $dispatcher
      ->getCalledListeners());
  }
  public function testLogger() {
    $logger = $this
      ->getMock('Psr\\Log\\LoggerInterface');
    $dispatcher = new EventDispatcher();
    $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch(), $logger);
    $tdispatcher
      ->addListener('foo', $listener1 = function () {
    });
    $tdispatcher
      ->addListener('foo', $listener2 = function () {
    });
    $logger
      ->expects($this
      ->at(0))
      ->method('debug')
      ->with('Notified event "foo" to listener "closure".');
    $logger
      ->expects($this
      ->at(1))
      ->method('debug')
      ->with('Notified event "foo" to listener "closure".');
    $tdispatcher
      ->dispatch('foo');
  }
  public function testLoggerWithStoppedEvent() {
    $logger = $this
      ->getMock('Psr\\Log\\LoggerInterface');
    $dispatcher = new EventDispatcher();
    $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch(), $logger);
    $tdispatcher
      ->addListener('foo', $listener1 = function (Event $event) {
      $event
        ->stopPropagation();
    });
    $tdispatcher
      ->addListener('foo', $listener2 = function () {
    });
    $logger
      ->expects($this
      ->at(0))
      ->method('debug')
      ->with('Notified event "foo" to listener "closure".');
    $logger
      ->expects($this
      ->at(1))
      ->method('debug')
      ->with('Listener "closure" stopped propagation of the event "foo".');
    $logger
      ->expects($this
      ->at(2))
      ->method('debug')
      ->with('Listener "closure" was not called for event "foo".');
    $tdispatcher
      ->dispatch('foo');
  }
  public function testDispatchCallListeners() {
    $called = array();
    $dispatcher = new EventDispatcher();
    $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
    $tdispatcher
      ->addListener('foo', $listener1 = function () use (&$called) {
      $called[] = 'foo1';
    });
    $tdispatcher
      ->addListener('foo', $listener2 = function () use (&$called) {
      $called[] = 'foo2';
    });
    $tdispatcher
      ->dispatch('foo');
    $this
      ->assertEquals(array(
      'foo1',
      'foo2',
    ), $called);
  }
  public function testDispatchNested() {
    $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
    $loop = 1;
    $dispatcher
      ->addListener('foo', $listener1 = function () use ($dispatcher, &$loop) {
      ++$loop;
      if (2 == $loop) {
        $dispatcher
          ->dispatch('foo');
      }
    });
    $dispatcher
      ->dispatch('foo');
  }
  public function testDispatchReusedEventNested() {
    $nestedCall = false;
    $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
    $dispatcher
      ->addListener('foo', function (Event $e) use ($dispatcher) {
      $dispatcher
        ->dispatch('bar', $e);
    });
    $dispatcher
      ->addListener('bar', function (Event $e) use (&$nestedCall) {
      $nestedCall = true;
    });
    $this
      ->assertFalse($nestedCall);
    $dispatcher
      ->dispatch('foo');
    $this
      ->assertTrue($nestedCall);
  }
  public function testListenerCanRemoveItselfWhenExecuted() {
    $eventDispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
    $listener1 = function ($event, $eventName, EventDispatcherInterface $dispatcher) use (&$listener1) {
      $dispatcher
        ->removeListener('foo', $listener1);
    };
    $eventDispatcher
      ->addListener('foo', $listener1);
    $eventDispatcher
      ->addListener('foo', function () {
    });
    $eventDispatcher
      ->dispatch('foo');
    $this
      ->assertCount(1, $eventDispatcher
      ->getListeners('foo'), 'expected listener1 to be removed');
  }

}

Members