From f24f709e0f7d59643ca076fb00066e93fc81da01 Mon Sep 17 00:00:00 2001 From: Angie Byron Date: Fri, 11 Sep 2009 02:19:02 +0000 Subject: [PATCH] #293496 by kathyh and cwgordon7: Added tests for drupal_match_path(). --- modules/simpletest/simpletest.info | 1 + modules/simpletest/tests/path.test | 128 +++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 modules/simpletest/tests/path.test diff --git a/modules/simpletest/simpletest.info b/modules/simpletest/simpletest.info index ad42f17c4da..ff646b303fd 100644 --- a/modules/simpletest/simpletest.info +++ b/modules/simpletest/simpletest.info @@ -28,6 +28,7 @@ files[] = tests/lock.test files[] = tests/mail.test files[] = tests/menu.test files[] = tests/module.test +files[] = tests/path.test files[] = tests/registry.test files[] = tests/schema.test files[] = tests/session.test diff --git a/modules/simpletest/tests/path.test b/modules/simpletest/tests/path.test new file mode 100644 index 00000000000..f76ea4089c4 --- /dev/null +++ b/modules/simpletest/tests/path.test @@ -0,0 +1,128 @@ + '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, + ), + ); + } +}