Security update for Core, with self-updated composer
[yaffs-website] / vendor / symfony / http-kernel / Tests / Debug / TraceableEventDispatcherTest.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\HttpKernel\Tests\Debug;
13
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\EventDispatcher\EventDispatcher;
16 use Symfony\Component\HttpFoundation\RequestStack;
17 use Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher;
18 use Symfony\Component\HttpKernel\HttpKernel;
19 use Symfony\Component\HttpFoundation\Request;
20 use Symfony\Component\HttpFoundation\Response;
21 use Symfony\Component\Stopwatch\Stopwatch;
22
23 class TraceableEventDispatcherTest extends TestCase
24 {
25     public function testStopwatchSections()
26     {
27         $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), $stopwatch = new Stopwatch());
28         $kernel = $this->getHttpKernel($dispatcher, function () { return new Response(); });
29         $request = Request::create('/');
30         $response = $kernel->handle($request);
31         $kernel->terminate($request, $response);
32
33         $events = $stopwatch->getSectionEvents($response->headers->get('X-Debug-Token'));
34         $this->assertEquals(array(
35             '__section__',
36             'kernel.request',
37             'kernel.controller',
38             'kernel.controller_arguments',
39             'controller',
40             'kernel.response',
41             'kernel.terminate',
42         ), array_keys($events));
43     }
44
45     public function testStopwatchCheckControllerOnRequestEvent()
46     {
47         $stopwatch = $this->getMockBuilder('Symfony\Component\Stopwatch\Stopwatch')
48             ->setMethods(array('isStarted'))
49             ->getMock();
50         $stopwatch->expects($this->once())
51             ->method('isStarted')
52             ->will($this->returnValue(false));
53
54         $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), $stopwatch);
55
56         $kernel = $this->getHttpKernel($dispatcher, function () { return new Response(); });
57         $request = Request::create('/');
58         $kernel->handle($request);
59     }
60
61     public function testStopwatchStopControllerOnRequestEvent()
62     {
63         $stopwatch = $this->getMockBuilder('Symfony\Component\Stopwatch\Stopwatch')
64             ->setMethods(array('isStarted', 'stop', 'stopSection'))
65             ->getMock();
66         $stopwatch->expects($this->once())
67             ->method('isStarted')
68             ->will($this->returnValue(true));
69         $stopwatch->expects($this->once())
70             ->method('stop');
71         $stopwatch->expects($this->once())
72             ->method('stopSection');
73
74         $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), $stopwatch);
75
76         $kernel = $this->getHttpKernel($dispatcher, function () { return new Response(); });
77         $request = Request::create('/');
78         $kernel->handle($request);
79     }
80
81     public function testAddListenerNested()
82     {
83         $called1 = false;
84         $called2 = false;
85         $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
86         $dispatcher->addListener('my-event', function () use ($dispatcher, &$called1, &$called2) {
87             $called1 = true;
88             $dispatcher->addListener('my-event', function () use (&$called2) {
89                 $called2 = true;
90             });
91         });
92         $dispatcher->dispatch('my-event');
93         $this->assertTrue($called1);
94         $this->assertFalse($called2);
95         $dispatcher->dispatch('my-event');
96         $this->assertTrue($called2);
97     }
98
99     public function testListenerCanRemoveItselfWhenExecuted()
100     {
101         $eventDispatcher = new TraceableEventDispatcher(new EventDispatcher(), new Stopwatch());
102         $listener1 = function () use ($eventDispatcher, &$listener1) {
103             $eventDispatcher->removeListener('foo', $listener1);
104         };
105         $eventDispatcher->addListener('foo', $listener1);
106         $eventDispatcher->addListener('foo', function () {});
107         $eventDispatcher->dispatch('foo');
108
109         $this->assertCount(1, $eventDispatcher->getListeners('foo'), 'expected listener1 to be removed');
110     }
111
112     protected function getHttpKernel($dispatcher, $controller)
113     {
114         $controllerResolver = $this->getMockBuilder('Symfony\Component\HttpKernel\Controller\ControllerResolverInterface')->getMock();
115         $controllerResolver->expects($this->once())->method('getController')->will($this->returnValue($controller));
116         $argumentResolver = $this->getMockBuilder('Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface')->getMock();
117         $argumentResolver->expects($this->once())->method('getArguments')->will($this->returnValue(array()));
118
119         return new HttpKernel($dispatcher, $controllerResolver, new RequestStack(), $argumentResolver);
120     }
121 }