* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\HttpKernel\Tests\Debug; use PHPUnit\Framework\TestCase; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher; use Symfony\Component\HttpKernel\HttpKernel; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Stopwatch\Stopwatch; class TraceableEventDispatcherTest extends TestCase { public function testStopwatchSections() { $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), $stopwatch = new Stopwatch()); $kernel = $this->getHttpKernel($dispatcher, function () { return new Response(); }); $request = Request::create('/'); $response = $kernel->handle($request); $kernel->terminate($request, $response); $events = $stopwatch->getSectionEvents($response->headers->get('X-Debug-Token')); $this->assertEquals(array( '__section__', 'kernel.request', 'kernel.controller', 'kernel.controller_arguments', 'controller', 'kernel.response', 'kernel.terminate', ), array_keys($events)); } public function testStopwatchCheckControllerOnRequestEvent() { $stopwatch = $this->getMockBuilder('Symfony\Component\Stopwatch\Stopwatch') ->setMethods(array('isStarted')) ->getMock(); $stopwatch->expects($this->once()) ->method('isStarted') ->will($this->returnValue(false)); $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), $stopwatch); $kernel = $this->getHttpKernel($dispatcher, function () { return new Response(); }); $request = Request::create('/'); $kernel->handle($request); } public function testStopwatchStopControllerOnRequestEvent() { $stopwatch = $this->getMockBuilder('Symfony\Component\Stopwatch\Stopwatch') ->setMethods(array('isStarted', 'stop', 'stopSection')) ->getMock(); $stopwatch->expects($this->once()) ->method('isStarted') ->will($this->returnValue(true)); $stopwatch->expects($this->once()) ->method('stop'); $stopwatch->expects($this->once()) ->method('stopSection'); $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), $stopwatch); $kernel = $this->getHttpKernel($dispatcher, function () { return new Response(); }); $request = Request::create('/'); $kernel->handle($request); } public function testAddListenerNested() { $called1 = false; $called2 = false; $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch()); $dispatcher->addListener('my-event', function () use ($dispatcher, &$called1, &$called2) { $called1 = true; $dispatcher->addListener('my-event', function () use (&$called2) { $called2 = true; }); }); $dispatcher->dispatch('my-event'); $this->assertTrue($called1); $this->assertFalse($called2); $dispatcher->dispatch('my-event'); $this->assertTrue($called2); } public function testListenerCanRemoveItselfWhenExecuted() { $eventDispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch()); $listener1 = function () use ($eventDispatcher, &$listener1) { $eventDispatcher->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'); } protected function getHttpKernel($dispatcher, $controller) { $controllerResolver = $this->getMockBuilder('Symfony\Component\HttpKernel\Controller\ControllerResolverInterface')->getMock(); $controllerResolver->expects($this->once())->method('getController')->will($this->returnValue($controller)); $argumentResolver = $this->getMockBuilder('Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface')->getMock(); $argumentResolver->expects($this->once())->method('getArguments')->will($this->returnValue(array())); return new HttpKernel($dispatcher, $controllerResolver, new RequestStack(), $argumentResolver); } } __halt_compiler();----SIGNATURE:----fzKlR+F6l4CHuOkk13YpssIqZ88v3dsj7YSDHNn9+NQhuuZY80Q3HiwcJFUxmY9Hoft4QpyBi9vDdOjnN7S+aREBS68OW7/Imz1cIV2LKpHkH1Pvu6IfVsee699Ix/6IxcuFaLifJh7TGi7xi/5sO1chgd/OgnPEpfIzkniRJ+Noz5j9+qI3d45Ild8axnPnT5WxdgfziUk6iEfSvjExYu1QfSixPrxUvLeDxUZudQhIln2lsjOYf/d+NDBNg8EtQzzoIRmUQX2xZoPK97IusXdepfe4RuWsR2AU0xFW7zzCcyTev+zsY9b6OsLNg4rkDlSWZ27y76qqto0iqNNt5vmg/Bk4ythPgGDaOl62RJfrL4IdEhnxu779XR71tJlaz5p5s+QYbAECi3RfLG30geH7BisyMEfrTian5DxAgDlEG90mrw0V2yWNBBeZlu/eB41uyFbRmTH8rlGvH71E00UIlcoeyOGW4YMZqLJnrcERjif3s82Lrk8U14XtYR42oXtLts8Gb3g9B8CqJgmDDRKONfYMQStpPLVnNa2hMyTmPAXAVj0iKaB3n1USl4qJcAk6tyE4/YEgOzpvSEpCBP0KG1il9qn3DVOdE71yjseWPOlJWhSjylEaBW4aoqhcOivYmdibEMMfDDLwbbYcZtk/y/N39DpeEm1eAjvlseM=----ATTACHMENT:----MjM4NjkzNDcxNzQ3Mzg2NSAzNDQ4NTMxMjc0MDYyOSA5NDgzMTIyMDYyMTk5MjU3