summaryrefslogtreecommitdiff
path: root/modules/simpletest
diff options
context:
space:
mode:
Diffstat (limited to 'modules/simpletest')
-rw-r--r--modules/simpletest/drupal_web_test_case.php44
-rw-r--r--modules/simpletest/simpletest.test6
2 files changed, 18 insertions, 32 deletions
diff --git a/modules/simpletest/drupal_web_test_case.php b/modules/simpletest/drupal_web_test_case.php
index 37c5964bc..ca7502fb7 100644
--- a/modules/simpletest/drupal_web_test_case.php
+++ b/modules/simpletest/drupal_web_test_case.php
@@ -1789,42 +1789,28 @@ class DrupalWebTestCase extends DrupalTestCase {
* Takes a path and returns an absolute path.
*
* @param $path
- * The path, can be a Drupal path or a site-relative path. It might have a
- * query, too. Can even be an absolute path which is just passed through.
+ * A path from the internal browser content.
* @return
- * An absolute path.
- *
- * @todo What is the intention of this function? It is only invoked from
- * locations, where URLs from the *output* are turned into absolute URLs,
- * so why do we pass that through url() again?
+ * The $path with $base_url prepended, if necessary.
*/
protected function getAbsoluteUrl($path) {
+ global $base_url, $base_path;
+
$parts = parse_url($path);
- // This is more crude than menu_path_is_external() but enough here.
if (empty($parts['host'])) {
- $options = array('absolute' => TRUE);
- $path = $parts['path'];
- $base_path = base_path();
- $n = strlen($base_path);
- if (substr($path, 0, $n) == $base_path) {
- $path = substr($path, $n);
+ // Ensure that we have a string (and no xpath object).
+ $path = (string) $path;
+ // Strip $base_path, if existent.
+ $length = strlen($base_path);
+ if (substr($path, 0, $length) === $base_path) {
+ $path = substr($path, $length);
}
- if (isset($parts['query'])) {
- parse_str($parts['query'], $options['query']);
- // Let's make it a bit more crude. It's not clear why we invoke url() on
- // a URL contained in the returned page output again, but since $path is
- // FALSE (see $path = $parts['path'] above) with Clean URLs disabled,
- // and url() now encodes the passed in query parameter array, we get a
- // double-encoded 'q' query string in the resulting absolute URL
- // generated by url(). This cannot be avoided in url(). But it could be
- // completely avoided if this function wouldn't be calling url().
- // @see SimpleTestURLTestCase->testGetAbsoluteUrl()
- if (isset($options['query']['q'])) {
- $path = $options['query']['q'];
- unset($options['query']['q']);
- }
+ // Ensure that we have an absolute path.
+ if ($path[0] !== '/') {
+ $path = '/' . $path;
}
- $path = url($path, $options);
+ // Finally, prepend the $base_url.
+ $path = $base_url . $path;
}
return $path;
}
diff --git a/modules/simpletest/simpletest.test b/modules/simpletest/simpletest.test
index 31046392c..a26216a6e 100644
--- a/modules/simpletest/simpletest.test
+++ b/modules/simpletest/simpletest.test
@@ -293,17 +293,17 @@ class SimpleTestURLTestCase extends DrupalWebTestCase {
$this->drupalGet($url);
$absolute = url($url, array('absolute' => TRUE));
$this->assertEqual($absolute, $this->url, t('Passed and requested URL are equal.'));
- $this->assertEqual($this->url, $this->getAbsoluteUrl($url), t('Requested and returned absolute URL are equal.'));
+ $this->assertEqual($this->url, $this->getAbsoluteUrl($this->url), t('Requested and returned absolute URL are equal.'));
$this->drupalPost(NULL, array(), t('Log in'));
$this->assertEqual($absolute, $this->url, t('Passed and requested URL are equal.'));
- $this->assertEqual($this->url, $this->getAbsoluteUrl($url), t('Requested and returned absolute URL are equal.'));
+ $this->assertEqual($this->url, $this->getAbsoluteUrl($this->url), t('Requested and returned absolute URL are equal.'));
$this->clickLink('Create new account');
$url = 'user/register';
$absolute = url($url, array('absolute' => TRUE));
$this->assertEqual($absolute, $this->url, t('Passed and requested URL are equal.'));
- $this->assertEqual($this->url, $this->getAbsoluteUrl($url), t('Requested and returned absolute URL are equal.'));
+ $this->assertEqual($this->url, $this->getAbsoluteUrl($this->url), t('Requested and returned absolute URL are equal.'));
}
}