Index: run-tests.sh =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/simpletest/Attic/run-tests.sh,v retrieving revision 1.1.2.5 diff -u -p -r1.1.2.5 run-tests.sh --- run-tests.sh 5 Sep 2009 13:34:10 -0000 1.1.2.5 +++ run-tests.sh 12 Oct 2009 13:43:54 -0000 @@ -98,8 +98,16 @@ simpletest_script_command($args['concurr list($last_prefix, $last_test_class) = simpletest_last_test_get($test_id); simpletest_log_read($test_id, $last_prefix, $last_test_class); -// Display results before database is cleared. -simpletest_script_reporter_display_results(); +if ($args['xml']) { + echo $args['xml']; + // Save results as xml before database is cleared. + simpletest_script_reporter_xml_results(); + +} +else { + // Display results before database is cleared. + simpletest_script_reporter_display_results(); +} // Cleanup our test results. simpletest_clean_results_table($test_id); @@ -149,6 +157,9 @@ All arguments are long options. --verbose Output detailed assertion messages in addition to summary. + --xml Output verbose test results to a specified directory using the JUnit + test reporting format. Useful for integrating with Hudson. + [,[, ...]] One or more tests to be run. By default, these are interpreted @@ -194,7 +205,8 @@ function simpletest_script_parse_args() 'test_names' => array(), // Used internally. 'test-id' => NULL, - 'execute-batch' => FALSE + 'execute-batch' => FALSE, + 'xml' => '', ); // Override with set values. @@ -274,7 +286,7 @@ function simpletest_script_init($server_ if (!empty($args['url'])) { $parsed_url = parse_url($args['url']); $host = $parsed_url['host'] . (isset($parsed_url['port']) ? ':' . $parsed_url['port'] : ''); - $path = $parsed_url['path']; + $path = isset($parsed_url['path']) ? $parsed_url['path'] : ''; } $_SERVER['HTTP_HOST'] = $host; @@ -482,6 +494,88 @@ function simpletest_script_reporter_init echo "\n"; } +/* + * Display test results. + */ +function simpletest_script_reporter_xml_results() { + global $args, $test_id, $results_map; + + echo "\n"; + $end = timer_stop('run-tests'); + echo "XML Test run duration: " . format_interval($end['time'] / 1000); + echo "\n"; + + //if ($args['verbose']) { + // Report results. + echo "Detailed test results:\n"; + echo "----------------------\n"; + echo "\n"; + + + $results_map = array( + 'pass' => 'Pass', + 'fail' => 'Fail', + 'exception' => 'Exception', + ); + + $results = db_query("SELECT * FROM {simpletest} WHERE test_id = %d ORDER BY test_class, message_id", $test_id); + + $test_class = ''; + $xml_files = array(); + + + while ($result = db_fetch_object($results)) { + if (isset($results_map[$result->status])) { + if ($result->test_class != $test_class) { + // Display test class every time results are for new test class. + if (isset($xml_files[$test_class])) { + file_put_contents($args['xml'] . '/' . $test_class . '.xml', $xml_files[$test_class]['doc']->saveXML()); + unset($xml_files[$test_class]); + } + $test_class = $result->test_class; + if (!isset($xml_files[$test_class])) { + $doc = new DomDocument('1.0'); + $root = $doc->createElement('testsuite'); + $root = $doc->appendChild($root); + $xml_files[$test_class] = array('doc' => $doc, 'suite' => $root); + } + } + // Save the result into the XML: + $case = $xml_files[$test_class]['doc']->createElement('testcase'); + $case->setAttribute('classname', $test_class); + list($class, $name) = explode('->', $result->function, 2); + $case->setAttribute('name', $name); + + if ($result->status == 'fail') { + $fail = $xml_files[$test_class]['doc']->createElement('failure'); + $fail->setAttribute('type', 'failure'); + $fail->setAttribute('message', $result->message_group); + $text = $xml_files[$test_class]['doc']->createTextNode($result->message); + $fail->appendChild($text); + $case->appendChild($fail); + } + + + + + $xml_files[$test_class]['suite']->appendChild($case); + + //simpletest_script_format_result($result); + } + } + + // Save the last one: + if (isset($xml_files[$test_class])) { + file_put_contents($args['xml'] . '/' . $test_class . '.xml', $xml_files[$test_class]['doc']->saveXML()); + unset($xml_files[$test_class]); + } + + + + + //} +} + /** * Display test results. */ @@ -588,3 +682,4 @@ function simpletest_script_color_code($s } return 0; // Default formatting. } +