a47ec73210fa51c50f6527238705fdb990393eff
[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    * Provide sets of parameters and expected parameters for parameter tests.
31    */
32   public function routeMatchProvider() {
33     $base_data = [
34       [
35         new Route(
36           '/test-route/{param_without_leading_underscore}/{_param_with_leading_underscore}',
37           [
38             'default_without_leading_underscore' => NULL,
39             '_default_with_leading_underscore' => NULL,
40           ]
41         ),
42         [
43           'param_without_leading_underscore' => 'value',
44           '_param_with_leading_underscore' => 'value',
45           'default_without_leading_underscore' => 'value',
46           '_default_with_leading_underscore' => 'value',
47           'foo' => 'value',
48         ],
49         // Parameters should be filtered to only those defined by the route.
50         // Specifically:
51         // - Path parameters, regardless of name.
52         // - Defaults that are not path parameters only if they do not start with
53         //   an underscore.
54         [
55           'param_without_leading_underscore' => 'value',
56           '_param_with_leading_underscore' => 'value',
57           'default_without_leading_underscore' => 'value',
58         ],
59       ],
60     ];
61
62     $data = [];
63     foreach ($base_data as $entry) {
64       $route = $entry[0];
65       $params = $entry[1];
66       $expected_params = $entry[2];
67       $data[] = [
68         $this->getRouteMatch('test_route', $route, $params, $params),
69         $route,
70         $params,
71         $expected_params,
72       ];
73     }
74
75     return $data;
76   }
77
78   /**
79    * @covers ::getRouteName
80    * @dataProvider routeMatchProvider
81    */
82   public function testGetRouteName(RouteMatchInterface $route_match) {
83     $this->assertSame('test_route', $route_match->getRouteName());
84   }
85
86   /**
87    * @covers ::getRouteObject
88    * @dataProvider routeMatchProvider
89    */
90   public function testGetRouteObject(RouteMatchInterface $route_match, Route $route) {
91     $this->assertSame($route, $route_match->getRouteObject());
92   }
93
94   /**
95    * @covers ::getParameter
96    * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
97    * @dataProvider routeMatchProvider
98    */
99   public function testGetParameter(RouteMatchInterface $route_match, Route $route, $parameters, $expected_filtered_parameters) {
100     foreach ($expected_filtered_parameters as $name => $expected_value) {
101       $this->assertSame($expected_value, $route_match->getParameter($name));
102     }
103     foreach (array_diff_key($parameters, $expected_filtered_parameters) as $name) {
104       $this->assertNull($route_match->getParameter($name));
105     }
106   }
107
108   /**
109    * @covers ::getParameters
110    * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
111    * @dataProvider routeMatchProvider
112    */
113   public function testGetParameters(RouteMatchInterface $route_match, Route $route, $parameters, $expected_filtered_parameters) {
114     $this->assertSame($expected_filtered_parameters, $route_match->getParameters()->all());
115   }
116
117   /**
118    * @covers ::getRawParameter
119    * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
120    * @dataProvider routeMatchProvider
121    */
122   public function testGetRawParameter(RouteMatchInterface $route_match, Route $route, $parameters, $expected_filtered_parameters) {
123     foreach ($expected_filtered_parameters as $name => $expected_value) {
124       $this->assertSame($expected_value, $route_match->getRawParameter($name));
125     }
126     foreach (array_diff_key($parameters, $expected_filtered_parameters) as $name) {
127       $this->assertNull($route_match->getRawParameter($name));
128     }
129   }
130
131   /**
132    * @covers ::getRawParameters
133    * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
134    * @dataProvider routeMatchProvider
135    */
136   public function testGetRawParameters(RouteMatchInterface $route_match, Route $route, $parameters, $expected_filtered_parameters) {
137     $this->assertSame($expected_filtered_parameters, $route_match->getRawParameters()->all());
138   }
139
140 }