Why didn't you merge this to all branches? The run-test.php has so far
been same in all of them. Can't really do regression testing if you
change how tests are run for one branch..:)
--Jani
On 12/16/2009 01:16 PM, Dmitry Stogov wrote:
dmitry Wed, 16 Dec 2009 11:16:03 +
Revision: http://svn.php.net/viewvc?view=revision&revision=292196
Log:
Fixed test engine to support non utf-8 tests
Changed paths:
U php/php-src/trunk/run-tests.php
Modified: php/php-src/trunk/run-tests.php
===
--- php/php-src/trunk/run-tests.php 2009-12-16 11:15:22 UTC (rev 292195)
+++ php/php-src/trunk/run-tests.php 2009-12-16 11:16:03 UTC (rev 292196)
@@ -1130,6 +1130,17 @@
}
}
+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 @@
// 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 @@
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 @@
}
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 @@
// 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 @@
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);
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php