Commit 0a6b178c authored by webchick's avatar webchick

#316344 by boombatower: Add meta refresh support to SimpleTest to allow...

#316344 by boombatower: Add meta refresh support to SimpleTest to allow programmatically dealing with Batch API and such.
parent 62401d60
......@@ -877,6 +877,11 @@ function drupalGet($path, $options = array()) {
// 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 @@ function drupalPost($path, $edit, $submit, $options = array()) {
$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;
}
}
......@@ -964,6 +974,28 @@ function drupalPost($path, $edit, $submit, $options = array()) {
}
}
/**
* 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.
*
......
......@@ -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);
}
/**
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment