Dashboard sipadu mbip
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

TraceableEventDispatcherTest.php 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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\HttpKernel\Tests\Debug;
  11. use PHPUnit\Framework\TestCase;
  12. use Symfony\Component\EventDispatcher\Event;
  13. use Symfony\Component\EventDispatcher\EventDispatcher;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\RequestStack;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher;
  18. use Symfony\Component\HttpKernel\HttpKernel;
  19. use Symfony\Component\Stopwatch\Stopwatch;
  20. class TraceableEventDispatcherTest extends TestCase
  21. {
  22. public function testStopwatchSections()
  23. {
  24. $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), $stopwatch = new Stopwatch());
  25. $kernel = $this->getHttpKernel($dispatcher, function () { return new Response('', 200, ['X-Debug-Token' => '292e1e']); });
  26. $request = Request::create('/');
  27. $response = $kernel->handle($request);
  28. $kernel->terminate($request, $response);
  29. $events = $stopwatch->getSectionEvents($response->headers->get('X-Debug-Token'));
  30. $this->assertEquals([
  31. '__section__',
  32. 'kernel.request',
  33. 'kernel.controller',
  34. 'kernel.controller_arguments',
  35. 'controller',
  36. 'kernel.response',
  37. 'kernel.terminate',
  38. ], array_keys($events));
  39. }
  40. public function testStopwatchCheckControllerOnRequestEvent()
  41. {
  42. $stopwatch = $this->getMockBuilder('Symfony\Component\Stopwatch\Stopwatch')
  43. ->setMethods(['isStarted'])
  44. ->getMock();
  45. $stopwatch->expects($this->once())
  46. ->method('isStarted')
  47. ->willReturn(false);
  48. $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), $stopwatch);
  49. $kernel = $this->getHttpKernel($dispatcher, function () { return new Response(); });
  50. $request = Request::create('/');
  51. $kernel->handle($request);
  52. }
  53. public function testStopwatchStopControllerOnRequestEvent()
  54. {
  55. $stopwatch = $this->getMockBuilder('Symfony\Component\Stopwatch\Stopwatch')
  56. ->setMethods(['isStarted', 'stop', 'stopSection'])
  57. ->getMock();
  58. $stopwatch->expects($this->once())
  59. ->method('isStarted')
  60. ->willReturn(true);
  61. $stopwatch->expects($this->once())
  62. ->method('stop');
  63. $stopwatch->expects($this->once())
  64. ->method('stopSection');
  65. $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), $stopwatch);
  66. $kernel = $this->getHttpKernel($dispatcher, function () { return new Response(); });
  67. $request = Request::create('/');
  68. $kernel->handle($request);
  69. }
  70. public function testAddListenerNested()
  71. {
  72. $called1 = false;
  73. $called2 = false;
  74. $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
  75. $dispatcher->addListener('my-event', function () use ($dispatcher, &$called1, &$called2) {
  76. $called1 = true;
  77. $dispatcher->addListener('my-event', function () use (&$called2) {
  78. $called2 = true;
  79. });
  80. });
  81. $dispatcher->dispatch(new Event(), 'my-event');
  82. $this->assertTrue($called1);
  83. $this->assertFalse($called2);
  84. $dispatcher->dispatch(new Event(), 'my-event');
  85. $this->assertTrue($called2);
  86. }
  87. public function testListenerCanRemoveItselfWhenExecuted()
  88. {
  89. $eventDispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
  90. $listener1 = function () use ($eventDispatcher, &$listener1) {
  91. $eventDispatcher->removeListener('foo', $listener1);
  92. };
  93. $eventDispatcher->addListener('foo', $listener1);
  94. $eventDispatcher->addListener('foo', function () {});
  95. $eventDispatcher->dispatch(new Event(), 'foo');
  96. $this->assertCount(1, $eventDispatcher->getListeners('foo'), 'expected listener1 to be removed');
  97. }
  98. protected function getHttpKernel($dispatcher, $controller)
  99. {
  100. $controllerResolver = $this->getMockBuilder('Symfony\Component\HttpKernel\Controller\ControllerResolverInterface')->getMock();
  101. $controllerResolver->expects($this->once())->method('getController')->willReturn($controller);
  102. $argumentResolver = $this->getMockBuilder('Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface')->getMock();
  103. $argumentResolver->expects($this->once())->method('getArguments')->willReturn([]);
  104. return new HttpKernel($dispatcher, $controllerResolver, new RequestStack(), $argumentResolver);
  105. }
  106. }