Version 1
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Routing / RouteMatchTestBase.php
diff --git a/web/core/tests/Drupal/Tests/Core/Routing/RouteMatchTestBase.php b/web/core/tests/Drupal/Tests/Core/Routing/RouteMatchTestBase.php
new file mode 100644 (file)
index 0000000..2678fd3
--- /dev/null
@@ -0,0 +1,141 @@
+<?php
+
+namespace Drupal\Tests\Core\Routing;
+
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Tests\UnitTestCase;
+use Symfony\Component\Routing\Route;
+
+/**
+ * Base test class for testing classes implementing the route match interface.
+ */
+abstract class RouteMatchTestBase extends UnitTestCase {
+
+  /**
+   * Build a test route match object for the given implementation.
+   *
+   * @param $name
+   *   Route name.
+   * @param Route $route
+   *   Request object
+   * @param array $parameters
+   *   Parameters array
+   * @param $raw_parameters
+   *   Raw parameters array
+   * @return \Drupal\Core\Routing\RouteMatchInterface
+   */
+  abstract protected function getRouteMatch($name, Route $route, array $parameters, array $raw_parameters);
+
+
+  /**
+   * Provide sets of parameters and expected parameters for parameter tests.
+   */
+  public function routeMatchProvider() {
+    $base_data = [
+      [
+        new Route(
+          '/test-route/{param_without_leading_underscore}/{_param_with_leading_underscore}',
+          [
+            'default_without_leading_underscore' => NULL,
+            '_default_with_leading_underscore' => NULL,
+          ]
+        ),
+        [
+          'param_without_leading_underscore' => 'value',
+          '_param_with_leading_underscore' => 'value',
+          'default_without_leading_underscore' => 'value',
+          '_default_with_leading_underscore' => 'value',
+          'foo' => 'value',
+        ],
+        // Parameters should be filtered to only those defined by the route.
+        // Specifically:
+        // - Path parameters, regardless of name.
+        // - Defaults that are not path parameters only if they do not start with
+        //   an underscore.
+        [
+          'param_without_leading_underscore' => 'value',
+          '_param_with_leading_underscore' => 'value',
+          'default_without_leading_underscore' => 'value',
+        ],
+      ],
+    ];
+
+    $data = [];
+    foreach ($base_data as $entry) {
+      $route = $entry[0];
+      $params = $entry[1];
+      $expected_params = $entry[2];
+      $data[] = [
+        $this->getRouteMatch('test_route', $route, $params, $params),
+        $route,
+        $params,
+        $expected_params,
+      ];
+    }
+
+    return $data;
+  }
+
+  /**
+   * @covers ::getRouteName
+   * @dataProvider routeMatchProvider
+   */
+  public function testGetRouteName(RouteMatchInterface $route_match) {
+    $this->assertSame('test_route', $route_match->getRouteName());
+  }
+
+  /**
+   * @covers ::getRouteObject
+   * @dataProvider routeMatchProvider
+   */
+  public function testGetRouteObject(RouteMatchInterface $route_match, Route $route) {
+    $this->assertSame($route, $route_match->getRouteObject());
+  }
+
+  /**
+   * @covers ::getParameter
+   * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
+   * @dataProvider routeMatchProvider
+   */
+  public function testGetParameter(RouteMatchInterface $route_match, Route $route, $parameters, $expected_filtered_parameters) {
+    foreach ($expected_filtered_parameters as $name => $expected_value) {
+      $this->assertSame($expected_value, $route_match->getParameter($name));
+    }
+    foreach (array_diff_key($parameters, $expected_filtered_parameters) as $name) {
+      $this->assertNull($route_match->getParameter($name));
+    }
+  }
+
+  /**
+   * @covers ::getParameters
+   * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
+   * @dataProvider routeMatchProvider
+   */
+  public function testGetParameters(RouteMatchInterface $route_match, Route $route, $parameters, $expected_filtered_parameters) {
+    $this->assertSame($expected_filtered_parameters, $route_match->getParameters()->all());
+  }
+
+  /**
+   * @covers ::getRawParameter
+   * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
+   * @dataProvider routeMatchProvider
+   */
+  public function testGetRawParameter(RouteMatchInterface $route_match, Route $route, $parameters, $expected_filtered_parameters) {
+    foreach ($expected_filtered_parameters as $name => $expected_value) {
+      $this->assertSame($expected_value, $route_match->getRawParameter($name));
+    }
+    foreach (array_diff_key($parameters, $expected_filtered_parameters) as $name) {
+      $this->assertNull($route_match->getRawParameter($name));
+    }
+  }
+
+  /**
+   * @covers ::getRawParameters
+   * @covers \Drupal\Core\Routing\RouteMatch::getParameterNames
+   * @dataProvider routeMatchProvider
+   */
+  public function testGetRawParameters(RouteMatchInterface $route_match, Route $route, $parameters, $expected_filtered_parameters) {
+    $this->assertSame($expected_filtered_parameters, $route_match->getRawParameters()->all());
+  }
+
+}