diff options
author | Dries Buytaert <dries@buytaert.net> | 2010-07-31 04:10:30 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2010-07-31 04:10:30 +0000 |
commit | a94519077bae9c7a38c20cd8d46dc76805110ad1 (patch) | |
tree | dba8f8bb0fd37512bc7e6f60b59afdb9242a2e5c | |
parent | 699afdd1be4b8034c36474c7191972604bf5f54e (diff) | |
download | brdo-a94519077bae9c7a38c20cd8d46dc76805110ad1.tar.gz brdo-a94519077bae9c7a38c20cd8d46dc76805110ad1.tar.bz2 |
- Patch #829968 by andypost, AlexisWilke: drupal_lookup_path() documentation and return mismatch.
-rw-r--r-- | includes/path.inc | 3 | ||||
-rw-r--r-- | modules/path/path.test | 16 |
2 files changed, 18 insertions, 1 deletions
diff --git a/includes/path.inc b/includes/path.inc index e2c3c9095..ac78b0a74 100644 --- a/includes/path.inc +++ b/includes/path.inc @@ -131,6 +131,7 @@ function drupal_lookup_path($action, $path = '', $path_language = NULL) { // isn't a path that has this alias elseif ($action == 'source' && !isset($cache['no_source'][$path_language][$path])) { // Look for the value $path within the cached $map + $source = FALSE; if (!isset($cache['map'][$path_language]) || !($source = array_search($path, $cache['map'][$path_language]))) { // Get the most fitting result falling back with alias without language if ($source = db_query("SELECT source FROM {url_alias} WHERE alias = :alias AND language IN (:language, :language_none) ORDER BY language DESC, pid DESC", array( @@ -139,7 +140,6 @@ function drupal_lookup_path($action, $path = '', $path_language = NULL) { ':language_none' => LANGUAGE_NONE)) ->fetchField()) { $cache['map'][$path_language][$source] = $path; - return $source; } else { // We can't record anything into $map because we do not have a valid @@ -148,6 +148,7 @@ function drupal_lookup_path($action, $path = '', $path_language = NULL) { $cache['no_source'][$path_language][$path] = TRUE; } } + return $source; } } diff --git a/modules/path/path.test b/modules/path/path.test index a777871ca..6584eda6b 100644 --- a/modules/path/path.test +++ b/modules/path/path.test @@ -346,6 +346,22 @@ class PathLanguageTestCase extends DrupalWebTestCase { // should keep working. $this->drupalGet($french_alias); $this->assertResponse(404, t('Alias for French translation is unavailable when URL language negotiation is disabled.')); + + // drupal_lookup_path() has an internal static cache. Check to see that + // it has the appropriate contents at this point. + drupal_lookup_path('wipe'); + $french_node_path = drupal_lookup_path('source', $french_alias, $french_node->language); + $this->assertEqual($french_node_path, 'node/' . $french_node->nid, t('Normal path works.')); + // Second call should return the same path. + $french_node_path = drupal_lookup_path('source', $french_alias, $french_node->language); + $this->assertEqual($french_node_path, 'node/' . $french_node->nid, t('Normal path is the same.')); + + // Confirm that the alias works. + $french_node_alias = drupal_lookup_path('alias', 'node/' . $french_node->nid, $french_node->language); + $this->assertEqual($french_node_alias, $french_alias, t('Alias works.')); + // Second call should return the same alias. + $french_node_alias = drupal_lookup_path('alias', 'node/' . $french_node->nid, $french_node->language); + $this->assertEqual($french_node_alias, $french_alias, t('Alias is the same.')); } } |