3 namespace Drupal\Tests\Core\Routing;
5 use Drupal\Core\Routing\RouteMatchInterface;
6 use Drupal\Tests\UnitTestCase;
7 use Symfony\Component\Routing\Route;
10 * Base test class for testing classes implementing the route match interface.
12 abstract class RouteMatchTestBase extends UnitTestCase {
15 * Build a test route match object for the given implementation.
19 * @param \Symfony\Component\Routing\Route $route
21 * @param array $parameters
23 * @param $raw_parameters
24 * Raw parameters array
25 * @return \Drupal\Core\Routing\RouteMatchInterface
27 abstract protected function getRouteMatch($name, Route $route, array $parameters, array $raw_parameters);
30 * Provide sets of parameters and expected parameters for parameter tests.
32 public function routeMatchProvider() {
36 '/test-route/{param_without_leading_underscore}/{_param_with_leading_underscore}',
38 'default_without_leading_underscore' => NULL,
39 '_default_with_leading_underscore' => NULL,
43 'param_without_leading_underscore' => 'value',
44 '_param_with_leading_underscore' => 'value',
45 'default_without_leading_underscore' => 'value',
46 '_default_with_leading_underscore' => 'value',
49 // Parameters should be filtered to only those defined by the route.
51 // - Path parameters, regardless of name.
52 // - Defaults that are not path parameters only if they do not start with
55 'param_without_leading_underscore' => 'value',
56 '_param_with_leading_underscore' => 'value',
57 'default_without_leading_underscore' => 'value',
63 foreach ($base_data as $entry) {
66 $expected_params = $entry[2];
68 $this->getRouteMatch('test_route', $route, $params, $params),
79 * @covers ::getRouteName
80 * @dataProvider routeMatchProvider
82 public function testGetRouteName(RouteMatchInterface $route_match) {
83 $this->assertSame('test_route', $route_match->getRouteName());
87 * @covers ::getRouteObject
88 * @dataProvider routeMatchProvider
90 public function testGetRouteObject(RouteMatchInterface $route_match, Route $route) {
91 $this->assertSame($route, $route_match->getRouteObject());
95 * @covers ::getParameter
96 * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
97 * @dataProvider routeMatchProvider
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));
103 foreach (array_diff_key($parameters, $expected_filtered_parameters) as $name) {
104 $this->assertNull($route_match->getParameter($name));
109 * @covers ::getParameters
110 * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
111 * @dataProvider routeMatchProvider
113 public function testGetParameters(RouteMatchInterface $route_match, Route $route, $parameters, $expected_filtered_parameters) {
114 $this->assertSame($expected_filtered_parameters, $route_match->getParameters()->all());
118 * @covers ::getRawParameter
119 * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
120 * @dataProvider routeMatchProvider
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));
126 foreach (array_diff_key($parameters, $expected_filtered_parameters) as $name) {
127 $this->assertNull($route_match->getRawParameter($name));
132 * @covers ::getRawParameters
133 * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
134 * @dataProvider routeMatchProvider
136 public function testGetRawParameters(RouteMatchInterface $route_match, Route $route, $parameters, $expected_filtered_parameters) {
137 $this->assertSame($expected_filtered_parameters, $route_match->getRawParameters()->all());