diff options
author | Angie Byron <webchick@24967.no-reply.drupal.org> | 2009-09-11 02:19:02 +0000 |
---|---|---|
committer | Angie Byron <webchick@24967.no-reply.drupal.org> | 2009-09-11 02:19:02 +0000 |
commit | f24f709e0f7d59643ca076fb00066e93fc81da01 (patch) | |
tree | e5f845e9483cd756d26bf95a1d6771aacb2a6613 /modules/simpletest/tests/path.test | |
parent | f018eb16bfed09aee89c938e704e516c5822be25 (diff) | |
download | brdo-f24f709e0f7d59643ca076fb00066e93fc81da01.tar.gz brdo-f24f709e0f7d59643ca076fb00066e93fc81da01.tar.bz2 |
#293496 by kathyh and cwgordon7: Added tests for drupal_match_path().
Diffstat (limited to 'modules/simpletest/tests/path.test')
-rw-r--r-- | modules/simpletest/tests/path.test | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/modules/simpletest/tests/path.test b/modules/simpletest/tests/path.test new file mode 100644 index 000000000..f76ea4089 --- /dev/null +++ b/modules/simpletest/tests/path.test @@ -0,0 +1,128 @@ +<?php +// $Id$ + +/** + * @file + * Tests for path.inc. + */ + +/** + * Unit tests for the drupal_match_path() function in path.inc. + * + * @see drupal_match_path(). + */ +class DrupalMatchPathTestCase extends DrupalWebTestCase { + protected $front; + + public static function getInfo() { + return array( + 'name' => '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 '<front>' 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 <code>@path</code> to the pattern <pre>@patterns</pre> - 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 '<front>'. + '<front>' => array( + $this->front => TRUE, + "$this->front/" => FALSE, + "$this->front/edit" => FALSE, + 'node' => FALSE, + '' => FALSE, + ), + // Paths with both '<front>' and wildcards (should not work). + '<front>/*' => 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<front>" => array( + 'test' => TRUE, + $this->front => TRUE, + 'example' => FALSE, + ), + // Test existing regular expressions (should be escaped). + '[^/]+?/[0-9]' => array( + 'test/1' => FALSE, + '[^/]+?/[0-9]' => TRUE, + ), + ); + } +} |