diff options
author | Marcus Boerger <helly@php.net> | 2005-12-07 00:03:46 +0000 |
---|---|---|
committer | Marcus Boerger <helly@php.net> | 2005-12-07 00:03:46 +0000 |
commit | 8c8907458c6fce73b4ff3e09b98a1a0ea3d6bf92 (patch) | |
tree | 03ace664c22e0f1cad768eb74e2cf27eef9cf5f7 /run-tests.php | |
parent | 481ec28566e8ec04dd706c84db1f30d39869116a (diff) | |
download | php-git-8c8907458c6fce73b4ff3e09b98a1a0ea3d6bf92.tar.gz |
- MFH
. Support for '--' style switches
. Modularize output
. Better valgrind integration (valgrind 3.0.0+ required now) (-m)
. Ability to generate an additional html style output log (--html)
. Ability to test unicode + native tests in one go (-U)
. Show list of leaked files in summary if any
. Use basename correct
Diffstat (limited to 'run-tests.php')
-rwxr-xr-x | run-tests.php | 517 |
1 files changed, 367 insertions, 150 deletions
diff --git a/run-tests.php b/run-tests.php index 5e2b0f9d51..ca3fbd2d31 100755 --- a/run-tests.php +++ b/run-tests.php @@ -25,11 +25,6 @@ /* $Id$ */ -/* - * TODO: - * - do not test PEAR components if base class and/or component class cannot be instanciated - */ - /* Sanity check to ensure that pcre extension needed by this script is available. * In the event it is not, print a nice error message indicating that this script will * not run without it. @@ -164,7 +159,7 @@ $ini_overwrites = array( 'magic_quotes_runtime=0', ); -function write_information() +function write_information($show_html) { global $cwd, $php, $php_info, $user_tests, $ini_overwrites, $pass_options; @@ -221,16 +216,41 @@ Extra dirs : "; $test_files = array(); $redir_tests = array(); $test_results = array(); -$PHP_FAILED_TESTS = array('BORKED' => array(), 'FAILED' => array()); +$PHP_FAILED_TESTS = array('BORKED' => array(), 'FAILED' => array(), 'WARNED' => array(), 'LEAKED' => array()); // If parameters given assume they represent selected tests to run. $failed_tests_file= false; $pass_option_n = false; $pass_options = ''; + +$compression = 0; +$output_file = $CUR_DIR . '/php_test_results_' . date('Ymd_Hi') . ( $compression ? '.txt.gz' : '.txt' ); +$just_save_results = false; +$leak_check = false; +$html_output = false; +$html_file = null; + +if (getenv('TEST_PHP_ARGS')) +{ + if (!isset($argc) || !$argc || !isset($argv)) + { + $argv = array(__FILE__); + } + $argv = array_merge($argv, split(' ', getenv('TEST_PHP_ARGS'))); + $argc = count($argv); +} + if (isset($argc) && $argc > 1) { for ($i=1; $i<$argc; $i++) { - if (substr($argv[$i],0,1) == '-') { - $switch = strtolower(substr($argv[$i],1,1)); + $is_switch = false; + $switch = substr($argv[$i],1,1); + $repeat = substr($argv[$i],0,1) == '-'; + while ($repeat) { + $repeat = false; + if (!$is_switch) { + $switch = substr($argv[$i],1,1); + } + $is_switch = true; switch($switch) { case 'r': case 'l': @@ -256,8 +276,13 @@ if (isset($argc) && $argc > 1) { case 'a': $failed_tests_file = fopen($argv[++$i], 'a+t'); break; - case 'v': - $DETAILED = true; + case 'd': + $ini_overwrites[] = $argv[++$i]; + break; + //case 'h' + //case 'l' + case 'm': + $leak_check = true; break; case 'n': if (!$pass_option_n) { @@ -265,14 +290,39 @@ if (isset($argc) && $argc > 1) { } $pass_option_n = true; break; - case 'd': - $ini_overwrites[] = $argv[++$i]; + case 'q': + putenv('NO_INTERACTION=1'); + break; + //case 'r' + case 's': + $output_file = $argv[++$i]; + $just_save_results = true; break; + case 'v': + case '--verbose': + $DETAILED = true; + break; + //case 'w' + case '-': + // repeat check with full switch + $switch = $argv[$i]; + if ($switch != '-') { + $repeat = true; + } + break; + case '--html': + $html_file = @fopen($argv[++$i], 'wt'); + $html_output = is_resource($html_file); + break; + case '--version': + echo "$Id$\n"; + exit(1); default: echo "Illegal switch specified!\n"; - case "h": - case "help": - case "-help": + //break + case 'h': + case '-help': + case '--help': echo <<<HELP Synopsis: php run-tests.php [options] [files] [directories] @@ -294,14 +344,25 @@ Options: -d foo=bar Pass -d option to the php binary (Define INI entry foo with value 'bar'). + -m Test for memory leaks with Valgrind. + + -s <file> Write output to <file>. + + -q Quite, no user interaction (same as environment NO_INTERACTION). + + --verbose -v Verbose mode. - -h <file> This Help. + --help + -h This Help. + + --html Generate HTML output. HELP; exit(1); } - } else { + } + if (!$is_switch) { $testfile = realpath($argv[$i]); if (is_dir($testfile)) { find_files($testfile); @@ -318,21 +379,33 @@ HELP; // Run selected tests. $test_cnt = count($test_files); if ($test_cnt) { - write_information(); + write_information($html_output); usort($test_files, "test_sort"); - echo "Running selected tests.\n"; $start_time = time(); + if (!$html_output) { + echo "Running selected tests.\n"; + } else { + show_start($start_time); + } $test_idx = 0; run_all_tests($test_files); $end_time = time(); + if ($html_output) { + show_end($end_time); + } if ($failed_tests_file) { fclose($failed_tests_file); } if (count($test_files) || count($test_results)) { - echo " -====================================================================="; compute_summary(); - echo get_summary(false); + if ($html_output) { + fwrite($html_file, "<hr/>\n" . get_summary(false, true)); + } + echo "====================================================================="; + echo get_summary(false, false); + } + if ($html_output) { + fclose($html_file); } if (getenv('REPORT_EXIT_STATUS') == 1 and ereg('FAILED( |$)', implode(' ', $test_results))) { exit(1); @@ -341,7 +414,7 @@ HELP; } } -write_information(); +write_information($html_output); // Compile a list of all test files (*.phpt). $test_files = array(); @@ -351,7 +424,7 @@ $exts_skipped = 0; $ignored_by_ext = 0; sort($exts_to_test); $test_dirs = array('tests', 'ext'); -$optionals = array('pear', 'Zend', 'ZendEngine2'); +$optionals = array('Zend', 'ZendEngine2'); foreach($optionals as $dir) { if (@filetype($dir) == 'dir') { $test_dirs[] = $dir; @@ -433,10 +506,7 @@ $test_files = array_unique($test_files); usort($test_files, "test_sort"); $start_time = time(); - -echo "TIME START " . date('Y-m-d H:i:s', $start_time) . " -===================================================================== -"; +show_start($start_time); $test_cnt = count($test_files); $test_idx = 0; @@ -455,12 +525,12 @@ if (0 == count($test_results)) { compute_summary(); -echo " -===================================================================== -TIME END " . date('Y-m-d H:i:s', $end_time); +show_end($end_time); +show_summary(); -$summary = get_summary(true); -echo $summary; +if ($html_output) { + fclose($html_file); +} define('PHP_QA_EMAIL', 'qa-reports@lists.php.net'); define('QA_SUBMISSION_PAGE', 'http://qa.php.net/buildtest-process.php'); @@ -475,7 +545,8 @@ if (!getenv('NO_INTERACTION')) { flush(); $user_input = fgets($fp, 10); $just_save_results = (strtolower($user_input[0]) == 's'); - +} +if ($just_save_results || !getenv('NO_INTERACTION')) { if ($just_save_results || strlen(trim($user_input)) == 0 || strtolower($user_input[0]) == 'y') { /* * Collect information about the host system for our report @@ -483,7 +554,10 @@ if (!getenv('NO_INTERACTION')) { * Make an archive of all the failed tests * Send an email */ - + if ($just_save_results) + { + $user_input = 's'; + } /* Ask the user to provide an email address, so that QA team can contact the user */ if (!strncasecmp($user_input, 'y', 1) || strlen(trim($user_input)) == 0) { echo "\nPlease enter your email address.\n(Your address will be mangled so that it will not go out on any\nmailinglist in plain text): "; @@ -496,7 +570,7 @@ if (!getenv('NO_INTERACTION')) { $sep = "\n" . str_repeat('=', 80) . "\n"; $failed_tests_data .= $failed_test_summary . "\n"; - $failed_tests_data .= $summary . "\n"; + $failed_tests_data .= get_summary(true, false) . "\n"; if ($sum_results['FAILED']) { foreach ($PHP_FAILED_TESTS['FAILED'] as $test_info) { @@ -556,10 +630,7 @@ if (!getenv('NO_INTERACTION')) { $failed_tests_data .= $sep . "PHPINFO" . $sep; $failed_tests_data .= shell_exec($php.' -dhtml_errors=0 -i'); - $compression = 0; - if ($just_save_results || !mail_qa_team($failed_tests_data, $compression, $status)) { - $output_file = $CUR_DIR . '/php_test_results_' . date('Ymd_Hi') . ( $compression ? '.txt.gz' : '.txt' ); file_put_contents($output_file, $failed_tests_data); if (!$just_save_results) { @@ -577,6 +648,7 @@ if (!getenv('NO_INTERACTION')) { if (getenv('REPORT_EXIT_STATUS') == 1 and $sum_results['FAILED']) { exit(1); } +exit(0); // // Send Email to QA Team @@ -695,14 +767,18 @@ function run_all_tests($test_files, $redir_tested = NULL) { global $test_results, $failed_tests_file, $php, $test_cnt, $test_idx; - foreach($test_files AS $name) { + foreach($test_files AS $name) + { $index = is_array($name) ? $name[0] : $name; $test_idx++; - $result = run_test($php,$name); - if (!is_array($name) && $result != 'REDIR') { + $result = run_test($php, $name); + if (!is_array($name) && $result != 'REDIR') + { $test_results[$index] = $result; - if ($failed_tests_file && ($result == 'FAILED' || $result == 'WARNED')) { - if ($redir_tested) { + if ($failed_tests_file && ($result == 'FAILED' || $result == 'WARNED' || $result == 'LEAKED')) + { + if ($redir_tested) + { fwrite($failed_tests_file, "# $redir_tested: $name\n"); } else { fwrite($failed_tests_file, "$name\n"); @@ -715,10 +791,9 @@ function run_all_tests($test_files, $redir_tested = NULL) // // Run an individual test case. // - function run_test($php, $file) { - global $log_format, $info_params, $ini_overwrites, $cwd, $PHP_FAILED_TESTS, $pass_options, $DETAILED, $IN_REDIRECT, $test_cnt, $test_idx; + global $log_format, $info_params, $ini_overwrites, $cwd, $PHP_FAILED_TESTS, $pass_options, $DETAILED, $IN_REDIRECT, $test_cnt, $test_idx, $leak_check; $org_file = $file; @@ -756,7 +831,8 @@ TEST $file $line = fgets($fp); // Match the beginning of a section. - if (ereg('^--([A-Z]+)--',$line,$r)) { + // UTODO changed to use preg, because ereg was crapping out + if (preg_match('/^--([A-Z]+)--/',$line,$r)) { $section = $r[1]; $section_text[$section] = ''; continue; @@ -771,25 +847,28 @@ TEST $file if (@count($section_text['REDIRECTTEST']) == 1) { if ($IN_REDIRECT) { $borked = true; - $bork_info = "Can't redirect a test from within a redirected test"; + $bork_info = "Can't redirect a test from within a redirected test [$file]"; } else { $borked = false; } } else { - if (@count($section_text['FILE']) != 1) { + if (@count($section_text['FILE']) + @count($section_text['FILEEOF']) != 1) { $bork_info = "missing section --FILE-- [$file]"; $borked = true; } + if (@count($section_text['FILEEOF']) == 1) { + $section_text['FILE'] = preg_replace('/[\r\n]+$/', '', $section_text['FILEEOF']); + unset($section_text['FILEEOF']); + } if ((@count($section_text['EXPECT']) + @count($section_text['EXPECTF']) + @count($section_text['EXPECTREGEX'])) != 1) { $bork_info = "missing section --EXPECT--, --EXPECTF-- or --EXPECTREGEX-- [$file]"; $borked = true; - print_r($section_text); } } fclose($fp); if ($borked) { - echo "BORK $bork_info [$file]\n"; + show_result("BORK", $bork_info, $file); $PHP_FAILED_TESTS['BORKED'][] = array ( 'name' => $file, 'test_name' => '', @@ -811,8 +890,7 @@ TEST $file $shortname = str_replace($cwd.'/', '', $file); $tested = trim($section_text['TEST'])." [$shortname]"; - echo "TEST $test_idx/$test_cnt [$shortname]\r"; - flush(); + show_test($test_idx, $shortname); if (is_array($IN_REDIRECT)) { $tmp = $IN_REDIRECT['dir']; @@ -820,29 +898,30 @@ TEST $file $tmp = realpath(dirname($file)); } - $diff_filename = $tmp . DIRECTORY_SEPARATOR . ereg_replace('\.phpt$','.diff', basename($file)); - $log_filename = $tmp . DIRECTORY_SEPARATOR . ereg_replace('\.phpt$','.log', basename($file)); - $exp_filename = $tmp . DIRECTORY_SEPARATOR . ereg_replace('\.phpt$','.exp', basename($file)); - $output_filename = $tmp . DIRECTORY_SEPARATOR . ereg_replace('\.phpt$','.out', basename($file)); - - $tmp_skipif = $tmp . DIRECTORY_SEPARATOR . uniqid('/phpt.'); - $tmp_file = $tmp . DIRECTORY_SEPARATOR . preg_replace('/\.phpt$/','.php',basename($file)); - $tmp_post = $tmp . DIRECTORY_SEPARATOR . uniqid('/phpt.'); + $diff_filename = $tmp . DIRECTORY_SEPARATOR . basename($file).'diff'; + $log_filename = $tmp . DIRECTORY_SEPARATOR . basename($file).'log'; + $exp_filename = $tmp . DIRECTORY_SEPARATOR . basename($file).'exp'; + $output_filename = $tmp . DIRECTORY_SEPARATOR . basename($file).'out'; + $memcheck_filename = $tmp . DIRECTORY_SEPARATOR . basename($file).'mem'; + $tmp_file = $tmp . DIRECTORY_SEPARATOR . basename($file).'php'; + $tmp_skipif = $tmp . DIRECTORY_SEPARATOR . basename($file).'skip'; + $tmp_post = $tmp . DIRECTORY_SEPARATOR . uniqid('/phpt.'); + $tmp_relative_file = str_replace(dirname(__FILE__).DIRECTORY_SEPARATOR, '', $tmp_file) . 't'; if (is_array($IN_REDIRECT)) { - $tested = $IN_REDIRECT['prefix'] . ' ' . trim($section_text['TEST']) . " [$tmp_file]"; + $tested = $IN_REDIRECT['prefix'] . ' ' . trim($section_text['TEST']) . " [$tmp_relative_file]"; $section_text['FILE'] = "# original source file: $shortname\n" . $section_text['FILE']; } - @unlink($tmp_skipif); - @unlink($tmp_file); - @unlink($tmp_post); - // unlink old test results @unlink($diff_filename); @unlink($log_filename); @unlink($exp_filename); @unlink($output_filename); + @unlink($memcheck_filename); + @unlink($tmp_file); + @unlink($tmp_skipif); + @unlink($tmp_post); // Reset environment from any previous test. putenv("REDIRECT_STATUS="); @@ -868,16 +947,16 @@ TEST $file $output = system_with_timeout("$extra $php -q $skipif_params $tmp_skipif"); @unlink($tmp_skipif); if (eregi("^skip", trim($output))) { - echo "SKIP $tested"; $reason = (eregi("^skip[[:space:]]*(.+)\$", trim($output))) ? eregi_replace("^skip[[:space:]]*(.+)\$", "\\1", trim($output)) : FALSE; if ($reason) { - echo " (reason: $reason)\n"; + show_result("SKIP", $tested, $file, "reason: $reason"); } else { - echo "\n"; + show_result("SKIP", $tested, $file); } if (isset($old_php)) { $php = $old_php; } + @unlink($tmp_skipif); return 'SKIPPED'; } if (eregi("^info", trim($output))) { @@ -904,43 +983,55 @@ TEST $file $IN_REDIRECT['dir'] = realpath(dirname($file)); $IN_REDIRECT['prefix'] = trim($section_text['TEST']); - if (is_array($org_file)) { - $test_files[] = $org_file[1]; - } else { - $GLOBALS['test_files'] = $test_files; - find_files($IN_REDIRECT['TESTS']); - $test_files = $GLOBALS['test_files']; - } - $test_cnt += count($test_files) - 1; - $test_idx--; - - echo "---> $IN_REDIRECT[TESTS] ($tested)\n"; - - // set up environment - foreach ($IN_REDIRECT['ENV'] as $k => $v) { - putenv("$k=$v"); - } - putenv("REDIR_TEST_DIR=" . realpath($IN_REDIRECT['TESTS']) . DIRECTORY_SEPARATOR); - - usort($test_files, "test_sort"); - run_all_tests($test_files, $tested); + if (@count($IN_REDIRECT['TESTS']) == 1) { + if (is_array($org_file)) { + $test_files[] = $org_file[1]; + } else { + $GLOBALS['test_files'] = $test_files; + find_files($IN_REDIRECT['TESTS']); + $test_files = $GLOBALS['test_files']; + } + $test_cnt += count($test_files) - 1; + $test_idx--; - echo "---> $IN_REDIRECT[TESTS] ($tested) done\n"; + show_redirect_start($IN_REDIRECT['TESTS'], $tested); - // clean up environment - foreach ($IN_REDIRECT['ENV'] as $k => $v) { - putenv("$k="); + // set up environment + foreach ($IN_REDIRECT['ENV'] as $k => $v) { + putenv("$k=$v"); + } + putenv("REDIR_TEST_DIR=" . realpath($IN_REDIRECT['TESTS']) . DIRECTORY_SEPARATOR); + + usort($test_files, "test_sort"); + run_all_tests($test_files, $tested); + + show_redirect_ends($IN_REDIRECT['TESTS'], $tested); + + // clean up environment + foreach ($IN_REDIRECT['ENV'] as $k => $v) { + putenv("$k="); + } + putenv("REDIR_TEST_DIR="); + + // a redirected test never fails + $IN_REDIRECT = false; + return 'REDIR'; } - putenv("REDIR_TEST_DIR="); - - // a redirected test never fails - $IN_REDIRECT = false; - return 'REDIR'; - } else if (is_array($org_file)) { - echo "--> Redirected test did not contain redirection info: $org_file[0]\n"; - $test_cnt -= 1; - $test_idx--; - return 'REDIR'; + } + if (is_array($org_file) || @count($section_text['REDIRECTTEST']) == 1) { + if (is_array($org_file)) $file = $org_file[0]; + $bork_info = "Redirected test did not contain redirection info: [$file]"; + show_result("BORK", $bork_info, $file); + $PHP_FAILED_TESTS['BORKED'][] = array ( + 'name' => $file, + 'test_name' => '', + 'output' => '', + 'diff' => '', + 'info' => $bork_info, + ); + //$test_cnt -= 1; // Only if is_array($org_file) ? + //$test_idx--; + return 'BORKED'; } @@ -950,7 +1041,7 @@ TEST $file //$ini_overwrites[] = 'setting=value'; settings2array($ini_overwrites, $ini_settings); - // Any special ini settings + // Any special ini settings // these may overwrite the test defaults... if (array_key_exists('INI', $section_text)) { settings2array(preg_split( "/[\n\r]+/", $section_text['INI']), $ini_settings); @@ -1003,6 +1094,10 @@ TEST $file } } + if ($leak_check) { + $cmd = "valgrind -q --tool=memcheck --log-file-exactly=$memcheck_filename $cmd"; + } + if ($DETAILED) echo " CONTENT_LENGTH = " . getenv("CONTENT_LENGTH") . " CONTENT_TYPE = " . getenv("CONTENT_TYPE") . " @@ -1026,6 +1121,16 @@ COMMAND $cmd @unlink($tmp_post); + $leaked = false; + $passed = false; + + if ($leak_check) { // leak check + $leaked = @filesize($memcheck_filename) > 0; + if (!$leaked) { + @unlink($memcheck_filename); + } + } + // Does the output match what is expected? $output = trim($out); $output = preg_replace('/\r\n/',"\n",$output); @@ -1060,38 +1165,46 @@ COMMAND $cmd var_dump($output); */ if (preg_match("/^$wanted_re\$/s", $output)) { + $passed = true; @unlink($tmp_file); - echo "PASS $tested\n"; if (isset($old_php)) { $php = $old_php; } - return 'PASSED'; + if (!$leaked) { + show_result("PASS", $tested, $file); + return 'PASSED'; + } } - } else { $wanted = trim($section_text['EXPECT']); $wanted = preg_replace('/\r\n/',"\n",$wanted); // compare and leave on success - $ok = (0 == strcmp($output,$wanted)); - if ($ok) { + if (!strcmp($output, $wanted)) { + $passed = true; @unlink($tmp_file); - echo "PASS $tested\n"; if (isset($old_php)) { $php = $old_php; } - return 'PASSED'; + if (!$leaked) { + show_result("PASS", $tested, $file); + return 'PASSED'; + } } $wanted_re = NULL; } // Test failed so we need to report details. - if ($warn) { - echo "WARN $tested$info\n"; + + if ($leaked) { + $restype = 'LEAK'; + } else if ($warn) { + $restype = 'WARN'; } else { - echo "FAIL $tested$info\n"; + $restype = 'FAIL'; } + show_result($restype, $tested, $file, $info); - $PHP_FAILED_TESTS['FAILED'][] = array ( + $PHP_FAILED_TESTS[$restype.'ED'][] = array ( 'name' => $file, 'test_name' => (is_array($IN_REDIRECT) ? $IN_REDIRECT['via'] : '') . $tested, 'output' => $output_filename, @@ -1099,46 +1212,48 @@ COMMAND $cmd 'info' => $info ); - // write .exp - if (strpos($log_format,'E') !== FALSE) { - $log = fopen($exp_filename,'wt') or error("Cannot create test log - $exp_filename"); - fwrite($log,$wanted); - fclose($log); - } - - // write .out - if (strpos($log_format,'O') !== FALSE) { - $log = fopen($output_filename,'wt') or error("Cannot create test log - $output_filename"); - fwrite($log,$output); - fclose($log); - } - - // write .diff - if (strpos($log_format,'D') !== FALSE) { - $log = fopen($diff_filename,'wt') or error("Cannot create test log - $diff_filename"); - fwrite($log,generate_diff($wanted,$wanted_re,$output)); - fclose($log); - } - - // write .log - if (strpos($log_format,'L') !== FALSE) { - $log = fopen($log_filename,'wt') or error("Cannot create test log - $log_filename"); - fwrite($log," + if (!$passed) { + // write .exp + if (strpos($log_format,'E') !== FALSE) { + $log = fopen($exp_filename,'wt') or error("Cannot create test log - $exp_filename"); + fwrite($log,$wanted); + fclose($log); + } + + // write .out + if (strpos($log_format,'O') !== FALSE) { + $log = fopen($output_filename,'wt') or error("Cannot create test log - $output_filename"); + fwrite($log,$output); + fclose($log); + } + + // write .diff + if (strpos($log_format,'D') !== FALSE) { + $log = fopen($diff_filename,'wt') or error("Cannot create test log - $diff_filename"); + fwrite($log, generate_diff($wanted,$wanted_re,$output)); + fclose($log); + } + + // write .log + if (strpos($log_format,'L') !== FALSE) { + $log = fopen($log_filename,'wt') or error("Cannot create test log - $log_filename"); + fwrite($log," ---- EXPECTED OUTPUT $wanted ---- ACTUAL OUTPUT $output ---- FAILED "); - fclose($log); - error_report($file,$log_filename,$tested); + fclose($log); + error_report($file,$log_filename,$tested); + } } if (isset($old_php)) { $php = $old_php; } - return $warn ? 'WARNED' : 'FAILED'; + return $restype.'ED'; } function comp_line($l1,$l2,$is_reg) @@ -1287,7 +1402,7 @@ function compute_summary() $n_total = count($test_results); $n_total += $ignored_by_ext; - $sum_results = array('PASSED'=>0, 'WARNED'=>0, 'SKIPPED'=>0, 'FAILED'=>0, 'BORKED'=>0); + $sum_results = array('PASSED'=>0, 'WARNED'=>0, 'SKIPPED'=>0, 'FAILED'=>0, 'BORKED'=>0, 'LEAKED'=>0); foreach ($test_results as $v) { $sum_results[$v]++; } @@ -1298,20 +1413,22 @@ function compute_summary() } } -function get_summary($show_ext_summary) +function get_summary($show_ext_summary, $show_html) { - global $exts_skipped, $exts_tested, $n_total, $sum_results, $percent_results, $end_time, $start_time, $failed_test_summary, $PHP_FAILED_TESTS; + global $exts_skipped, $exts_tested, $n_total, $sum_results, $percent_results, $end_time, $start_time, $failed_test_summary, $PHP_FAILED_TESTS, $leak_check; $x_total = $n_total - $sum_results['SKIPPED'] - $sum_results['BORKED']; if ($x_total) { $x_warned = (100.0 * $sum_results['WARNED']) / $x_total; $x_failed = (100.0 * $sum_results['FAILED']) / $x_total; + $x_leaked = (100.0 * $sum_results['LEAKED']) / $x_total; $x_passed = (100.0 * $sum_results['PASSED']) / $x_total; } else { $x_warned = $x_failed = $x_passed = 0; } $summary = ""; + if ($show_html) $summary .= "<pre>\n"; if ($show_ext_summary) { $summary .= " ===================================================================== @@ -1330,9 +1447,14 @@ Tests borked : " . sprintf("%4d (%5.1f%%)",$sum_results['BORKED'],$percent_re } $summary .= " Tests skipped : " . sprintf("%4d (%5.1f%%)",$sum_results['SKIPPED'],$percent_results['SKIPPED']) . " -------- -Tests warned : " . sprintf("%4d (%5.1f%%)",$sum_results['WARNED'],$percent_results['WARNED']) . " " . sprintf("(%5.1f%%)",$x_warned) . " -Tests failed : " . sprintf("%4d (%5.1f%%)",$sum_results['FAILED'],$percent_results['FAILED']) . " " . sprintf("(%5.1f%%)",$x_failed) . " -Tests passed : " . sprintf("%4d (%5.1f%%)",$sum_results['PASSED'],$percent_results['PASSED']) . " " . sprintf("(%5.1f%%)",$x_passed) . " +Tests warned : " . sprintf("%4d (%5.1f%%)",$sum_results['WARNED'], $percent_results['WARNED']) . " " . sprintf("(%5.1f%%)",$x_warned) . " +Tests failed : " . sprintf("%4d (%5.1f%%)",$sum_results['FAILED'], $percent_results['FAILED']) . " " . sprintf("(%5.1f%%)",$x_failed); + if ($leak_check) { + $summary .= " +Tests leaked : " . sprintf("%4d (%5.1f%%)",$sum_results['LEAKED'], $percent_results['LEAKED']) . " " . sprintf("(%5.1f%%)",$x_leaked); + } + $summary .= " +Tests passed : " . sprintf("%4d (%5.1f%%)",$sum_results['PASSED'], $percent_results['PASSED']) . " " . sprintf("(%5.1f%%)",$x_passed) . " --------------------------------------------------------------------- Time taken : " . sprintf("%4d seconds", $end_time - $start_time) . " ===================================================================== @@ -1362,13 +1484,108 @@ FAILED TEST SUMMARY $failed_test_summary .= "=====================================================================\n"; } + if (count($PHP_FAILED_TESTS['LEAKED'])) { + $failed_test_summary .= " +===================================================================== +LEAKED TEST SUMMARY +--------------------------------------------------------------------- +"; + foreach ($PHP_FAILED_TESTS['LEAKED'] as $failed_test_data) { + $failed_test_summary .= $failed_test_data['test_name'] . $failed_test_data['info'] . "\n"; + } + $failed_test_summary .= "=====================================================================\n"; + } + if ($failed_test_summary && !getenv('NO_PHPTEST_SUMMARY')) { $summary .= $failed_test_summary; } + if ($show_html) $summary .= "</pre>"; + return $summary; } +function show_start($start_time) +{ + global $html_output, $html_file; + + if ($html_output) + { + fwrite($html_file, "<h2>Time Start: " . date('Y-m-d H:i:s', $start_time) . "</h2>\n"); + fwrite($html_file, "<table>\n"); + } + echo "TIME START " . date('Y-m-d H:i:s', $start_time) . "\n=====================================================================\n"; +} + +function show_end($end_time) +{ + global $html_output, $html_file; + + if ($html_output) + { + fwrite($html_file, "</table>\n"); + fwrite($html_file, "<h2>Time End: " . date('Y-m-d H:i:s', $end_time) . "</h2>\n"); + } + echo "=====================================================================\nTIME END " . date('Y-m-d H:i:s', $end_time); +} + +function show_summary() +{ + global $html_output, $html_file; + + if ($html_output) + { + fwrite($html_file, "<hr/>\n" . get_summary(true, true)); + } + echo get_summary(true, false); +} + +function show_redirect_start($tests, $tested) +{ + global $html_output, $html_file; + + if ($html_output) + { + fwrite($html_file, "<tr><td colspan='3'>---> $tests ($tested) begin</td></tr>\n"); + } + echo "---> $tests ($tested) begin\n"; +} + +function show_redirect_ends($tests, $tested) +{ + global $html_output, $html_file; + + if ($html_output) + { + fwrite($html_file, "<tr><td colspan='3'>---> $tests ($tested) done</td></tr>\n"); + } + echo "---> $tests ($tested) done\n"; +} + +function show_test($test_idx, $shortname) +{ + global $test_cnt; + + echo "TEST $test_idx/$test_cnt [$shortname]\r"; + flush(); +} + +function show_result($result, $tested, $file, $extra = '') +{ + global $html_output, $html_file; + + if ($html_output) + { + fwrite($html_file, + "<tr>" . + "<td>$result</td>" . + "<td>$tested</td>" . + "<td>" . (empty($extra) ? " " : $extra) . "</td>" . + "</tr>\n"); + } + echo "$result $tested $extra\n"; +} + /* * Local variables: * tab-width: 4 |