summaryrefslogtreecommitdiff
path: root/scripts/run-tests.sh
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2008-06-24 21:59:20 +0000
committerDries Buytaert <dries@buytaert.net>2008-06-24 21:59:20 +0000
commit5efec92ac3979fe36e9fdc2093e060fe5648be59 (patch)
treee30f299c7e307d6e9090f2a46952b503e569296c /scripts/run-tests.sh
parent9b82787b223185ca835aba9f34f300837fcebb85 (diff)
downloadbrdo-5efec92ac3979fe36e9fdc2093e060fe5648be59.tar.gz
brdo-5efec92ac3979fe36e9fdc2093e060fe5648be59.tar.bz2
- Patch #243773 by chx, catch, boombatower, cwgordon7, yched, dmitrig01, et al: small revert of batch API patch. Also forgot to mention cwgordon7 in the previous commit.
Diffstat (limited to 'scripts/run-tests.sh')
-rwxr-xr-xscripts/run-tests.sh110
1 files changed, 75 insertions, 35 deletions
diff --git a/scripts/run-tests.sh b/scripts/run-tests.sh
index 996c50ff3..9b9786a33 100755
--- a/scripts/run-tests.sh
+++ b/scripts/run-tests.sh
@@ -37,6 +37,9 @@ All arguments are long options.
need this parameter if Drupal is in a subdirectory on your
localhost and you have not set \$base_url in settings.php.
+ --reporter Immediatly preceeds the name of the output reporter to use. This
+ Defaults to "text", while other options include "xml" and "html".
+
--all Run all available tests.
--class Run tests identified by speficic class names.
@@ -64,7 +67,6 @@ $list = FALSE;
$clean = FALSE;
$all = FALSE;
$class_names = FALSE;
-$verbose = FALSE;
$test_names = array();
while ($param = array_shift($_SERVER['argv'])) {
@@ -87,6 +89,12 @@ while ($param = array_shift($_SERVER['argv'])) {
case '--clean':
$clean = TRUE;
break;
+ case '--reporter':
+ $reporter = array_shift($_SERVER['argv']);
+ if (!in_array($reporter, array("text", "xml", "html"))) {
+ $reporter = "text";
+ }
+ break;
default:
$test_names += explode(',', $param);
break;
@@ -108,7 +116,8 @@ require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
if (!module_exists('simpletest')) {
- die(t('Error: The simpletest module must be enabled before this script can run.') ."\n");
+ echo("ERROR: The simpletest module must be enabled before this script can run.\n");
+ exit;
}
if ($clean) {
@@ -122,28 +131,34 @@ if ($clean) {
exit;
}
-$tests = simpletest_get_all_tests();
-$test_list = array();
+// Run tests as user #1.
+$GLOBALS['user'] = user_load(1);
-if ($all) {
- $test_list = $tests;
-}
-else if ($class_names) {
- foreach ($test_names as $test) {
- if (isset($tests[$test])) {
- $test_list[$test] = $tests[$test];
- }
+//Load simpletest files
+$total_test = &simpletest_get_total_test();
+
+$test_instances = $total_test->getTestInstances();
+
+if ($list) {
+ // Display all availabe tests.
+ echo("Available test groups:\n----------------------\n");
+ foreach ($test_instances as $group_test) {
+ echo($group_test->getLabel() . "\n");
}
+ exit;
+}
+
+if ($all) {
+ $test_list = NULL;
}
else {
- $groups = simpletest_categorize_tests($tests);
- foreach ($test_names as $test) {
- if (isset($groups[$test])) {
- $test_list += $groups[$test];
- }
+ if ($class_names) {
+ $test_list = _run_tests_check_classes($test_names, $test_instances);
+ }
+ else {
+ $test_list = _run_tests_find_classes($test_names, $test_instances);
}
}
-
if (empty($test_list) && !$all) {
echo("ERROR: No valid tests were specified.\n");
exit;
@@ -156,30 +171,55 @@ if (!ini_get('safe_mode')) {
}
// Tell the user about what tests are to be run.
-if (!$all) {
+if (!$all && $reporter == 'text') {
echo("Tests to be run:\n");
- foreach ($test_list as $instance) {
- $info = $instance->getInfo();
- echo("- " . $info['name'] . "\n");
+ foreach ($test_list as $name) {
+ echo("- " . $name . "\n");
}
echo("\n");
}
-db_query('INSERT INTO {simpletest_test_id} VALUES (default)');
-$test_id = db_last_insert_id('simpletest_test_id', 'test_id');
+simpletest_run_tests(array_keys($test_list), $reporter);
-$test_results = array('#pass' => 0, '#fail' => 0, '#exception' => 0);
-
-foreach ($test_list as $class => $instance) {
- $instance = new $class($test_id);
- $instance->run();
- $info = $instance->getInfo();
- $test_results[$class] = $instance->_results;
- foreach ($test_results[$class] as $key => $value) {
- $test_results[$key] += $value;
+// Utility functions:
+/**
+ * Check that each class name exists as a test, return the list of valid ones.
+ */
+function _run_tests_check_classes($test_names, $test_instances) {
+ $test_list = array();
+ $test_names = array_flip($test_names);
+
+ foreach ($test_instances as $group_test) {
+ $tests = $group_test->getTestInstances();
+ foreach ($tests as $test) {
+ $class = get_class($test);
+ $info = $test->getInfo();
+ if (isset($test_names[$class])) {
+ $test_list[$class] = $info['name'];
+ }
+ }
}
- echo(t('@name: @summary', array('@name' => $info['name'], '@summary' => _simpletest_format_summary_line($test_results[$class]))) . "\n");
+ return $test_list;
}
-echo(_simpletest_format_summary_line($test_results) . "\n");
+/**
+ * Check that each group name exists, return the list of class in valid groups.
+ */
+function _run_tests_find_classes($test_names, &$test_instances) {
+ $test_list = array();
+ $test_names = array_flip($test_names);
+
+ uasort($test_instances, 'simpletest_compare_instances');
+ foreach ($test_instances as $group_test) {
+ $group = $group_test->getLabel();
+ if (isset($test_names[$group])) {
+ $tests = $group_test->getTestInstances();
+ foreach ($tests as $test) {
+ $info = $test->getInfo();
+ $test_list[get_class($test)] = $info['name'];
+ }
+ }
+ }
+ return $test_list;
+}