summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorAngie Byron <webchick@24967.no-reply.drupal.org>2008-10-09 02:49:36 +0000
committerAngie Byron <webchick@24967.no-reply.drupal.org>2008-10-09 02:49:36 +0000
commit0a6b178c96c0e1e4f3cc375f37899149bcb24ca1 (patch)
treefbcec2fef1960c47ec98a1732112f36e684a4f0f /modules
parent62401d60caabd4808101b0d2d1f0ba37ac840114 (diff)
downloadbrdo-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')
-rw-r--r--modules/simpletest/drupal_web_test_case.php32
-rw-r--r--modules/simpletest/simpletest.module45
2 files changed, 47 insertions, 30 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
diff --git a/modules/simpletest/simpletest.module b/modules/simpletest/simpletest.module
index 80f47f54e..8ef584ca4 100644
--- a/modules/simpletest/simpletest.module
+++ b/modules/simpletest/simpletest.module
@@ -191,7 +191,7 @@ function simpletest_test_form() {
'#value' => t('Clean environment'),
'#submit' => array('simpletest_clean_environment'),
);
-
+
return $form;
}
@@ -291,8 +291,6 @@ function _simpletest_format_summary_line($summary) {
* Run selected tests.
*/
function simpletest_test_form_submit($form, &$form_state) {
- $batch_mode = !preg_match("/^simpletest\d+$/", $_SERVER['HTTP_USER_AGENT']);
-
// Ensure that all classes are loaded before we create instances to get test information and run.
simpletest_get_all_tests();
@@ -304,10 +302,10 @@ function simpletest_test_form_submit($form, &$form_state) {
}
}
if (count($tests_list) > 0 ) {
- simpletest_run_tests($tests_list, 'drupal', $batch_mode);
+ simpletest_run_tests($tests_list, 'drupal');
}
else {
- drupal_set_message(t('No test has been selected.'), 'error');
+ drupal_set_message(t('No test(s) selected.'), 'error');
}
}
@@ -318,37 +316,24 @@ function simpletest_test_form_submit($form, &$form_state) {
* @param $reporter
* Which reporter to use. Allowed values are: text, xml, html and drupal,
* drupal being the default.
- * @param $batch_mode
- * Whether to use the batch API or not.
*/
-function simpletest_run_tests($test_list, $reporter = 'drupal', $batch_mode = FALSE) {
+function simpletest_run_tests($test_list, $reporter = 'drupal') {
global $db_prefix, $db_prefix_original;
cache_clear_all();
$test_id = db_insert('simpletest_test_id')->useDefaults(array('test_id'))->execute();
- if ($batch_mode) {
- $batch = array(
- 'title' => t('Running SimpleTests'),
- 'operations' => array(
- array('_simpletest_batch_operation', array($test_list, $test_id)
- ),
+ $batch = array(
+ 'title' => t('Running SimpleTests'),
+ 'operations' => array(
+ array('_simpletest_batch_operation', array($test_list, $test_id)),
),
- 'finished' => '_simpletest_batch_finished',
- 'redirect' => 'admin/build/testing',
- 'progress_message' => t('Processing tests.'),
- 'css' => array(drupal_get_path('module', 'simpletest') .'/simpletest.css'),
- 'init_message' => t('SimpleTest is initializing...') . ' ' . format_plural(count($test_list), "one test case will run.", "@count test cases will run."),
- );
- batch_set($batch);
- }
- else {
- simpletest_get_all_tests();
- foreach ($test_list as $test_class) {
- $test = new $test_class($test_id);
- $test->run();
- }
- $_SESSION['test_id'] = $test_id;
- }
+ 'finished' => '_simpletest_batch_finished',
+ 'redirect' => 'admin/build/testing',
+ 'progress_message' => t('Processing tests.'),
+ 'css' => array(drupal_get_path('module', 'simpletest') . '/simpletest.css'),
+ 'init_message' => t('SimpleTest is initializing...') . ' ' . format_plural(count($test_list), "one test case will run.", "@count test cases will run."),
+ );
+ batch_set($batch);
}
/**