mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Fixed test engine to support non utf-8 tests
This commit is contained in:
parent
5630119374
commit
dc3bb4674d
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user