Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Routing / RouteMatchTestBase.php
1 <?php
2
3 namespace Drupal\Tests\Core\Routing;
4
5 use Drupal\Core\Routing\RouteMatchInterface;
6 use Drupal\Tests\UnitTestCase;
7 use Symfony\Component\Routing\Route;
8
9 /**
10  * Base test class for testing classes implementing the route match interface.
11  */
12 abstract class RouteMatchTestBase extends UnitTestCase {
13
14   /**
15    * Build a test route match object for the given implementation.
16    *
17    * @param $name
18    *   Route name.
19    * @param \Symfony\Component\Routing\Route $route
20    *   Request object
21    * @param array $parameters
22    *   Parameters array
23    * @param $raw_parameters
24    *   Raw parameters array
25    * @return \Drupal\Core\Routing\RouteMatchInterface
26    */
27   abstract protected function getRouteMatch($name, Route $route, array $parameters, array $raw_parameters);
28
29
30   /**
31    * Provide sets of parameters and expected parameters for parameter tests.
32    */
33   public function routeMatchProvider() {
34     $base_data = [
35       [
36         new Route(
37           '/test-route/{param_without_leading_underscore}/{_param_with_leading_underscore}',
38           [
39             'default_without_leading_underscore' => NULL,
40             '_default_with_leading_underscore' => NULL,
41           ]
42         ),
43         [
44           'param_without_leading_underscore' => 'value',
45           '_param_with_leading_underscore' => 'value',
46           'default_without_leading_underscore' => 'value',
47           '_default_with_leading_underscore' => 'value',
48           'foo' => 'value',
49         ],
50         // Parameters should be filtered to only those defined by the route.
51         // Specifically:
52         // - Path parameters, regardless of name.
53         // - Defaults that are not path parameters only if they do not start with
54         //   an underscore.
55         [
56           'param_without_leading_underscore' => 'value',
57           '_param_with_leading_underscore' => 'value',
58           'default_without_leading_underscore' => 'value',
59         ],
60       ],
61     ];
62
63     $data = [];
64     foreach ($base_data as $entry) {
65       $route = $entry[0];
66       $params = $entry[1];
67       $expected_params = $entry[2];
68       $data[] = [
69         $this->getRouteMatch('test_route', $route, $params, $params),
70         $route,
71         $params,
72         $expected_params,
73       ];
74     }
75
76     return $data;
77   }
78
79   /**
80    * @covers ::getRouteName
81    * @dataProvider routeMatchProvider
82    */
83   public function testGetRouteName(RouteMatchInterface $route_match) {
84     $this->assertSame('test_route', $route_match->getRouteName());
85   }
86
87   /**
88    * @covers ::getRouteObject
89    * @dataProvider routeMatchProvider
90    */
91   public function testGetRouteObject(RouteMatchInterface $route_match, Route $route) {
92     $this->assertSame($route, $route_match->getRouteObject());
93   }
94
95   /**
96    * @covers ::getParameter
97    * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
98    * @dataProvider routeMatchProvider
99    */
100   public function testGetParameter(RouteMatchInterface $route_match, Route $route, $parameters, $expected_filtered_parameters) {
101     foreach ($expected_filtered_parameters as $name => $expected_value) {
102       $this->assertSame($expected_value, $route_match->getParameter($name));
103     }
104     foreach (array_diff_key($parameters, $expected_filtered_parameters) as $name) {
105       $this->assertNull($route_match->getParameter($name));
106     }
107   }
108
109   /**
110    * @covers ::getParameters
111    * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
112    * @dataProvider routeMatchProvider
113    */
114   public function testGetParameters(RouteMatchInterface $route_match, Route $route, $parameters, $expected_filtered_parameters) {
115     $this->assertSame($expected_filtered_parameters, $route_match->getParameters()->all());
116   }
117
118   /**
119    * @covers ::getRawParameter
120    * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
121    * @dataProvider routeMatchProvider
122    */
123   public function testGetRawParameter(RouteMatchInterface $route_match, Route $route, $parameters, $expected_filtered_parameters) {
124     foreach ($expected_filtered_parameters as $name => $expected_value) {
125       $this->assertSame($expected_value, $route_match->getRawParameter($name));
126     }
127     foreach (array_diff_key($parameters, $expected_filtered_parameters) as $name) {
128       $this->assertNull($route_match->getRawParameter($name));
129     }
130   }
131
132   /**
133    * @covers ::getRawParameters
134    * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
135    * @dataProvider routeMatchProvider
136    */
137   public function testGetRawParameters(RouteMatchInterface $route_match, Route $route, $parameters, $expected_filtered_parameters) {
138     $this->assertSame($expected_filtered_parameters, $route_match->getRawParameters()->all());
139   }
140
141 }