Security update for Core, with self-updated composer
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Routing / CurrentRouteMatchTest.php
1 <?php
2
3 namespace Drupal\Tests\Core\Routing;
4
5 use Drupal\Core\Routing\CurrentRouteMatch;
6 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
7 use Symfony\Component\HttpFoundation\ParameterBag;
8 use Symfony\Component\HttpFoundation\Request;
9 use Symfony\Component\HttpFoundation\RequestStack;
10 use Symfony\Component\Routing\Route;
11
12 /**
13  * @coversDefaultClass \Drupal\Core\Routing\CurrentRouteMatch
14  * @group Routing
15  */
16 class CurrentRouteMatchTest extends RouteMatchTestBase {
17
18   /**
19    * {@inheritdoc}
20    */
21   protected function getRouteMatch($name, Route $route, array $parameters, array $raw_parameters) {
22     $request_stack = new RequestStack();
23     $request = new Request();
24     $request_stack->push($request);
25
26     $request = $request_stack->getCurrentRequest();
27     $request->attributes = new ParameterBag($parameters);
28     $request->attributes->set(RouteObjectInterface::ROUTE_NAME, $name);
29     $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, $route);
30     $request->attributes->set('_raw_variables', new ParameterBag($raw_parameters));
31     return new CurrentRouteMatch($request_stack);
32   }
33
34   /**
35    * @covers ::__construct
36    * @covers ::getRouteObject
37    * @covers ::getCurrentRouteMatch
38    * @covers ::getRouteMatch
39    */
40   public function testGetCurrentRouteObject() {
41
42     $request_stack = new RequestStack();
43     $request = new Request();
44     $request_stack->push($request);
45     $current_route_match = new CurrentRouteMatch($request_stack);
46
47     // Before routing.
48     $this->assertNull($current_route_match->getRouteObject());
49
50     // After routing.
51     $route = new Route('/test-route/{foo}');
52     $request->attributes->set(RouteObjectInterface::ROUTE_NAME, 'test_route');
53     $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, $route);
54     $request->attributes->set('foo', '1');
55     $this->assertSame('1', $current_route_match->getParameter('foo'));
56
57     // Immutable for the same request once a route has been matched.
58     $request->attributes->set('foo', '2');
59     $this->assertSame('1', $current_route_match->getParameter('foo'));
60
61     // Subrequest.
62     $subrequest = new Request();
63     $subrequest->attributes->set(RouteObjectInterface::ROUTE_NAME, 'test_subrequest_route');
64     $subrequest->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route('/test-subrequest-route/{foo}'));
65     $subrequest->attributes->set('foo', '2');
66     $request_stack->push($subrequest);
67     $this->assertSame('2', $current_route_match->getParameter('foo'));
68
69     // Restored original request.
70     $request_stack->pop();
71     $this->assertSame('1', $current_route_match->getParameter('foo'));
72   }
73
74   /**
75    * @covers ::getRouteMatchFromRequest
76    */
77   public function testGetRouteMatchFromRequestWithRouting() {
78     $request_stack = new RequestStack();
79     $request = new Request();
80     $request_stack->push($request);
81     $current_route_match = new CurrentRouteMatch($request_stack);
82
83     $route_match = $current_route_match->getRouteMatchFromRequest($request);
84
85     $this->assertNull($route_match->getRouteName());
86     $this->assertNull($route_match->getRouteObject());
87   }
88
89   /**
90    * @covers ::getRouteMatchFromRequest
91    */
92   public function testGetRouteMatchFromRequest() {
93     $request_stack = new RequestStack();
94     $request = new Request();
95     $request_stack->push($request);
96     $route = new Route('/test-route/{foo}');
97
98     $request->attributes->set(RouteObjectInterface::ROUTE_NAME, 'test_route');
99     $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, $route);
100     $request->attributes->set('foo', '1');
101     $current_route_match = new CurrentRouteMatch($request_stack);
102
103     $route_match = $current_route_match->getRouteMatchFromRequest($request);
104     $this->assertEquals('test_route', $route_match->getRouteName());
105     $this->assertEquals($route, $route_match->getRouteObject());
106   }
107
108   /**
109    * @covers ::resetRouteMatch
110    */
111   public function testResetRouteMatch() {
112     $route = new Route('/test-route/{foo}');
113     $request = new Request();
114     $request->attributes->set(RouteObjectInterface::ROUTE_NAME, 'test_route');
115     $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, $route);
116     $request_stack = new RequestStack();
117     $request_stack->push($request);
118
119     $current_route_match = new CurrentRouteMatch($request_stack);
120
121     $route_name = $current_route_match->getRouteName();
122     $this->assertSame('test_route', $route_name);
123
124     // Replace the matched route on the request.
125     $request->attributes->set(RouteObjectInterface::ROUTE_NAME, NULL);
126     $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, NULL);
127     // Reset the route match.
128     $current_route_match->resetRouteMatch();
129
130     $route_name = $current_route_match->getRouteName();
131     $this->assertNull($route_name);
132   }
133
134 }