helly Wed Nov 30 19:26:45 2005 EDT Modified files: /php-src run-tests.php Log: - Add support for valgrind testing (Nuno) http://cvs.php.net/diff.php/php-src/run-tests.php?r1=1.239&r2=1.240&ty=u Index: php-src/run-tests.php diff -u php-src/run-tests.php:1.239 php-src/run-tests.php:1.240 --- php-src/run-tests.php:1.239 Sat Nov 26 13:07:49 2005 +++ php-src/run-tests.php Wed Nov 30 19:26:44 2005 @@ -23,7 +23,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: run-tests.php,v 1.239 2005/11/26 18:07:49 helly Exp $ */ +/* $Id: run-tests.php,v 1.240 2005/12/01 00:26:44 helly Exp $ */ /* 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 @@ -274,6 +274,9 @@ $ini_overwrites[] = 'unicode.output_encoding=utf-8'; $ini_overwrites[] = 'unicode.from_error_mode=U_INVALID_SUBSTITUTE'; break; + case 'm': + $GLOBALS['leak_check'] = 1; + break; default: echo "Illegal switch specified!\n"; case "h": @@ -302,6 +305,8 @@ -u Test with unicode_semantics set on. + -m Test for memory leaks with Valgrind + -v Verbose mode. -h <file> This Help. @@ -682,7 +687,7 @@ return $data; } else if ($n > 0) { $line = fread($pipes[1], 8192); - if (strlen($line) == 0) { + if ($line === false) { /* EOF */ break; } @@ -861,9 +866,10 @@ $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.'); + $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']; } @@ -1077,6 +1083,10 @@ } } + if (isset($GLOBALS['leak_check'])) { + $cmd = 'valgrind --tool=memcheck ' . $cmd; + } + if ($DETAILED) echo " CONTENT_LENGTH = " . getenv("CONTENT_LENGTH") . " CONTENT_TYPE = " . getenv("CONTENT_TYPE") . " @@ -1100,6 +1110,31 @@ @unlink($tmp_post); + if (isset($GLOBALS['leak_check'])) { // leak check + preg_match_all('/==\d+== +\w+ lost: (\d+) bytes/S', $out, $matches); + $leak = false; + + foreach ($matches[1] as $m) { + if ($m) { // we got a leak + $leak = true; + break; + } + } + + if (!$leak && !preg_match('/==\d+== ERROR SUMMARY: [1-9]\d* errors/', $out)) { + if (isset($old_php)) { + $php = $old_php; + } + echo "PASS $tested\n"; + return 'PASSED'; + } + + $output = $out; + $wanted = ''; + $warn = false; + + } else { // normal testing + // Does the output match what is expected? $output = trim($out); $output = preg_replace('/\r\n/',"\n",$output); @@ -1158,6 +1193,8 @@ $wanted_re = NULL; } + } //end of non-valgrind testing + // Test failed so we need to report details. if ($warn) { show_result("WARN", $tested, $file, $info); @@ -1190,7 +1227,7 @@ // 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)); + fwrite($log, isset($GLOBALS['leak_check']) ? '' : generate_diff($wanted,$wanted_re,$output)); fclose($log); }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php