diff options
author | Angie Byron <webchick@24967.no-reply.drupal.org> | 2008-10-09 02:49:36 +0000 |
---|---|---|
committer | Angie Byron <webchick@24967.no-reply.drupal.org> | 2008-10-09 02:49:36 +0000 |
commit | 0a6b178c96c0e1e4f3cc375f37899149bcb24ca1 (patch) | |
tree | fbcec2fef1960c47ec98a1732112f36e684a4f0f /modules/simpletest/drupal_web_test_case.php | |
parent | 62401d60caabd4808101b0d2d1f0ba37ac840114 (diff) | |
download | brdo-0a6b178c96c0e1e4f3cc375f37899149bcb24ca1.tar.gz brdo-0a6b178c96c0e1e4f3cc375f37899149bcb24ca1.tar.bz2 |
#316344 by boombatower: Add meta refresh support to SimpleTest to allow programmatically dealing with Batch API and such.
Diffstat (limited to 'modules/simpletest/drupal_web_test_case.php')
-rw-r--r-- | modules/simpletest/drupal_web_test_case.php | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/modules/simpletest/drupal_web_test_case.php b/modules/simpletest/drupal_web_test_case.php index 7b6eca355..332cbcc7c 100644 --- a/modules/simpletest/drupal_web_test_case.php +++ b/modules/simpletest/drupal_web_test_case.php @@ -877,6 +877,11 @@ class DrupalWebTestCase { // previous options. $out = $this->curlExec(array(CURLOPT_HTTPGET => TRUE, CURLOPT_URL => url($path, $options), CURLOPT_HEADER => FALSE, CURLOPT_NOBODY => FALSE)); $this->refreshVariables(); // Ensure that any changes to variables in the other thread are picked up. + + // Replace original page output with new output from redirected page(s). + if (($new = $this->checkForMetaRefresh())) { + $out = $new; + } return $out; } @@ -952,6 +957,11 @@ class DrupalWebTestCase { $out = $this->curlExec(array(CURLOPT_URL => $action, CURLOPT_POST => TRUE, CURLOPT_POSTFIELDS => $post, CURLOPT_HEADER => FALSE)); // Ensure that any changes to variables in the other thread are picked up. $this->refreshVariables(); + + // Replace original page output with new output from redirected page(s). + if (($new = $this->checkForMetaRefresh())) { + $out = $new; + } return $out; } } @@ -965,6 +975,28 @@ class DrupalWebTestCase { } /** + * Check for meta refresh tag and if found call drupalGet() recursively. This + * function looks for the http-equiv attribute to be set to "Refresh" + * and is case-sensitive. + * + * @return + * Either the new page content or FALSE. + */ + private function checkForMetaRefresh() { + if ($this->drupalGetContent() != '' && $this->parse()) { + $refresh = $this->xpath('//meta[@http-equiv="Refresh"]'); + if (!empty($refresh)) { + // Parse the content attribute of the meta tag for the format: + // "[delay]: URL=[page_to_redirect_to]". + if (preg_match('/\d+;\s*URL=(?P<url>.*)/i', $refresh[0]['content'], $match)) { + return $this->drupalGet($this->getAbsoluteUrl(decode_entities($match['url']))); + } + } + } + return FALSE; + } + + /** * Retrieves only the headers for a Drupal path or an absolute path. * * @param $path |