getConfigFactoryStub( [ 'system.site' => [ 'page.front' => '/dummy', ], ] ); $route_match = $this->getMock('Drupal\Core\Routing\RouteMatchInterface'); $this->pathMatcher = new PathMatcher($config_factory_stub, $route_match); } /** * Test that standard paths works with multiple patterns. * * @dataProvider getMatchPathData */ public function testMatchPath($patterns, $paths) { foreach ($paths as $path => $expected_result) { $actual_result = $this->pathMatcher->matchPath($path, $patterns); $this->assertEquals($actual_result, $expected_result, "Tried matching the path '$path' to the pattern '$patterns'."); } } /** * Provides test path data. * * @return array * A nested array of pattern arrays and path arrays. */ public function getMatchPathData() { return [ [ // Single absolute paths. '/example/1', [ '/example/1' => TRUE, '/example/2' => FALSE, '/test' => FALSE, ], ], [ // Single paths with wildcards. '/example/*', [ '/example/1' => TRUE, '/example/2' => TRUE, '/example/3/edit' => TRUE, '/example/' => TRUE, '/example' => FALSE, '/test' => FALSE, ], ], [ // Single paths with multiple wildcards. '/node/*/revisions/*', [ '/node/1/revisions/3' => TRUE, '/node/345/revisions/test' => TRUE, '/node/23/edit' => FALSE, '/test' => FALSE, ], ], [ // Single paths with ''. "", [ '/dummy' => TRUE, "/dummy/" => FALSE, "/dummy/edit" => FALSE, '/node' => FALSE, '' => FALSE, ], ], [ // Paths with both '' and wildcards (should not work). "/*", [ '/dummy' => FALSE, '/dummy/' => FALSE, '/dummy/edit' => FALSE, '/node/12' => FALSE, '/' => FALSE, ], ], [ // Multiple paths with the \n delimiter. "/node/*\n/node/*/edit", [ '/node/1' => TRUE, '/node/view' => TRUE, '/node/32/edit' => TRUE, '/node/delete/edit' => TRUE, '/node/50/delete' => TRUE, '/test/example' => FALSE, ], ], [ // Multiple paths with the \r delimiter. "/user/*\r/example/*", [ '/user/1' => TRUE, '/example/1' => TRUE, '/user/1/example/1' => TRUE, '/user/example' => TRUE, '/test/example' => FALSE, '/user' => FALSE, '/example' => FALSE, ], ], [ // Multiple paths with the \r\n delimiter. "/test\r\n", [ '/test' => TRUE, '/dummy' => TRUE, '/example' => FALSE, ], ], [ // Test existing regular expressions (should be escaped). '[^/]+?/[0-9]', [ '/test/1' => FALSE, '[^/]+?/[0-9]' => TRUE, ], ], ]; } }