From: Dmitry Stogov Date: Wed, 16 Dec 2009 11:16:03 +0000 (+0000) Subject: Fixed test engine to support non utf-8 tests X-Git-Tag: php-5.4.0alpha1~191^2~2207 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dc3bb4674d186473334c1a63dca261e54d956710;p=php Fixed test engine to support non utf-8 tests --- diff --git a/run-tests.php b/run-tests.php index a5c374060f..8b7392dedf 100755 --- a/run-tests.php +++ b/run-tests.php @@ -1130,6 +1130,17 @@ function show_file_block($file, $block, $section = null) } } +function binary_section($section) { + return ($section == 'FILE' || + $section == 'FILEEOF' || + $section == 'EXPECT' || + $section == 'EXPECTF' || + $section == 'EXPECTREGEX' || + $section == 'EXPECTHEADERS' || + $section == 'SKIPIF' || + $section == 'CLEAN'); +} + // // Run an individual test case. // @@ -1159,7 +1170,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 +1198,41 @@ 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)) { - $section = $r[1]; + if (preg_match(b'/^--([_A-Z]+)--/', $line, $r)) { + $section = (unicode)$r[1]; 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 +1257,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']); } @@ -1776,7 +1800,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 +1982,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); }