'Drupal match path', 'description' => 'Tests the drupal_match_path() function to make sure it works properly.', 'group' => 'Path API', ); } function setUp() { // Set up the database and testing environment. parent::setUp(); // Set up a random site front page to test the '' placeholder. $this->front = $this->randomName(); variable_set('site_frontpage', $this->front); // Refresh our static variables from the database. $this->refreshVariables(); } /** * Run through our test cases, making sure each one works as expected. */ function testDrupalMatchPath() { // Set up our test cases. $tests = $this->drupalMatchPathTests(); foreach ($tests as $patterns => $cases) { foreach ($cases as $path => $expected_result) { $actual_result = drupal_match_path($path, $patterns); $this->assertIdentical($actual_result, $expected_result, t('Tried matching the path @path to the pattern
@patterns
- expected @expected, got @actual.', array('@path' => $path, '@patterns' => $patterns, '@expected' => var_export($expected_result, TRUE), '@actual' => var_export($actual_result, TRUE)))); } } } /** * Helper function for testDrupalMatchPath(): set up an array of test cases. * * @return * An array of test cases to cycle through. */ private function drupalMatchPathTests() { return array( // Single absolute paths. 'blog/1' => array( 'blog/1' => TRUE, 'blog/2' => FALSE, 'test' => FALSE, ), // Single paths with wildcards. 'blog/*' => array( 'blog/1' => TRUE, 'blog/2' => TRUE, 'blog/3/edit' => TRUE, 'blog/' => TRUE, 'blog' => FALSE, 'test' => FALSE, ), // Single paths with multiple wildcards. 'node/*/revisions/*' => array( 'node/1/revisions/3' => TRUE, 'node/345/revisions/test' => TRUE, 'node/23/edit' => FALSE, 'test' => FALSE, ), // Single paths with ''. '' => array( $this->front => TRUE, "$this->front/" => FALSE, "$this->front/edit" => FALSE, 'node' => FALSE, '' => FALSE, ), // Paths with both '' and wildcards (should not work). '/*' => array( $this->front => FALSE, "$this->front/" => FALSE, "$this->front/edit" => FALSE, 'node/12' => FALSE, '' => FALSE, ), // Multiple paths with the \n delimiter. "node/*\nnode/*/edit" => array( '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/*\rblog/*" => array( 'user/1' => TRUE, 'blog/1' => TRUE, 'user/1/blog/1' => TRUE, 'user/blog' => TRUE, 'test/example' => FALSE, 'user' => FALSE, 'blog' => FALSE, ), // Multiple paths with the \r\n delimiter. "test\r\n" => array( 'test' => TRUE, $this->front => TRUE, 'example' => FALSE, ), // Test existing regular expressions (should be escaped). '[^/]+?/[0-9]' => array( 'test/1' => FALSE, '[^/]+?/[0-9]' => TRUE, ), ); } }