]> granicus.if.org Git - php/commitdiff
- Sync (and KEEP it synced!)
authorJani Taskinen <jani@php.net>
Mon, 21 Dec 2009 15:44:58 +0000 (15:44 +0000)
committerJani Taskinen <jani@php.net>
Mon, 21 Dec 2009 15:44:58 +0000 (15:44 +0000)
run-tests.php

index a5c374060f4813bea10a27dc8b1337163004374b..8c543b780de6e70634bbab83427fbbe2a0469e0e 100755 (executable)
@@ -80,6 +80,13 @@ if (PHP_VERSION_ID < 50300) {
        }       
 }
 
+// (unicode) is available from 6.0.0
+if (PHP_VERSION_ID < 60000) {
+       define('STRING_TYPE', 'string');
+} else {
+       define('STRING_TYPE', 'unicode');
+}
+
 // If timezone is not set, use UTC.
 if (ini_get('date.timezone') == '') {
        date_default_timezone_set('UTC');
@@ -355,8 +362,8 @@ function save_or_mail_results()
                        if ($sum_results['FAILED']) {
                                foreach ($PHP_FAILED_TESTS['FAILED'] as $test_info) {
                                        $failed_tests_data .= $sep . $test_info['name'] . $test_info['info'];
-                                       $failed_tests_data .= $sep . file_get_contents(realpath($test_info['output']));
-                                       $failed_tests_data .= $sep . file_get_contents(realpath($test_info['diff']));
+                                       $failed_tests_data .= $sep . file_get_contents(realpath($test_info['output']), FILE_BINARY);
+                                       $failed_tests_data .= $sep . file_get_contents(realpath($test_info['diff']), FILE_BINARY);
                                        $failed_tests_data .= $sep . "\n\n";
                                }
                                $status = "failed";
@@ -1130,6 +1137,21 @@ function show_file_block($file, $block, $section = null)
        }
 }
 
+function binary_section($section)
+{
+       return PHP_MAJOR_VERSION < 6 || 
+               (
+                       $section == 'FILE'                      ||
+               $section == 'FILEEOF'           ||
+                       $section == 'EXPECT'            ||
+                       $section == 'EXPECTF'           ||
+                       $section == 'EXPECTREGEX'       ||
+                       $section == 'EXPECTHEADERS'     ||
+                       $section == 'SKIPIF'            ||
+                       $section == 'CLEAN'
+               );
+}
+
 //
 //  Run an individual test case.
 //
@@ -1159,7 +1181,7 @@ TEST $file
        // Load the sections of the test file.
        $section_text = array('TEST' => '');
 
-       $fp = fopen($file, "rt") or error("Cannot open test file: $file");
+       $fp = fopen($file, "rb") or error("Cannot open test file: $file");
 
        $borked = false;
        $bork_info = '';
@@ -1187,28 +1209,42 @@ TEST $file
        while (!feof($fp)) {
                $line = fgets($fp);
 
+               if ($line === false) {
+                       break;
+               }
+
                // Match the beginning of a section.
-               if (preg_match('/^--([_A-Z]+)--/', $line, $r)) {
+               if (preg_match(b'/^--([_A-Z]+)--/', $line, $r)) {
                        $section = $r[1];
+                       settype($section, STRING_TYPE);
 
                        if (isset($section_text[$section])) {
                                $bork_info = "duplicated $section section";
                                $borked    = true;
                        }
 
-                       $section_text[$section] = '';
+                       $section_text[$section] = binary_section($section) ? b'' : '';
                        $secfile = $section == 'FILE' || $section == 'FILEEOF' || $section == 'FILE_EXTERNAL';
                        $secdone = false;
                        continue;
                }
 
+               if (!binary_section($section)) {
+                       $line = unicode_decode($line, "utf-8");
+                       if ($line == false) {
+                               $bork_info = "cannot read test";
+                               $borked = true;
+                               break;
+                       }
+               }
+
                // Add to the section text.
                if (!$secdone) {
                        $section_text[$section] .= $line;
                }
 
                // End of actual test?
-               if ($secfile && preg_match('/^===DONE===\s*$/', $line)) {
+               if ($secfile && preg_match(b'/^===DONE===\s*$/', $line)) {
                        $secdone = true;
                }
        }
@@ -1233,7 +1269,7 @@ TEST $file
                        }
 
                        if (@count($section_text['FILEEOF']) == 1) {
-                               $section_text['FILE'] = preg_replace("/[\r\n]+$/", '', $section_text['FILEEOF']);
+                               $section_text['FILE'] = preg_replace(b"/[\r\n]+$/", b'', $section_text['FILEEOF']);
                                unset($section_text['FILEEOF']);
                        }
 
@@ -1242,7 +1278,7 @@ TEST $file
                                $section_text['FILE_EXTERNAL'] = dirname($file) . '/' . trim(str_replace('..', '', $section_text['FILE_EXTERNAL']));
 
                                if (file_exists($section_text['FILE_EXTERNAL'])) {
-                                       $section_text['FILE'] = file_get_contents($section_text['FILE_EXTERNAL']);
+                                       $section_text['FILE'] = file_get_contents($section_text['FILE_EXTERNAL'], FILE_BINARY);
                                        unset($section_text['FILE_EXTERNAL']);
                                } else {
                                        $bork_info = "could not load --FILE_EXTERNAL-- " . dirname($file) . '/' . trim($section_text['FILE_EXTERNAL']);
@@ -1776,7 +1812,9 @@ COMMAND $cmd
                                // quote a non re portion of the string
                                $temp = $temp . preg_quote(substr($wanted_re, $startOffset, ($start - $startOffset)),  b'/');
                                // add the re unquoted.
-                               $temp = $temp . b'(' . substr($wanted_re, $start+2, ($end - $start-2)). b')';
+                               if ($end > $start) {
+                                       $temp = $temp . b'(' . substr($wanted_re, $start+2, ($end - $start-2)). b')';
+                               }
                                $startOffset = $end + 2;
                        }
                        $wanted_re = $temp;
@@ -1956,7 +1994,7 @@ $output
 function comp_line($l1, $l2, $is_reg)
 {
        if ($is_reg) {
-               return preg_match((binary) "/^$l1$/s", (binary) $l2);
+               return preg_match(b'/^'. (binary) $l1 . b'$/s', (binary) $l2);
        } else {
                return !strcmp((binary) $l1, (binary) $l2);
        }