PageRenderTime 45ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/Debug/TraceableEventDispatcherTest.php

https://gitlab.com/Blueprint-Marketing/solr-power
PHP | 185 lines | 140 code | 37 blank | 8 comment | 3 complexity | 644ee1475fb6169c38b76f8ed42a8657 MD5 | raw file
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Component\EventDispatcher\Tests\Debug;
  11. use Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\EventDispatcher\EventDispatcher;
  14. use Symfony\Component\EventDispatcher\Event;
  15. use Symfony\Component\Stopwatch\Stopwatch;
  16. class TraceableEventDispatcherTest extends \PHPUnit_Framework_TestCase
  17. {
  18. public function testAddRemoveListener()
  19. {
  20. $dispatcher = new EventDispatcher();
  21. $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
  22. $tdispatcher->addListener('foo', $listener = function () {; });
  23. $listeners = $dispatcher->getListeners('foo');
  24. $this->assertCount(1, $listeners);
  25. $this->assertSame($listener, $listeners[0]);
  26. $tdispatcher->removeListener('foo', $listener);
  27. $this->assertCount(0, $dispatcher->getListeners('foo'));
  28. }
  29. public function testGetListeners()
  30. {
  31. $dispatcher = new EventDispatcher();
  32. $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
  33. $tdispatcher->addListener('foo', $listener = function () {; });
  34. $this->assertSame($dispatcher->getListeners('foo'), $tdispatcher->getListeners('foo'));
  35. }
  36. public function testHasListeners()
  37. {
  38. $dispatcher = new EventDispatcher();
  39. $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
  40. $this->assertFalse($dispatcher->hasListeners('foo'));
  41. $this->assertFalse($tdispatcher->hasListeners('foo'));
  42. $tdispatcher->addListener('foo', $listener = function () {; });
  43. $this->assertTrue($dispatcher->hasListeners('foo'));
  44. $this->assertTrue($tdispatcher->hasListeners('foo'));
  45. }
  46. public function testAddRemoveSubscriber()
  47. {
  48. $dispatcher = new EventDispatcher();
  49. $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
  50. $subscriber = new EventSubscriber();
  51. $tdispatcher->addSubscriber($subscriber);
  52. $listeners = $dispatcher->getListeners('foo');
  53. $this->assertCount(1, $listeners);
  54. $this->assertSame(array($subscriber, 'call'), $listeners[0]);
  55. $tdispatcher->removeSubscriber($subscriber);
  56. $this->assertCount(0, $dispatcher->getListeners('foo'));
  57. }
  58. public function testGetCalledListeners()
  59. {
  60. $dispatcher = new EventDispatcher();
  61. $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
  62. $tdispatcher->addListener('foo', $listener = function () {; });
  63. $this->assertEquals(array(), $tdispatcher->getCalledListeners());
  64. $this->assertEquals(array('foo.closure' => array('event' => 'foo', 'type' => 'Closure', 'pretty' => 'closure')), $tdispatcher->getNotCalledListeners());
  65. $tdispatcher->dispatch('foo');
  66. $this->assertEquals(array('foo.closure' => array('event' => 'foo', 'type' => 'Closure', 'pretty' => 'closure')), $tdispatcher->getCalledListeners());
  67. $this->assertEquals(array(), $tdispatcher->getNotCalledListeners());
  68. }
  69. public function testGetCalledListenersNested()
  70. {
  71. $tdispatcher = null;
  72. $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
  73. $dispatcher->addListener('foo', function (Event $event, $eventName, $dispatcher) use (&$tdispatcher) {
  74. $tdispatcher = $dispatcher;
  75. $dispatcher->dispatch('bar');
  76. });
  77. $dispatcher->addListener('bar', function (Event $event) {});
  78. $dispatcher->dispatch('foo');
  79. $this->assertSame($dispatcher, $tdispatcher);
  80. $this->assertCount(2, $dispatcher->getCalledListeners());
  81. }
  82. public function testLogger()
  83. {
  84. $logger = $this->getMock('Psr\Log\LoggerInterface');
  85. $dispatcher = new EventDispatcher();
  86. $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch(), $logger);
  87. $tdispatcher->addListener('foo', $listener1 = function () {; });
  88. $tdispatcher->addListener('foo', $listener2 = function () {; });
  89. $logger->expects($this->at(0))->method('debug')->with("Notified event \"foo\" to listener \"closure\".");
  90. $logger->expects($this->at(1))->method('debug')->with("Notified event \"foo\" to listener \"closure\".");
  91. $tdispatcher->dispatch('foo');
  92. }
  93. public function testLoggerWithStoppedEvent()
  94. {
  95. $logger = $this->getMock('Psr\Log\LoggerInterface');
  96. $dispatcher = new EventDispatcher();
  97. $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch(), $logger);
  98. $tdispatcher->addListener('foo', $listener1 = function (Event $event) { $event->stopPropagation(); });
  99. $tdispatcher->addListener('foo', $listener2 = function () {; });
  100. $logger->expects($this->at(0))->method('debug')->with("Notified event \"foo\" to listener \"closure\".");
  101. $logger->expects($this->at(1))->method('debug')->with("Listener \"closure\" stopped propagation of the event \"foo\".");
  102. $logger->expects($this->at(2))->method('debug')->with("Listener \"closure\" was not called for event \"foo\".");
  103. $tdispatcher->dispatch('foo');
  104. }
  105. public function testDispatchCallListeners()
  106. {
  107. $called = array();
  108. $dispatcher = new EventDispatcher();
  109. $tdispatcher = new TraceableEventDispatcher($dispatcher, new Stopwatch());
  110. $tdispatcher->addListener('foo', $listener1 = function () use (&$called) { $called[] = 'foo1'; });
  111. $tdispatcher->addListener('foo', $listener2 = function () use (&$called) { $called[] = 'foo2'; });
  112. $tdispatcher->dispatch('foo');
  113. $this->assertEquals(array('foo1', 'foo2'), $called);
  114. }
  115. public function testDispatchNested()
  116. {
  117. $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
  118. $loop = 1;
  119. $dispatcher->addListener('foo', $listener1 = function () use ($dispatcher, &$loop) {
  120. ++$loop;
  121. if (2 == $loop) {
  122. $dispatcher->dispatch('foo');
  123. }
  124. });
  125. $dispatcher->dispatch('foo');
  126. }
  127. public function testDispatchReusedEventNested()
  128. {
  129. $nestedCall = false;
  130. $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
  131. $dispatcher->addListener('foo', function (Event $e) use ($dispatcher) {
  132. $dispatcher->dispatch('bar', $e);
  133. });
  134. $dispatcher->addListener('bar', function (Event $e) use (&$nestedCall) {
  135. $nestedCall = true;
  136. });
  137. $this->assertFalse($nestedCall);
  138. $dispatcher->dispatch('foo');
  139. $this->assertTrue($nestedCall);
  140. }
  141. }
  142. class EventSubscriber implements EventSubscriberInterface
  143. {
  144. public static function getSubscribedEvents()
  145. {
  146. return array('foo' => 'call');
  147. }
  148. }