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

Reply via email to