Hi, I'm trying to figure out how to test a feature in the phar extension that requires the executable test file to be an actual phar archive. This would be possible if there was some way to load the --FILE-- section from an external file. Would anyone object to adding a new section to the .phpt format "--FILE_EXTERNAL--" that simply takes a relative path to the file to use as the contents for the test?
The attached patch adds this section and also fixes a minor bug in the handling of POST_RAW that inserts a spurious \n Greg
Index: run-tests.php =================================================================== RCS file: /repository/php-src/run-tests.php,v retrieving revision 1.226.2.37.2.35.2.10 diff -u -r1.226.2.37.2.35.2.10 run-tests.php --- run-tests.php 1 Jan 2008 06:15:40 -0000 1.226.2.37.2.35.2.10 +++ run-tests.php 5 Jan 2008 00:59:38 -0000 @@ -1034,7 +1034,7 @@ if (preg_match('/^--([_A-Z]+)--/', $line, $r)) { $section = $r[1]; $section_text[$section] = ''; - $secfile = $section == 'FILE' || $section == 'FILEEOF'; + $secfile = $section == 'FILE' || $section == 'FILEEOF' || $section == 'FILE_EXTERNAL'; $secdone = false; continue; } @@ -1060,7 +1060,7 @@ $borked = false; } } else { - if (@count($section_text['FILE']) + @count($section_text['FILEEOF']) != 1) { + if (@count($section_text['FILE']) + @count($section_text['FILEEOF']) + @count($section_text['FILE_EXTERNAL']) != 1) { $bork_info = "missing section --FILE--"; $borked = true; } @@ -1068,6 +1068,16 @@ $section_text['FILE'] = preg_replace("/[\r\n]+$/", '', $section_text['FILEEOF']); unset($section_text['FILEEOF']); } + if (@count($section_text['FILE_EXTERNAL']) == 1) { + // don't allow tests to retrieve files from anywhere but this subdirectory + $section_text['FILE_EXTERNAL'] = dirname($file) . '/' . trim(str_replace('..', '', $section_text['FILE_EXTERNAL'])); + if ([EMAIL PROTECTED]($section_text['FILE_EXTERNAL'])) { + $bork_info = "could not load --FILE_EXTERNAL-- " . dirname($file) . '/' . trim($section_text['FILE_EXTERNAL']); + $borked = true; + } else { + $test_file = $section_text['FILE_EXTERNAL']; + } + } if ((@count($section_text['EXPECT']) + @count($section_text['EXPECTF']) + @count($section_text['EXPECTREGEX'])) != 1) { $bork_info = "missing section --EXPECT--, --EXPECTF-- or --EXPECTREGEX--"; $borked = true; @@ -1133,7 +1143,9 @@ $output_filename = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name.'out'; $memcheck_filename = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name.'mem'; $temp_file = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name.'php'; - $test_file = $test_dir . DIRECTORY_SEPARATOR . $main_file_name.'php'; + if ([EMAIL PROTECTED]($section_text['FILE_EXTERNAL'])) { + $test_file = $test_dir . DIRECTORY_SEPARATOR . $main_file_name.'php'; + } $temp_skipif = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name.'skip.php'; $test_skipif = $test_dir . DIRECTORY_SEPARATOR . $main_file_name.'skip.php'; $temp_clean = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name.'clean.php'; @@ -1177,7 +1189,9 @@ @unlink($output_filename); @unlink($memcheck_filename); @unlink($temp_file); - @unlink($test_file); + if ([EMAIL PROTECTED]($section_text['FILE_EXTERNAL'])) { + @unlink($test_file); + } @unlink($temp_skipif); @unlink($test_skipif); @unlink($tmp_post); @@ -1330,7 +1344,9 @@ // We've satisfied the preconditions - run the test! show_file_block('php', $section_text['FILE'], 'TEST'); - save_text($test_file, $section_text['FILE'], $temp_file); + if ([EMAIL PROTECTED]($section_text['FILE_EXTERNAL'])) { + save_text($test_file, $section_text['FILE'], $temp_file); + } if (array_key_exists('GET', $section_text)) { $query_string = trim($section_text['GET']); } else { @@ -1355,12 +1371,15 @@ $raw_lines = explode("\n", $post); $request = ''; + $started = false; foreach ($raw_lines as $line) { if (empty($env['CONTENT_TYPE']) && preg_match('/^Content-Type:(.*)/i', $line, $res)) { $env['CONTENT_TYPE'] = trim(str_replace("\r", '', $res[1])); continue; } - $request .= $line . "\n"; + if ($started) $request .= "\n"; + $started = true; + $request .= $line; } $env['CONTENT_LENGTH'] = strlen($request);
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php