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);
31 * Provide sets of parameters and expected parameters for parameter tests.
33 public function routeMatchProvider() {
37 '/test-route/{param_without_leading_underscore}/{_param_with_leading_underscore}',
39 'default_without_leading_underscore' => NULL,
40 '_default_with_leading_underscore' => NULL,
44 'param_without_leading_underscore' => 'value',
45 '_param_with_leading_underscore' => 'value',
46 'default_without_leading_underscore' => 'value',
47 '_default_with_leading_underscore' => 'value',
50 // Parameters should be filtered to only those defined by the route.
52 // - Path parameters, regardless of name.
53 // - Defaults that are not path parameters only if they do not start with
56 'param_without_leading_underscore' => 'value',
57 '_param_with_leading_underscore' => 'value',
58 'default_without_leading_underscore' => 'value',
64 foreach ($base_data as $entry) {
67 $expected_params = $entry[2];
69 $this->getRouteMatch('test_route', $route, $params, $params),
80 * @covers ::getRouteName
81 * @dataProvider routeMatchProvider
83 public function testGetRouteName(RouteMatchInterface $route_match) {
84 $this->assertSame('test_route', $route_match->getRouteName());
88 * @covers ::getRouteObject
89 * @dataProvider routeMatchProvider
91 public function testGetRouteObject(RouteMatchInterface $route_match, Route $route) {
92 $this->assertSame($route, $route_match->getRouteObject());
96 * @covers ::getParameter
97 * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
98 * @dataProvider routeMatchProvider
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));
104 foreach (array_diff_key($parameters, $expected_filtered_parameters) as $name) {
105 $this->assertNull($route_match->getParameter($name));
110 * @covers ::getParameters
111 * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
112 * @dataProvider routeMatchProvider
114 public function testGetParameters(RouteMatchInterface $route_match, Route $route, $parameters, $expected_filtered_parameters) {
115 $this->assertSame($expected_filtered_parameters, $route_match->getParameters()->all());
119 * @covers ::getRawParameter
120 * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
121 * @dataProvider routeMatchProvider
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));
127 foreach (array_diff_key($parameters, $expected_filtered_parameters) as $name) {
128 $this->assertNull($route_match->getRawParameter($name));
133 * @covers ::getRawParameters
134 * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
135 * @dataProvider routeMatchProvider
137 public function testGetRawParameters(RouteMatchInterface $route_match, Route $route, $parameters, $expected_filtered_parameters) {
138 $this->assertSame($expected_filtered_parameters, $route_match->getRawParameters()->all());