.
-
- --keep-[all|php|skip|clean]
- Do not delete 'all' files, 'php' test file, 'skip' or 'clean'
- file.
-
- --set-timeout [n]
- Set timeout for individual tests, where [n] is the number of
- seconds. The default value is 60 seconds, or 300 seconds when
- testing for memory leaks.
-
- --show-[all|php|skip|clean|exp|diff|out]
- Show 'all' files, 'php' test file, 'skip' or 'clean' file. You
- can also use this to show the output 'out', the expected result
- 'exp' or the difference between them 'diff'. The result types
- get written independent of the log format, however 'diff' only
- exists when a test fails.
-
- --no-clean Do not execute clean section if any.
-
-HELP;
- exit(1);
- }
- }
-
- if (!$is_switch) {
- $testfile = realpath($argv[$i]);
-
- if (!$testfile && strpos($argv[$i], '*') !== false && function_exists('glob')) {
-
- if (preg_match("/\.phpt$/", $argv[$i])) {
- $pattern_match = glob($argv[$i]);
- } else if (preg_match("/\*$/", $argv[$i])) {
- $pattern_match = glob($argv[$i] . '.phpt');
- } else {
- die("bogus test name " . $argv[$i] . "\n");
- }
-
- if (is_array($pattern_match)) {
- $test_files = array_merge($test_files, $pattern_match);
- }
-
- } else if (is_dir($testfile)) {
- find_files($testfile);
- } else if (preg_match("/\.phpt$/", $testfile)) {
- $test_files[] = $testfile;
- } else {
- die("bogus test name " . $argv[$i] . "\n");
- }
- }
- }
-
- if (strlen($conf_passed)) {
- if (substr(PHP_OS, 0, 3) == "WIN") {
- $pass_options .= " -c " . escapeshellarg($conf_passed);
- } else {
- $pass_options .= " -c '$conf_passed'";
- }
- }
-
- $test_files = array_unique($test_files);
- $test_files = array_merge($test_files, $redir_tests);
-
- // Run selected tests.
- $test_cnt = count($test_files);
-
- if ($test_cnt) {
- putenv('NO_INTERACTION=1');
- verify_config();
- write_information($html_output);
- usort($test_files, "test_sort");
- $start_time = time();
-
- if (!$html_output) {
- echo "Running selected tests.\n";
- } else {
- show_start($start_time);
- }
-
- $test_idx = 0;
- run_all_tests($test_files, $environment);
- $end_time = time();
-
- if ($html_output) {
- show_end($end_time);
- }
-
- if ($failed_tests_file) {
- fclose($failed_tests_file);
- }
-
- if (count($test_files) || count($test_results)) {
- compute_summary();
- if ($html_output) {
- fwrite($html_file, "
\n" . get_summary(false, true));
- }
- echo "=====================================================================";
- echo get_summary(false, false);
- }
-
- if ($html_output) {
- fclose($html_file);
- }
-
- if ($output_file != '' && $just_save_results) {
- save_or_mail_results();
- }
-
- if (getenv('REPORT_EXIT_STATUS') == 1 and preg_match('/FAILED(?: |$)/', implode(' ', $test_results))) {
- exit(1);
- }
-
- exit(0);
- }
-}
-
-verify_config();
-write_information($html_output);
-
-// Compile a list of all test files (*.phpt).
-$test_files = array();
-$exts_tested = count($exts_to_test);
-$exts_skipped = 0;
-$ignored_by_ext = 0;
-sort($exts_to_test);
-$test_dirs = array();
-$optionals = array('tests', 'ext', 'Zend', 'ZendEngine2', 'sapi/cli', 'sapi/cgi');
-
-foreach($optionals as $dir) {
- if (@filetype($dir) == 'dir') {
- $test_dirs[] = $dir;
- }
-}
-
-// Convert extension names to lowercase
-foreach ($exts_to_test as $key => $val) {
- $exts_to_test[$key] = strtolower($val);
-}
-
-foreach ($test_dirs as $dir) {
- find_files("{$cwd}/{$dir}", ($dir == 'ext'));
-}
-
-foreach ($user_tests as $dir) {
- find_files($dir, ($dir == 'ext'));
-}
-
-function find_files($dir, $is_ext_dir = false, $ignore = false)
-{
- global $test_files, $exts_to_test, $ignored_by_ext, $exts_skipped, $exts_tested;
-
- $o = opendir($dir) or error("cannot open directory: $dir");
-
- while (($name = readdir($o)) !== false) {
-
- if (is_dir("{$dir}/{$name}") && !in_array($name, array('.', '..', 'CVS'))) {
- $skip_ext = ($is_ext_dir && !in_array(strtolower($name), $exts_to_test));
- if ($skip_ext) {
- $exts_skipped++;
- }
- find_files("{$dir}/{$name}", false, $ignore || $skip_ext);
- }
-
- // Cleanup any left-over tmp files from last run.
- if (substr($name, -4) == '.tmp') {
- @unlink("$dir/$name");
- continue;
- }
-
- // Otherwise we're only interested in *.phpt files.
- if (substr($name, -5) == '.phpt') {
- if ($ignore) {
- $ignored_by_ext++;
- } else {
- $testfile = realpath("{$dir}/{$name}");
- $test_files[] = $testfile;
- }
- }
- }
-
- closedir($o);
-}
-
-function test_name($name)
-{
- if (is_array($name)) {
- return $name[0] . ':' . $name[1];
- } else {
- return $name;
- }
-}
-
-function test_sort($a, $b)
-{
- global $cwd;
-
- $a = test_name($a);
- $b = test_name($b);
-
- $ta = strpos($a, "{$cwd}/tests") === 0 ? 1 + (strpos($a, "{$cwd}/tests/run-test") === 0 ? 1 : 0) : 0;
- $tb = strpos($b, "{$cwd}/tests") === 0 ? 1 + (strpos($b, "{$cwd}/tests/run-test") === 0 ? 1 : 0) : 0;
-
- if ($ta == $tb) {
- return strcmp($a, $b);
- } else {
- return $tb - $ta;
- }
-}
-
-$test_files = array_unique($test_files);
-usort($test_files, "test_sort");
-
-$start_time = time();
-show_start($start_time);
-
-$test_cnt = count($test_files);
-$test_idx = 0;
-run_all_tests($test_files, $environment);
-$end_time = time();
-
-if ($failed_tests_file) {
- fclose($failed_tests_file);
-}
-
-// Summarize results
-
-if (0 == count($test_results)) {
- echo "No tests were run.\n";
- return;
-}
-
-compute_summary();
-
-show_end($end_time);
-show_summary();
-
-if ($html_output) {
- fclose($html_file);
-}
-
-save_or_mail_results();
-
-if (getenv('REPORT_EXIT_STATUS') == 1 and $sum_results['FAILED']) {
- exit(1);
-}
-exit(0);
-
-//
-// Send Email to QA Team
-//
-
-function mail_qa_team($data, $compression, $status = false)
-{
- $url_bits = parse_url(QA_SUBMISSION_PAGE);
-
- if (empty($url_bits['port'])) {
- $url_bits['port'] = 80;
- }
-
- $data = "php_test_data=" . urlencode(base64_encode(str_replace("\00", '[0x0]', $data)));
- $data_length = strlen($data);
-
- $fs = fsockopen($url_bits['host'], $url_bits['port'], $errno, $errstr, 10);
-
- if (!$fs) {
- return false;
- }
-
- $php_version = urlencode(TESTED_PHP_VERSION);
-
- echo "\nPosting to {$url_bits['host']} {$url_bits['path']}\n";
- fwrite($fs, "POST " . $url_bits['path'] . "?status=$status&version=$php_version HTTP/1.1\r\n");
- fwrite($fs, "Host: " . $url_bits['host'] . "\r\n");
- fwrite($fs, "User-Agent: QA Browser 0.1\r\n");
- fwrite($fs, "Content-Type: application/x-www-form-urlencoded\r\n");
- fwrite($fs, "Content-Length: " . $data_length . "\r\n\r\n");
- fwrite($fs, $data);
- fwrite($fs, "\r\n\r\n");
- fclose($fs);
-
- return 1;
-}
-
-
-//
-// Write the given text to a temporary file, and return the filename.
-//
-
-function save_text($filename, $text, $filename_copy = null)
-{
- global $DETAILED;
-
- if ($filename_copy && $filename_copy != $filename) {
- if (file_put_contents($filename_copy, (binary) $text, FILE_BINARY) === false) {
- error("Cannot open file '" . $filename_copy . "' (save_text)");
- }
- }
-
- if (file_put_contents($filename, (binary) $text, FILE_BINARY) === false) {
- error("Cannot open file '" . $filename . "' (save_text)");
- }
-
- if (1 < $DETAILED) echo "
-FILE $filename {{{
-$text
-}}}
-";
-}
-
-//
-// Write an error in a format recognizable to Emacs or MSVC.
-//
-
-function error_report($testname, $logname, $tested)
-{
- $testname = realpath($testname);
- $logname = realpath($logname);
-
- switch (strtoupper(getenv('TEST_PHP_ERROR_STYLE'))) {
- case 'MSVC':
- echo $testname . "(1) : $tested\n";
- echo $logname . "(1) : $tested\n";
- break;
- case 'EMACS':
- echo $testname . ":1: $tested\n";
- echo $logname . ":1: $tested\n";
- break;
- }
-}
-
-function system_with_timeout($commandline, $env = null, $stdin = null)
-{
- global $leak_check, $cwd;
-
- $data = b'';
-
- $bin_env = array();
- foreach((array)$env as $key => $value) {
- $bin_env[(binary)$key] = (binary)$value;
- }
-
- $proc = proc_open($commandline, array(
- 0 => array('pipe', 'r'),
- 1 => array('pipe', 'w'),
- 2 => array('pipe', 'w')
- ), $pipes, $cwd, $bin_env, array('suppress_errors' => true, 'binary_pipes' => true));
-
- if (!$proc) {
- return false;
- }
-
- if (!is_null($stdin)) {
- fwrite($pipes[0], (binary) $stdin);
- }
- fclose($pipes[0]);
-
- $timeout = $leak_check ? 300 : (isset($env['TEST_TIMEOUT']) ? $env['TEST_TIMEOUT'] : 60);
-
- while (true) {
- /* hide errors from interrupted syscalls */
- $r = $pipes;
- $w = null;
- $e = null;
-
- $n = @stream_select($r, $w, $e, $timeout);
-
- if ($n === false) {
- break;
- } else if ($n === 0) {
- /* timed out */
- $data .= b"\n ** ERROR: process timed out **\n";
- proc_terminate($proc);
- return $data;
- } else if ($n > 0) {
- $line = (binary) fread($pipes[1], 8192);
- if (strlen($line) == 0) {
- /* EOF */
- break;
- }
- $data .= $line;
- }
- }
-
- $stat = proc_get_status($proc);
-
- if ($stat['signaled']) {
- $data .= b"\nTermsig=" . $stat['stopsig'];
- }
-
- $code = proc_close($proc);
- return $data;
-}
-
-function run_all_tests($test_files, $env, $redir_tested = null)
-{
- global $test_results, $failed_tests_file, $php, $test_cnt, $test_idx;
-
- foreach($test_files as $name) {
-
- if (is_array($name)) {
- $index = "# $name[1]: $name[0]";
-
- if ($redir_tested) {
- $name = $name[0];
- }
- } else if ($redir_tested) {
- $index = "# $redir_tested: $name";
- } else {
- $index = $name;
- }
- $test_idx++;
- $result = run_test($php, $name, $env);
-
- if (!is_array($name) && $result != 'REDIR') {
- $test_results[$index] = $result;
- if ($failed_tests_file && ($result == 'XFAILED' || $result == 'FAILED' || $result == 'WARNED' || $result == 'LEAKED')) {
- fwrite($failed_tests_file, "$index\n");
- }
- }
- }
-}
-
-//
-// Show file or result block
-//
-function show_file_block($file, $block, $section = null)
-{
- global $cfg;
-
- if ($cfg['show'][$file]) {
-
- if (is_null($section)) {
- $section = strtoupper($file);
- }
-
- echo "\n========" . $section . "========\n";
- echo rtrim($block);
- echo "\n========DONE========\n";
- }
-}
-
-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.
-//
-function run_test($php, $file, $env)
-{
- global $log_format, $info_params, $ini_overwrites, $cwd, $PHP_FAILED_TESTS;
- global $pass_options, $DETAILED, $IN_REDIRECT, $test_cnt, $test_idx;
- global $leak_check, $temp_source, $temp_target, $cfg, $environment;
- global $no_clean;
- global $valgrind_version;
- $temp_filenames = null;
- $org_file = $file;
-
- if (isset($env['TEST_PHP_CGI_EXECUTABLE'])) {
- $php_cgi = $env['TEST_PHP_CGI_EXECUTABLE'];
- }
-
- if (is_array($file)) {
- $file = $file[0];
- }
-
- if ($DETAILED) echo "
-=================
-TEST $file
-";
-
- // Load the sections of the test file.
- $section_text = array('TEST' => '');
-
- $fp = fopen($file, "rb") or error("Cannot open test file: $file");
-
- $borked = false;
- $bork_info = '';
-
- if (!feof($fp)) {
- $line = fgets($fp);
-
- if ($line === false) {
- $bork_info = "cannot read test";
- $borked = true;
- }
- } else {
- $bork_info = "empty test [$file]";
- $borked = true;
- }
- if (!$borked && strncmp('--TEST--', $line, 8)) {
- $bork_info = "tests must start with --TEST-- [$file]";
- $borked = true;
- }
-
- $section = 'TEST';
- $secfile = false;
- $secdone = false;
-
- while (!feof($fp)) {
- $line = fgets($fp);
-
- if ($line === false) {
- break;
- }
-
- // Match the beginning of a section.
- 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] = 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(b'/^===DONE===\s*$/', $line)) {
- $secdone = true;
- }
- }
-
- // the redirect section allows a set of tests to be reused outside of
- // a given test dir
- if (!$borked) {
- if (@count($section_text['REDIRECTTEST']) == 1) {
-
- if ($IN_REDIRECT) {
- $borked = true;
- $bork_info = "Can't redirect a test from within a redirected test";
- } else {
- $borked = false;
- }
-
- } else {
-
- if (@count($section_text['FILE']) + @count($section_text['FILEEOF']) + @count($section_text['FILE_EXTERNAL']) != 1) {
- $bork_info = "missing section --FILE--";
- $borked = true;
- }
-
- if (@count($section_text['FILEEOF']) == 1) {
- $section_text['FILE'] = preg_replace(b"/[\r\n]+$/", b'', $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 (file_exists($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']);
- $borked = true;
- }
- }
-
- if ((@count($section_text['EXPECT']) + @count($section_text['EXPECTF']) + @count($section_text['EXPECTREGEX'])) != 1) {
- $bork_info = "missing section --EXPECT--, --EXPECTF-- or --EXPECTREGEX--";
- $borked = true;
- }
- }
- }
- fclose($fp);
-
- $shortname = str_replace($cwd . '/', '', $file);
- $tested_file = $shortname;
-
- if ($borked) {
- show_result("BORK", $bork_info, $tested_file);
- $PHP_FAILED_TESTS['BORKED'][] = array (
- 'name' => $file,
- 'test_name' => '',
- 'output' => '',
- 'diff' => '',
- 'info' => "$bork_info [$file]",
- );
- return 'BORKED';
- }
-
- $tested = trim($section_text['TEST']);
-
- /* For GET/POST tests, check if cgi sapi is available and if it is, use it. */
- if (!empty($section_text['GET']) || !empty($section_text['POST']) || !empty($section_text['POST_RAW']) || !empty($section_text['COOKIE']) || !empty($section_text['EXPECTHEADERS'])) {
- if (isset($php_cgi)) {
- $old_php = $php;
- $php = $php_cgi . ' -C ';
- } else if (!strncasecmp(PHP_OS, "win", 3) && file_exists(dirname($php) . "/php-cgi.exe")) {
- $old_php = $php;
- $php = realpath(dirname($php) . "/php-cgi.exe") . ' -C ';
- } else {
- if (file_exists(dirname($php) . "/../../sapi/cgi/php-cgi")) {
- $old_php = $php;
- $php = realpath(dirname($php) . "/../../sapi/cgi/php-cgi") . ' -C ';
- } else if (file_exists("./sapi/cgi/php-cgi")) {
- $old_php = $php;
- $php = realpath("./sapi/cgi/php-cgi") . ' -C ';
- } else {
- show_result('SKIP', $tested, $tested_file, "reason: CGI not available");
- return 'SKIPPED';
- }
- }
- }
-
- show_test($test_idx, $shortname);
-
- if (is_array($IN_REDIRECT)) {
- $temp_dir = $test_dir = $IN_REDIRECT['dir'];
- } else {
- $temp_dir = $test_dir = realpath(dirname($file));
- }
-
- if ($temp_source && $temp_target) {
- $temp_dir = str_replace($temp_source, $temp_target, $temp_dir);
- }
-
- $main_file_name = basename($file,'phpt');
-
- $diff_filename = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'diff';
- $log_filename = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'log';
- $exp_filename = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'exp';
- $output_filename = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'out';
- $memcheck_filename = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'mem';
- $sh_filename = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'sh';
- $temp_file = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'php';
- $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';
- $test_clean = $test_dir . DIRECTORY_SEPARATOR . $main_file_name . 'clean.php';
- $tmp_post = $temp_dir . DIRECTORY_SEPARATOR . uniqid('/phpt.');
- $tmp_relative_file = str_replace(__DIR__ . DIRECTORY_SEPARATOR, '', $test_file) . 't';
-
- if ($temp_source && $temp_target) {
- $temp_skipif .= 's';
- $temp_file .= 's';
- $temp_clean .= 's';
- $copy_file = $temp_dir . DIRECTORY_SEPARATOR . basename(is_array($file) ? $file[1] : $file) . '.phps';
-
- if (!is_dir(dirname($copy_file))) {
- mkdir(dirname($copy_file), 0777, true) or error("Cannot create output directory - " . dirname($copy_file));
- }
-
- if (isset($section_text['FILE'])) {
- save_text($copy_file, $section_text['FILE']);
- }
-
- $temp_filenames = array(
- 'file' => $copy_file,
- 'diff' => $diff_filename,
- 'log' => $log_filename,
- 'exp' => $exp_filename,
- 'out' => $output_filename,
- 'mem' => $memcheck_filename,
- 'sh' => $sh_filename,
- 'php' => $temp_file,
- 'skip' => $temp_skipif,
- 'clean'=> $temp_clean);
- }
-
- if (is_array($IN_REDIRECT)) {
- $tested = $IN_REDIRECT['prefix'] . ' ' . trim($section_text['TEST']);
- $tested_file = $tmp_relative_file;
- }
-
- // unlink old test results
- @unlink($diff_filename);
- @unlink($log_filename);
- @unlink($exp_filename);
- @unlink($output_filename);
- @unlink($memcheck_filename);
- @unlink($sh_filename);
- @unlink($temp_file);
- @unlink($test_file);
- @unlink($temp_skipif);
- @unlink($test_skipif);
- @unlink($tmp_post);
- @unlink($temp_clean);
- @unlink($test_clean);
-
- // Reset environment from any previous test.
- $env['REDIRECT_STATUS'] = '';
- $env['QUERY_STRING'] = '';
- $env['PATH_TRANSLATED'] = '';
- $env['SCRIPT_FILENAME'] = '';
- $env['REQUEST_METHOD'] = '';
- $env['CONTENT_TYPE'] = '';
- $env['CONTENT_LENGTH'] = '';
- $env['TZ'] = '';
-
- if (!empty($section_text['ENV'])) {
-
- foreach(explode("\n", trim($section_text['ENV'])) as $e) {
- $e = explode('=', trim($e), 2);
-
- if (!empty($e[0]) && isset($e[1])) {
- $env[$e[0]] = $e[1];
- }
- }
- }
-
- // Default ini settings
- $ini_settings = array();
- // additional ini overwrites
- //$ini_overwrites[] = 'setting=value';
- settings2array($ini_overwrites, $ini_settings);
-
- // Any special ini settings
- // these may overwrite the test defaults...
- if (array_key_exists('INI', $section_text)) {
- if (strpos($section_text['INI'], '{PWD}') !== false) {
- $section_text['INI'] = str_replace('{PWD}', dirname($file), $section_text['INI']);
- }
- settings2array(preg_split( "/[\n\r]+/", $section_text['INI']), $ini_settings);
- }
-
- settings2params($ini_settings);
-
- // Check if test should be skipped.
- $info = '';
- $warn = false;
-
- if (array_key_exists('SKIPIF', $section_text)) {
-
- if (trim($section_text['SKIPIF'])) {
- show_file_block('skip', $section_text['SKIPIF']);
- save_text($test_skipif, $section_text['SKIPIF'], $temp_skipif);
- $extra = substr(PHP_OS, 0, 3) !== "WIN" ?
- "unset REQUEST_METHOD; unset QUERY_STRING; unset PATH_TRANSLATED; unset SCRIPT_FILENAME; unset REQUEST_METHOD;": "";
-
- if ($leak_check) {
- $env['USE_ZEND_ALLOC'] = '0';
- } else {
- $env['USE_ZEND_ALLOC'] = '1';
- }
-
- $output = system_with_timeout("$extra $php $pass_options -q $ini_settings -d display_errors=0 $test_skipif", $env);
-
- if (!$cfg['keep']['skip']) {
- @unlink($test_skipif);
- }
-
- if (!strncasecmp('skip', ltrim($output), 4)) {
-
- if (preg_match('/^\s*skip\s*(.+)\s*/i', $output, $m)) {
- show_result('SKIP', $tested, $tested_file, "reason: $m[1]", $temp_filenames);
- } else {
- show_result('SKIP', $tested, $tested_file, '', $temp_filenames);
- }
-
- if (isset($old_php)) {
- $php = $old_php;
- }
-
- if (!$cfg['keep']['skip']) {
- @unlink($test_skipif);
- }
-
- return 'SKIPPED';
- }
-
- if (!strncasecmp('info', ltrim($output), 4)) {
- if (preg_match('/^\s*info\s*(.+)\s*/i', $output, $m)) {
- $info = " (info: $m[1])";
- }
- }
-
- if (!strncasecmp('warn', ltrim($output), 4)) {
- if (preg_match('/^\s*warn\s*(.+)\s*/i', $output, $m)) {
- $warn = true; /* only if there is a reason */
- $info = " (warn: $m[1])";
- }
- }
- }
- }
-
- if (@count($section_text['REDIRECTTEST']) == 1) {
- $test_files = array();
-
- $IN_REDIRECT = eval($section_text['REDIRECTTEST']);
- $IN_REDIRECT['via'] = "via [$shortname]\n\t";
- $IN_REDIRECT['dir'] = realpath(dirname($file));
- $IN_REDIRECT['prefix'] = trim($section_text['TEST']);
-
- if (count($IN_REDIRECT['TESTS']) == 1) {
-
- if (is_array($org_file)) {
- $test_files[] = $org_file[1];
- } else {
- $GLOBALS['test_files'] = $test_files;
- find_files($IN_REDIRECT['TESTS']);
-
- foreach($GLOBALS['test_files'] as $f) {
- $test_files[] = array($f, $file);
- }
- }
- $test_cnt += @count($test_files) - 1;
- $test_idx--;
-
- show_redirect_start($IN_REDIRECT['TESTS'], $tested, $tested_file);
-
- // set up environment
- $redirenv = array_merge($environment, $IN_REDIRECT['ENV']);
- $redirenv['REDIR_TEST_DIR'] = realpath($IN_REDIRECT['TESTS']) . DIRECTORY_SEPARATOR;
-
- usort($test_files, "test_sort");
- run_all_tests($test_files, $redirenv, $tested);
-
- show_redirect_ends($IN_REDIRECT['TESTS'], $tested, $tested_file);
-
- // a redirected test never fails
- $IN_REDIRECT = false;
- return 'REDIR';
-
- } else {
-
- $bork_info = "Redirect info must contain exactly one TEST string to be used as redirect directory.";
- show_result("BORK", $bork_info, '', $temp_filenames);
- $PHP_FAILED_TESTS['BORKED'][] = array (
- 'name' => $file,
- 'test_name' => '',
- 'output' => '',
- 'diff' => '',
- 'info' => "$bork_info [$file]",
- );
- }
- }
-
- if (is_array($org_file) || @count($section_text['REDIRECTTEST']) == 1) {
-
- if (is_array($org_file)) {
- $file = $org_file[0];
- }
-
- $bork_info = "Redirected test did not contain redirection info";
- show_result("BORK", $bork_info, '', $temp_filenames);
- $PHP_FAILED_TESTS['BORKED'][] = array (
- 'name' => $file,
- 'test_name' => '',
- 'output' => '',
- 'diff' => '',
- 'info' => "$bork_info [$file]",
- );
- return 'BORKED';
- }
-
- // 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 (array_key_exists('GET', $section_text)) {
- $query_string = trim($section_text['GET']);
- } else {
- $query_string = '';
- }
-
- $env['REDIRECT_STATUS'] = '1';
- $env['QUERY_STRING'] = $query_string;
- $env['PATH_TRANSLATED'] = $test_file;
- $env['SCRIPT_FILENAME'] = $test_file;
-
- if (array_key_exists('COOKIE', $section_text)) {
- $env['HTTP_COOKIE'] = trim($section_text['COOKIE']);
- } else {
- $env['HTTP_COOKIE'] = '';
- }
-
- $args = isset($section_text['ARGS']) ? ' -- ' . $section_text['ARGS'] : '';
-
- if (array_key_exists('POST_RAW', $section_text) && !empty($section_text['POST_RAW'])) {
-
- $post = trim($section_text['POST_RAW']);
- $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;
- }
-
- if ($started) {
- $request .= "\n";
- }
-
- $started = true;
- $request .= $line;
- }
-
- $env['CONTENT_LENGTH'] = strlen($request);
- $env['REQUEST_METHOD'] = 'POST';
-
- if (empty($request)) {
- return 'BORKED';
- }
-
- save_text($tmp_post, $request);
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < $tmp_post";
-
- } else if (array_key_exists('POST', $section_text) && !empty($section_text['POST'])) {
-
- $post = trim($section_text['POST']);
-
- if (array_key_exists('GZIP_POST', $section_text) && function_exists('gzencode')) {
- $post = gzencode($post, 9, FORCE_GZIP);
- $env['HTTP_CONTENT_ENCODING'] = 'gzip';
- } else if (array_key_exists('DEFLATE_POST', $section_text) && function_exists('gzcompress')) {
- $post = gzcompress($post, 9);
- $env['HTTP_CONTENT_ENCODING'] = 'deflate';
- }
-
- save_text($tmp_post, $post);
- $content_length = strlen($post);
-
- $env['REQUEST_METHOD'] = 'POST';
- $env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded';
- $env['CONTENT_LENGTH'] = $content_length;
-
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < $tmp_post";
-
- } else {
-
- $env['REQUEST_METHOD'] = 'GET';
- $env['CONTENT_TYPE'] = '';
- $env['CONTENT_LENGTH'] = '';
-
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\" $args 2>&1";
- }
-
- if ($leak_check) {
- $env['USE_ZEND_ALLOC'] = '0';
-
- if ($valgrind_version >= 330) {
- /* valgrind 3.3.0+ doesn't have --log-file-exactly option */
- $cmd = "valgrind -q --tool=memcheck --trace-children=yes --log-file=$memcheck_filename $cmd";
- } else {
- $cmd = "valgrind -q --tool=memcheck --trace-children=yes --log-file-exactly=$memcheck_filename $cmd";
- }
-
- } else {
- $env['USE_ZEND_ALLOC'] = '1';
- }
-
- if ($DETAILED) echo "
-CONTENT_LENGTH = " . $env['CONTENT_LENGTH'] . "
-CONTENT_TYPE = " . $env['CONTENT_TYPE'] . "
-PATH_TRANSLATED = " . $env['PATH_TRANSLATED'] . "
-QUERY_STRING = " . $env['QUERY_STRING'] . "
-REDIRECT_STATUS = " . $env['REDIRECT_STATUS'] . "
-REQUEST_METHOD = " . $env['REQUEST_METHOD'] . "
-SCRIPT_FILENAME = " . $env['SCRIPT_FILENAME'] . "
-HTTP_COOKIE = " . $env['HTTP_COOKIE'] . "
-COMMAND $cmd
-";
-
- $out = (binary) system_with_timeout($cmd, $env, isset($section_text['STDIN']) ? $section_text['STDIN'] : null);
-
- if (array_key_exists('CLEAN', $section_text) && (!$no_clean || $cfg['keep']['clean'])) {
-
- if (trim($section_text['CLEAN'])) {
- show_file_block('clean', $section_text['CLEAN']);
- save_text($test_clean, trim($section_text['CLEAN']), $temp_clean);
-
- if (!$no_clean) {
- $clean_params = array();
- settings2array($ini_overwrites, $clean_params);
- settings2params($clean_params);
- $extra = substr(PHP_OS, 0, 3) !== "WIN" ?
- "unset REQUEST_METHOD; unset QUERY_STRING; unset PATH_TRANSLATED; unset SCRIPT_FILENAME; unset REQUEST_METHOD;": "";
- system_with_timeout("$extra $php $pass_options -q $clean_params $test_clean", $env);
- }
-
- if (!$cfg['keep']['clean']) {
- @unlink($test_clean);
- }
- }
- }
-
- @unlink($tmp_post);
-
- $leaked = false;
- $passed = false;
-
- if ($leak_check) { // leak check
- $leaked = filesize($memcheck_filename) > 0;
-
- if (!$leaked) {
- @unlink($memcheck_filename);
- }
- }
-
- // Does the output match what is expected?
- $output = preg_replace(b"/\r\n/", b"\n", trim($out));
-
- /* when using CGI, strip the headers from the output */
- $headers = b"";
-
- if (isset($old_php) && preg_match(b"/^(.*?)\r?\n\r?\n(.*)/s", $out, $match)) {
- $output = trim($match[2]);
- $rh = preg_split(b"/[\n\r]+/", $match[1]);
- $headers = array();
-
- foreach ($rh as $line) {
- if (strpos($line, b':') !== false) {
- $line = explode(b':', $line, 2);
- $headers[trim($line[0])] = trim($line[1]);
- }
- }
- }
-
- $failed_headers = false;
-
- if (isset($section_text['EXPECTHEADERS'])) {
- $want = array();
- $wanted_headers = array();
- $lines = preg_split(b"/[\n\r]+/", (binary) $section_text['EXPECTHEADERS']);
-
- foreach($lines as $line) {
- if (strpos($line, b':') !== false) {
- $line = explode(b':', $line, 2);
- $want[trim($line[0])] = trim($line[1]);
- $wanted_headers[] = trim($line[0]) . b': ' . trim($line[1]);
- }
- }
-
- $org_headers = $headers;
- $headers = array();
- $output_headers = array();
-
- foreach($want as $k => $v) {
-
- if (isset($org_headers[$k])) {
- $headers = $org_headers[$k];
- $output_headers[] = $k . b': ' . $org_headers[$k];
- }
-
- if (!isset($org_headers[$k]) || $org_headers[$k] != $v) {
- $failed_headers = true;
- }
- }
-
- ksort($wanted_headers);
- $wanted_headers = join(b"\n", $wanted_headers);
- ksort($output_headers);
- $output_headers = join(b"\n", $output_headers);
- }
-
- show_file_block('out', $output);
-
- if (isset($section_text['EXPECTF']) || isset($section_text['EXPECTREGEX'])) {
-
- if (isset($section_text['EXPECTF'])) {
- $wanted = trim($section_text['EXPECTF']);
- } else {
- $wanted = trim($section_text['EXPECTREGEX']);
- }
-
- show_file_block('exp', $wanted);
- $wanted_re = preg_replace(b'/\r\n/', b"\n", $wanted);
-
- if (isset($section_text['EXPECTF'])) {
-
- // do preg_quote, but miss out any %r delimited sections
- $temp = b"";
- $r = b"%r";
- $startOffset = 0;
- $length = strlen($wanted_re);
- while($startOffset < $length) {
- $start = strpos($wanted_re, $r, $startOffset);
- if ($start !== false) {
- // we have found a start tag
- $end = strpos($wanted_re, $r, $start+2);
- if ($end === false) {
- // unbalanced tag, ignore it.
- $end = $start = $length;
- }
- } else {
- // no more %r sections
- $start = $end = $length;
- }
- // quote a non re portion of the string
- $temp = $temp . preg_quote(substr($wanted_re, $startOffset, ($start - $startOffset)), b'/');
- // add the re unquoted.
- if ($end > $start) {
- $temp = $temp . b'(' . substr($wanted_re, $start+2, ($end - $start-2)). b')';
- }
- $startOffset = $end + 2;
- }
- $wanted_re = $temp;
-
- $wanted_re = str_replace(
- array(b'%binary_string_optional%'),
- version_compare(PHP_VERSION, '6.0.0-dev') == -1 ? b'string' : b'binary string',
- $wanted_re
- );
- $wanted_re = str_replace(
- array(b'%unicode_string_optional%'),
- version_compare(PHP_VERSION, '6.0.0-dev') == -1 ? b'string' : b'Unicode string',
- $wanted_re
- );
- $wanted_re = str_replace(
- array(b'%unicode\|string%', b'%string\|unicode%'),
- version_compare(PHP_VERSION, '6.0.0-dev') == -1 ? b'string' : b'unicode',
- $wanted_re
- );
- $wanted_re = str_replace(
- array(b'%u\|b%', b'%b\|u%'),
- version_compare(PHP_VERSION, '6.0.0-dev') == -1 ? b'' : b'u',
- $wanted_re
- );
- // Stick to basics
- $wanted_re = str_replace(b'%e', b'\\' . DIRECTORY_SEPARATOR, $wanted_re);
- $wanted_re = str_replace(b'%s', b'[^\r\n]+', $wanted_re);
- $wanted_re = str_replace(b'%S', b'[^\r\n]*', $wanted_re);
- $wanted_re = str_replace(b'%a', b'.+', $wanted_re);
- $wanted_re = str_replace(b'%A', b'.*', $wanted_re);
- $wanted_re = str_replace(b'%w', b'\s*', $wanted_re);
- $wanted_re = str_replace(b'%i', b'[+-]?\d+', $wanted_re);
- $wanted_re = str_replace(b'%d', b'\d+', $wanted_re);
- $wanted_re = str_replace(b'%x', b'[0-9a-fA-F]+', $wanted_re);
- $wanted_re = str_replace(b'%f', b'[+-]?\.?\d+\.?\d*(?:[Ee][+-]?\d+)?', $wanted_re);
- $wanted_re = str_replace(b'%c', b'.', $wanted_re);
- // %f allows two points "-.0.0" but that is the best *simple* expression
- }
-/* DEBUG YOUR REGEX HERE
- var_dump($wanted_re);
- print(str_repeat('=', 80) . "\n");
- var_dump($output);
-*/
- if (preg_match(b"/^$wanted_re\$/s", $output)) {
- $passed = true;
- if (!$cfg['keep']['php']) {
- @unlink($test_file);
- }
- if (isset($old_php)) {
- $php = $old_php;
- }
-
- if (!$leaked && !$failed_headers) {
- if (isset($section_text['XFAIL'] )) {
- $warn = true;
- $info = " (warn: XFAIL section but test passes)";
- }else {
- show_result("PASS", $tested, $tested_file, '', $temp_filenames);
- return 'PASSED';
- }
- }
- }
-
- } else {
-
- $wanted = (binary) trim($section_text['EXPECT']);
- $wanted = preg_replace(b'/\r\n/',b"\n", $wanted);
- show_file_block('exp', $wanted);
-
- // compare and leave on success
- if (!strcmp($output, $wanted)) {
- $passed = true;
-
- if (!$cfg['keep']['php']) {
- @unlink($test_file);
- }
-
- if (isset($old_php)) {
- $php = $old_php;
- }
-
- if (!$leaked && !$failed_headers) {
- if (isset($section_text['XFAIL'] )) {
- $warn = true;
- $info = " (warn: XFAIL section but test passes)";
- }else {
- show_result("PASS", $tested, $tested_file, '', $temp_filenames);
- return 'PASSED';
- }
- }
- }
-
- $wanted_re = null;
- }
-
- // Test failed so we need to report details.
- if ($failed_headers) {
- $passed = false;
- $wanted = (binary) $wanted_headers . b"\n--HEADERS--\n" . (binary) $wanted;
- $output = (binary) $output_headers . b"\n--HEADERS--\n" . (binary) $output;
-
- if (isset($wanted_re)) {
- $wanted_re = preg_quote($wanted_headers . "\n--HEADERS--\n", '/') . $wanted_re;
- }
- }
-
- if ($leaked) {
- $restype[] = 'LEAK';
- }
-
- if ($warn) {
- $restype[] = 'WARN';
- }
-
- if (!$passed) {
- if (isset($section_text['XFAIL'])) {
- $restype[] = 'XFAIL';
- $info = ' XFAIL REASON: ' . $section_text['XFAIL'];
- } else {
- $restype[] = 'FAIL';
- }
- }
-
- if (!$passed) {
-
- // write .exp
- if (strpos($log_format, 'E') !== false && file_put_contents($exp_filename, (binary) $wanted, FILE_BINARY) === false) {
- error("Cannot create expected test output - $exp_filename");
- }
-
- // write .out
- if (strpos($log_format, 'O') !== false && file_put_contents($output_filename, (binary) $output, FILE_BINARY) === false) {
- error("Cannot create test output - $output_filename");
- }
-
- // write .diff
- $diff = generate_diff($wanted, $wanted_re, $output);
- if (is_array($IN_REDIRECT)) {
- $diff = "# original source file: $shortname\n" . $diff;
- }
- show_file_block('diff', $diff);
- if (strpos($log_format, 'D') !== false && file_put_contents($diff_filename, (binary) $diff, FILE_BINARY) === false) {
- error("Cannot create test diff - $diff_filename");
- }
-
- // write .sh
- if (strpos($log_format, 'S') !== false && file_put_contents($sh_filename, b"#!/bin/sh
-
-{$cmd}
-", FILE_BINARY) === false) {
- error("Cannot create test shell script - $sh_filename");
- }
- chmod($sh_filename, 0755);
-
- // write .log
- if (strpos($log_format, 'L') !== false && file_put_contents($log_filename, b"
----- EXPECTED OUTPUT
-$wanted
----- ACTUAL OUTPUT
-$output
----- FAILED
-", FILE_BINARY) === false) {
- error("Cannot create test log - $log_filename");
- error_report($file, $log_filename, $tested);
- }
- }
-
- show_result(implode('&', $restype), $tested, $tested_file, $info, $temp_filenames);
-
- foreach ($restype as $type) {
- $PHP_FAILED_TESTS[$type.'ED'][] = array (
- 'name' => $file,
- 'test_name' => (is_array($IN_REDIRECT) ? $IN_REDIRECT['via'] : '') . $tested . " [$tested_file]",
- 'output' => $output_filename,
- 'diff' => $diff_filename,
- 'info' => $info,
- );
- }
-
- if (isset($old_php)) {
- $php = $old_php;
- }
-
- return $restype[0] . 'ED';
-}
-
-function comp_line($l1, $l2, $is_reg)
-{
- if ($is_reg) {
- return preg_match(b'/^'. (binary) $l1 . b'$/s', (binary) $l2);
- } else {
- return !strcmp((binary) $l1, (binary) $l2);
- }
-}
-
-function count_array_diff($ar1, $ar2, $is_reg, $w, $idx1, $idx2, $cnt1, $cnt2, $steps)
-{
- $equal = 0;
-
- while ($idx1 < $cnt1 && $idx2 < $cnt2 && comp_line($ar1[$idx1], $ar2[$idx2], $is_reg)) {
- $idx1++;
- $idx2++;
- $equal++;
- $steps--;
- }
- if (--$steps > 0) {
- $eq1 = 0;
- $st = $steps / 2;
-
- for ($ofs1 = $idx1 + 1; $ofs1 < $cnt1 && $st-- > 0; $ofs1++) {
- $eq = @count_array_diff($ar1, $ar2, $is_reg, $w, $ofs1, $idx2, $cnt1, $cnt2, $st);
-
- if ($eq > $eq1) {
- $eq1 = $eq;
- }
- }
-
- $eq2 = 0;
- $st = $steps;
-
- for ($ofs2 = $idx2 + 1; $ofs2 < $cnt2 && $st-- > 0; $ofs2++) {
- $eq = @count_array_diff($ar1, $ar2, $is_reg, $w, $idx1, $ofs2, $cnt1, $cnt2, $st);
- if ($eq > $eq2) {
- $eq2 = $eq;
- }
- }
-
- if ($eq1 > $eq2) {
- $equal += $eq1;
- } else if ($eq2 > 0) {
- $equal += $eq2;
- }
- }
-
- return $equal;
-}
-
-function generate_array_diff($ar1, $ar2, $is_reg, $w)
-{
- $idx1 = 0; $ofs1 = 0; $cnt1 = @count($ar1);
- $idx2 = 0; $ofs2 = 0; $cnt2 = @count($ar2);
- $diff = array();
- $old1 = array();
- $old2 = array();
-
- while ($idx1 < $cnt1 && $idx2 < $cnt2) {
-
- if (comp_line($ar1[$idx1], $ar2[$idx2], $is_reg)) {
- $idx1++;
- $idx2++;
- continue;
- } else {
-
- $c1 = @count_array_diff($ar1, $ar2, $is_reg, $w, $idx1+1, $idx2, $cnt1, $cnt2, 10);
- $c2 = @count_array_diff($ar1, $ar2, $is_reg, $w, $idx1, $idx2+1, $cnt1, $cnt2, 10);
-
- if ($c1 > $c2) {
- $old1[$idx1] = (binary) sprintf("%03d- ", $idx1+1) . $w[$idx1++];
- $last = 1;
- } else if ($c2 > 0) {
- $old2[$idx2] = (binary) sprintf("%03d+ ", $idx2+1) . $ar2[$idx2++];
- $last = 2;
- } else {
- $old1[$idx1] = (binary) sprintf("%03d- ", $idx1+1) . $w[$idx1++];
- $old2[$idx2] = (binary) sprintf("%03d+ ", $idx2+1) . $ar2[$idx2++];
- }
- }
- }
-
- reset($old1); $k1 = key($old1); $l1 = -2;
- reset($old2); $k2 = key($old2); $l2 = -2;
-
- while ($k1 !== null || $k2 !== null) {
-
- if ($k1 == $l1 + 1 || $k2 === null) {
- $l1 = $k1;
- $diff[] = current($old1);
- $k1 = next($old1) ? key($old1) : null;
- } else if ($k2 == $l2 + 1 || $k1 === null) {
- $l2 = $k2;
- $diff[] = current($old2);
- $k2 = next($old2) ? key($old2) : null;
- } else if ($k1 < $k2) {
- $l1 = $k1;
- $diff[] = current($old1);
- $k1 = next($old1) ? key($old1) : null;
- } else {
- $l2 = $k2;
- $diff[] = current($old2);
- $k2 = next($old2) ? key($old2) : null;
- }
- }
-
- while ($idx1 < $cnt1) {
- $diff[] = (binary) sprintf("%03d- ", $idx1 + 1) . $w[$idx1++];
- }
-
- while ($idx2 < $cnt2) {
- $diff[] = (binary) sprintf("%03d+ ", $idx2 + 1) . $ar2[$idx2++];
- }
-
- return $diff;
-}
-
-function generate_diff($wanted, $wanted_re, $output)
-{
- $w = explode(b"\n", $wanted);
- $o = explode(b"\n", $output);
- $r = is_null($wanted_re) ? $w : explode(b"\n", $wanted_re);
- $diff = generate_array_diff($r, $o, !is_null($wanted_re), $w);
-
- return implode(b"\r\n", $diff);
-}
-
-function error($message)
-{
- echo "ERROR: {$message}\n";
- exit(1);
-}
-
-function settings2array($settings, &$ini_settings)
-{
- foreach($settings as $setting) {
-
- if (strpos($setting, '=') !== false) {
- $setting = explode("=", $setting, 2);
- $name = trim($setting[0]);
- $value = trim($setting[1]);
-
- if ($name == 'extension') {
-
- if (!isset($ini_settings[$name])) {
- $ini_settings[$name] = array();
- }
-
- $ini_settings[$name][] = $value;
-
- } else {
- $ini_settings[$name] = $value;
- }
- }
- }
-}
-
-function settings2params(&$ini_settings)
-{
- $settings = '';
-
- foreach($ini_settings as $name => $value) {
-
- if (is_array($value)) {
- foreach($value as $val) {
- $val = addslashes($val);
- $settings .= " -d \"$name=$val\"";
- }
- } else {
- if (substr(PHP_OS, 0, 3) == "WIN" && !empty($value) && $value{0} == '"') {
- $len = strlen($value);
-
- if ($value{$len - 1} == '"') {
- $value{0} = "'";
- $value{$len - 1} = "'";
- }
- } else {
- $value = addslashes($value);
- }
-
- $settings .= " -d \"$name=$value\"";
- }
- }
-
- $ini_settings = $settings;
-}
-
-function compute_summary()
-{
- global $n_total, $test_results, $ignored_by_ext, $sum_results, $percent_results;
-
- $n_total = count($test_results);
- $n_total += $ignored_by_ext;
- $sum_results = array(
- 'PASSED' => 0,
- 'WARNED' => 0,
- 'SKIPPED' => 0,
- 'FAILED' => 0,
- 'BORKED' => 0,
- 'LEAKED' => 0,
- 'XFAILED' => 0
- );
-
- foreach ($test_results as $v) {
- $sum_results[$v]++;
- }
-
- $sum_results['SKIPPED'] += $ignored_by_ext;
- $percent_results = array();
-
- while (list($v, $n) = each($sum_results)) {
- $percent_results[$v] = (100.0 * $n) / $n_total;
- }
-}
-
-function get_summary($show_ext_summary, $show_html)
-{
- global $exts_skipped, $exts_tested, $n_total, $sum_results, $percent_results, $end_time, $start_time, $failed_test_summary, $PHP_FAILED_TESTS, $leak_check;
-
- $x_total = $n_total - $sum_results['SKIPPED'] - $sum_results['BORKED'];
-
- if ($x_total) {
- $x_warned = (100.0 * $sum_results['WARNED']) / $x_total;
- $x_failed = (100.0 * $sum_results['FAILED']) / $x_total;
- $x_xfailed = (100.0 * $sum_results['XFAILED']) / $x_total;
- $x_leaked = (100.0 * $sum_results['LEAKED']) / $x_total;
- $x_passed = (100.0 * $sum_results['PASSED']) / $x_total;
- } else {
- $x_warned = $x_failed = $x_passed = $x_leaked = $x_xfailed = 0;
- }
-
- $summary = '';
-
- if ($show_html) {
- $summary .= "\n";
- }
-
- if ($show_ext_summary) {
- $summary .= '
-=====================================================================
-TEST RESULT SUMMARY
----------------------------------------------------------------------
-Exts skipped : ' . sprintf('%4d', $exts_skipped) . '
-Exts tested : ' . sprintf('%4d', $exts_tested) . '
----------------------------------------------------------------------
-';
- }
-
- $summary .= '
-Number of tests : ' . sprintf('%4d', $n_total) . ' ' . sprintf('%8d', $x_total);
-
- if ($sum_results['BORKED']) {
- $summary .= '
-Tests borked : ' . sprintf('%4d (%5.1f%%)', $sum_results['BORKED'], $percent_results['BORKED']) . ' --------';
- }
-
- $summary .= '
-Tests skipped : ' . sprintf('%4d (%5.1f%%)', $sum_results['SKIPPED'], $percent_results['SKIPPED']) . ' --------
-Tests warned : ' . sprintf('%4d (%5.1f%%)', $sum_results['WARNED'], $percent_results['WARNED']) . ' ' . sprintf('(%5.1f%%)', $x_warned) . '
-Tests failed : ' . sprintf('%4d (%5.1f%%)', $sum_results['FAILED'], $percent_results['FAILED']) . ' ' . sprintf('(%5.1f%%)', $x_failed) . '
-Expected fail : ' . sprintf('%4d (%5.1f%%)', $sum_results['XFAILED'], $percent_results['XFAILED']) . ' ' . sprintf('(%5.1f%%)', $x_xfailed);
-
- if ($leak_check) {
- $summary .= '
-Tests leaked : ' . sprintf('%4d (%5.1f%%)', $sum_results['LEAKED'], $percent_results['LEAKED']) . ' ' . sprintf('(%5.1f%%)', $x_leaked);
- }
-
- $summary .= '
-Tests passed : ' . sprintf('%4d (%5.1f%%)', $sum_results['PASSED'], $percent_results['PASSED']) . ' ' . sprintf('(%5.1f%%)', $x_passed) . '
----------------------------------------------------------------------
-Time taken : ' . sprintf('%4d seconds', $end_time - $start_time) . '
-=====================================================================
-';
- $failed_test_summary = '';
-
- if (count($PHP_FAILED_TESTS['BORKED'])) {
- $failed_test_summary .= '
-=====================================================================
-BORKED TEST SUMMARY
----------------------------------------------------------------------
-';
- foreach ($PHP_FAILED_TESTS['BORKED'] as $failed_test_data) {
- $failed_test_summary .= $failed_test_data['info'] . "\n";
- }
-
- $failed_test_summary .= "=====================================================================\n";
- }
-
- if (count($PHP_FAILED_TESTS['FAILED'])) {
- $failed_test_summary .= '
-=====================================================================
-FAILED TEST SUMMARY
----------------------------------------------------------------------
-';
- foreach ($PHP_FAILED_TESTS['FAILED'] as $failed_test_data) {
- $failed_test_summary .= $failed_test_data['test_name'] . $failed_test_data['info'] . "\n";
- }
- $failed_test_summary .= "=====================================================================\n";
- }
- if (count($PHP_FAILED_TESTS['XFAILED'])) {
- $failed_test_summary .= '
-=====================================================================
-EXPECTED FAILED TEST SUMMARY
----------------------------------------------------------------------
-';
- foreach ($PHP_FAILED_TESTS['XFAILED'] as $failed_test_data) {
- $failed_test_summary .= $failed_test_data['test_name'] . $failed_test_data['info'] . "\n";
- }
- $failed_test_summary .= "=====================================================================\n";
- }
-
- if (count($PHP_FAILED_TESTS['WARNED'])) {
- $failed_test_summary .= '
-=====================================================================
-WARNED TEST SUMMARY
----------------------------------------------------------------------
-';
- foreach ($PHP_FAILED_TESTS['WARNED'] as $failed_test_data) {
- $failed_test_summary .= $failed_test_data['test_name'] . $failed_test_data['info'] . "\n";
- }
-
- $failed_test_summary .= "=====================================================================\n";
- }
-
- if (count($PHP_FAILED_TESTS['LEAKED'])) {
- $failed_test_summary .= '
-=====================================================================
-LEAKED TEST SUMMARY
----------------------------------------------------------------------
-';
- foreach ($PHP_FAILED_TESTS['LEAKED'] as $failed_test_data) {
- $failed_test_summary .= $failed_test_data['test_name'] . $failed_test_data['info'] . "\n";
- }
-
- $failed_test_summary .= "=====================================================================\n";
- }
-
- if ($failed_test_summary && !getenv('NO_PHPTEST_SUMMARY')) {
- $summary .= $failed_test_summary;
- }
-
- if ($show_html) {
- $summary .= "
";
- }
-
- return $summary;
-}
-
-function show_start($start_time)
-{
- global $html_output, $html_file;
-
- if ($html_output) {
- fwrite($html_file, "Time Start: " . date('Y-m-d H:i:s', $start_time) . "
\n");
- fwrite($html_file, "\n");
- }
-
- echo "TIME START " . date('Y-m-d H:i:s', $start_time) . "\n=====================================================================\n";
-}
-
-function show_end($end_time)
-{
- global $html_output, $html_file;
-
- if ($html_output) {
- fwrite($html_file, "
\n");
- fwrite($html_file, "Time End: " . date('Y-m-d H:i:s', $end_time) . "
\n");
- }
-
- echo "=====================================================================\nTIME END " . date('Y-m-d H:i:s', $end_time) . "\n";
-}
-
-function show_summary()
-{
- global $html_output, $html_file;
-
- if ($html_output) {
- fwrite($html_file, "
\n" . get_summary(true, true));
- }
-
- echo get_summary(true, false);
-}
-
-function show_redirect_start($tests, $tested, $tested_file)
-{
- global $html_output, $html_file;
-
- if ($html_output) {
- fwrite($html_file, "---> $tests ($tested [$tested_file]) begin |
\n");
- }
-
- echo "---> $tests ($tested [$tested_file]) begin\n";
-}
-
-function show_redirect_ends($tests, $tested, $tested_file)
-{
- global $html_output, $html_file;
-
- if ($html_output) {
- fwrite($html_file, "---> $tests ($tested [$tested_file]) done |
\n");
- }
-
- echo "---> $tests ($tested [$tested_file]) done\n";
-}
-
-function show_test($test_idx, $shortname)
-{
- global $test_cnt;
-
- echo "TEST $test_idx/$test_cnt [$shortname]\r";
- flush();
-}
-
-function show_result($result, $tested, $tested_file, $extra = '', $temp_filenames = null)
-{
- global $html_output, $html_file, $temp_target, $temp_urlbase;
-
- echo "$result $tested [$tested_file] $extra\n";
-
- if ($html_output) {
-
- if (isset($temp_filenames['file']) && file_exists($temp_filenames['file'])) {
- $url = str_replace($temp_target, $temp_urlbase, $temp_filenames['file']);
- $tested = "$tested";
- }
-
- if (isset($temp_filenames['skip']) && file_exists($temp_filenames['skip'])) {
-
- if (empty($extra)) {
- $extra = "skipif";
- }
-
- $url = str_replace($temp_target, $temp_urlbase, $temp_filenames['skip']);
- $extra = "$extra";
-
- } else if (empty($extra)) {
- $extra = " ";
- }
-
- if (isset($temp_filenames['diff']) && file_exists($temp_filenames['diff'])) {
- $url = str_replace($temp_target, $temp_urlbase, $temp_filenames['diff']);
- $diff = "diff";
- } else {
- $diff = " ";
- }
-
- if (isset($temp_filenames['mem']) && file_exists($temp_filenames['mem'])) {
- $url = str_replace($temp_target, $temp_urlbase, $temp_filenames['mem']);
- $mem = "leaks";
- } else {
- $mem = " ";
- }
-
- fwrite($html_file,
- "" .
- "$result | " .
- "$tested | " .
- "$extra | " .
- "$diff | " .
- "$mem | " .
- "
\n");
- }
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim: noet sw=4 ts=4
- */
-?>
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/escape/Foo.tpl.php b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/escape/Foo.tpl.php
deleted file mode 100644
index 48c5e52..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/escape/Foo.tpl.php
+++ /dev/null
@@ -1,3 +0,0 @@
-var1;
-?>
\ No newline at end of file
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/escape/echostring.tpl.php b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/escape/echostring.tpl.php
deleted file mode 100644
index 7833ffb..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/escape/echostring.tpl.php
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/escape/object.phpt b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/escape/object.phpt
deleted file mode 100644
index a31ca9f..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/escape/object.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-\PEAR2\Templates\Savant\Main::addEscaoe() object variable escaping test
---FILE--
-setEscape('htmlspecialchars');
-
-class Foo
-{
- public $var1;
-}
-
-$object = new Foo();
-$object->var1 = '';
-
-$test->assertEquals(htmlspecialchars($object->var1), $savant->render($object), 'render object with variable escaping');
-
-$test->assertEquals($object->var1, $savant->render($object, 'raw.tpl.php'), 'render object with raw variable access');
-?>
-===DONE===
---EXPECT--
-===DONE===
\ No newline at end of file
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/escape/raw.tpl.php b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/escape/raw.tpl.php
deleted file mode 100644
index d020c83..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/escape/raw.tpl.php
+++ /dev/null
@@ -1,3 +0,0 @@
-getRaw('var1');
-?>
\ No newline at end of file
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/escape/string.phpt b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/escape/string.phpt
deleted file mode 100644
index e5e870d..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/escape/string.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-\PEAR2\Templates\Savant\Main::render() string with addEscape() test
---FILE--
-setEscape('htmlspecialchars');
-
-$string = 'test';
-$test->assertEquals($string, $savant->escape($string), 'render');
-
-$string = '';
-$test->assertEquals(htmlspecialchars($string), $savant->escape($string), 'render string with special chars');
-
-?>
-===DONE===
---EXPECT--
-===DONE===
\ No newline at end of file
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/globals/basic.phpt b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/globals/basic.phpt
deleted file mode 100644
index 7394263..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/globals/basic.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-\PEAR2\Templates\Savant\Main::addGlobal() basic test
---FILE--
-addGlobal('foo', true);
-
-echo $savvy->render(null, 'basic.tpl.php');
-
-?>
---EXPECT--
-===DONE===
\ No newline at end of file
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/globals/basic.tpl.php b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/globals/basic.tpl.php
deleted file mode 100644
index 5df37bd..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/globals/basic.tpl.php
+++ /dev/null
@@ -1,6 +0,0 @@
-
\ No newline at end of file
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/globals/escape.arrays.phpt b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/globals/escape.arrays.phpt
deleted file mode 100644
index 8a19b99..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/globals/escape.arrays.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-\PEAR2\Templates\Savant\Main::addGlobal() Escape added global array
---FILE--
-setEscape('htmlspecialchars');
-
-$unescaped = array(
- 'Blah'
-);
-
-$savvy->addGlobal('foo', $unescaped);
-
-$escaped = $savvy->getGlobals();
-
-echo $escaped['foo'][0];
-
-?>
---EXPECT--
-<a href="Blah">Blah</a>
\ No newline at end of file
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/globals/escape.nestedarrays.phpt b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/globals/escape.nestedarrays.phpt
deleted file mode 100644
index 84b41c2..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/globals/escape.nestedarrays.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-\PEAR2\Templates\Savant\Main::addGlobal() Escape added global array
---FILE--
-setEscape('htmlspecialchars');
-
-$unescaped = array(
- 'Blah'
-);
-
-$savvy->addGlobal('foo', array($unescaped));
-
-$escaped = $savvy->getGlobals();
-
-echo $escaped['foo'][0][0];
-
-?>
---EXPECT--
-<a href="Blah">Blah</a>
\ No newline at end of file
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/globals/escape.phpt b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/globals/escape.phpt
deleted file mode 100644
index facee27..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/globals/escape.phpt
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-\PEAR2\Templates\Savant\Main::addGlobal() Escape added globals test
---FILE--
-setEscape('myEscape');
-
-$savvy->addGlobal('foo', 'lalalala');
-
-?>
---EXPECT--
-===DONE===
\ No newline at end of file
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/Foo.tpl.php b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/Foo.tpl.php
deleted file mode 100644
index 83c9b5f..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/Foo.tpl.php
+++ /dev/null
@@ -1,2 +0,0 @@
-
-var1 ?>
\ No newline at end of file
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/array.phpt b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/array.phpt
deleted file mode 100644
index 4ccaef0..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/array.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-\PEAR2\Templates\Savant\Main::render() array test
---FILE--
-assertEquals('123', $savant->render($array), 'render array');
-
-$array = array(1,2,3);
-$test->assertEquals('123', $savant->render($array, 'echostring.tpl.php'), 'render array through custom template');
-
-?>
-===DONE===
---EXPECT--
-===DONE===
\ No newline at end of file
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/echostring.tpl.php b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/echostring.tpl.php
deleted file mode 100644
index 8bad128..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/echostring.tpl.php
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/fastcompile.phpt b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/fastcompile.phpt
deleted file mode 100644
index f754aa3..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/fastcompile.phpt
+++ /dev/null
@@ -1,49 +0,0 @@
---TEST--
-\PEAR2\Templates\Savant\Main::render() fast compiler test
---FILE--
-var1 = ' is my class';
-
-$savant->setEscape();
-mkdir(__DIR__ . '/compiled');
-$compiler = new PEAR2\Templates\Savant\BasicFastCompiler(__DIR__ . DIRECTORY_SEPARATOR . 'compiled');
-$savant->setCompiler($compiler);
-
-$test->assertEquals(__DIR__ . DIRECTORY_SEPARATOR . 'compiled' . DIRECTORY_SEPARATOR .
- md5('.' . DIRECTORY_SEPARATOR . 'Foo.tpl.php'), $savant->template('Foo.tpl.php'),
- 'verify compiler is called');
-$test->assertEquals("var1 . '';", file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'compiled' . DIRECTORY_SEPARATOR .
- md5('.' . DIRECTORY_SEPARATOR . 'Foo.tpl.php')), 'compiled template');
-
-$test->assertEquals('Foo is my class', $savant->render($object), 'render object');
-
-$test->assertEquals('test', $savant->render($object, 'echostring.tpl.php'), 'render object with custom template');
-
-?>
-===DONE===
---CLEAN--
-
---EXPECT--
-===DONE===
\ No newline at end of file
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/object.phpt b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/object.phpt
deleted file mode 100644
index c63ff6a..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/object.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-\PEAR2\Templates\Savant\Main::render() object test
---FILE--
-var1 = ' is my class';
-
-$savant->setEscape();
-
-$test->assertEquals('Foo is my class', $savant->render($object), 'render object');
-
-$test->assertEquals('test', $savant->render($object, 'echostring.tpl.php'), 'render object with custom template');
-
-?>
-===DONE===
---EXPECT--
-===DONE===
\ No newline at end of file
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/string.phpt b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/string.phpt
deleted file mode 100644
index 2349112..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/render/string.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-\PEAR2\Templates\Savant\Main::render() string test
---FILE--
-setEscape('htmlspecialchars');
-
-$string = 'test';
-$test->assertEquals($string, $savant->render($string), 'render');
-
-$string = '';
-$test->assertEquals(htmlspecialchars($string), $savant->render($string), 'render string with special chars');
-
-$string = 'test';
-$test->assertEquals($string, $savant->render($string, 'echostring.tpl.php'), 'render string through template');
-
-$string = '';
-$test->assertEquals(htmlspecialchars($string), $savant->render($string, 'echostring.tpl.php'), 'render string with special chars through template');
-?>
-===DONE===
---EXPECT--
-===DONE===
\ No newline at end of file
diff --git a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/test_framework.php.inc b/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/test_framework.php.inc
deleted file mode 100644
index 3bcade3..0000000
--- a/vendor/tests/pear2.php.net/PEAR2_Templates_Savant/test_framework.php.inc
+++ /dev/null
@@ -1,210 +0,0 @@
-_diffonly = $diffonly;
- $this->_errors = array();
- }
-
- function assertTrue($test, $message)
- {
- if ($test === true) {
- return true;
- }
- $this->_failTest(debug_backtrace(), $message);
- echo "Unexpected non-true value: \n";
- var_export($test);
- echo "\n'$message'\n";
- return false;
- }
-
- function assertIsa($control, $test, $message)
- {
- if (is_a($test, $control)) {
- return true;
- }
- $this->_failTest(debug_backtrace(), $message);
- echo "Unexpected non-$control object: \n";
- var_export($test);
- echo "\n'$message'\n";
- return false;
- }
-
- function assertNull($test, $message)
- {
- if ($test === null) {
- return true;
- }
- $this->_failTest(debug_backtrace(), $message);
- echo "Unexpected non-null value: \n";
- var_export($test);
- echo "\n'$message'\n";
- return false;
- }
-
- function assertNotNull($test, $message)
- {
- if ($test !== null) {
- return true;
- }
- $this->_failTest(debug_backtrace(), $message);
- echo "Unexpected null: \n";
- var_export($test);
- echo "\n'$message'\n";
- return false;
- }
-
- function assertSame($test, $test1, $message)
- {
- if ($test === $test1) {
- return true;
- }
- $this->_failTest(debug_backtrace(), $message);
- echo "Unexpectedly two vars are not the same thing: \n";
- echo "\n'$message'\n";
- return false;
- }
-
- function assertNotSame($test, $test1, $message)
- {
- if ($test !== $test1) {
- return true;
- }
- $this->_failTest(debug_backtrace(), $message);
- echo "Unexpectedly two vars are the same thing: \n";
- echo "\n'$message'\n";
- return false;
- }
-
- function assertFalse($test, $message)
- {
- if ($test === false) {
- return true;
- }
- $this->_failTest(debug_backtrace(), $message);
- echo "Unexpected non-false value: \n";
- var_export($test);
- echo "\n'$message'\n";
- return false;
- }
-
- function assertNotTrue($test, $message)
- {
- if (!$test) {
- return true;
- }
- $this->_failTest(debug_backtrace(), $message);
- echo "Unexpected loose true value: \n";
- var_export($test);
- echo "\n'$message'\n";
- return false;
- }
-
- function assertNotFalse($test, $message)
- {
- if ($test) {
- return true;
- }
- $this->_failTest(debug_backtrace(), $message);
- echo "Unexpected loose false value: \n";
- var_export($test);
- echo "\n'$message'\n";
- return false;
- }
-
- function assertRegex($regex, $test, $message)
- {
- if (!preg_match($regex, $test)) {
- $this->_failTest(debug_backtrace(), $message);
- echo "Expecting:\nText Matching Regular Expression $regex\n";
- echo "\nReceived:\n";
- var_export($test);
- echo "\n";
- return false;
- }
- return true;
- }
-
- function assertException($exception, $class, $emessage, $message)
- {
- if (!($exception instanceof $class)) {
- $this->_failTest(debug_backtrace(), $message);
- echo "Expecting class $class, got ", get_class($exception);
- }
- $this->assertEquals($emessage, $exception->getMessage(), $message, debug_backtrace());
- }
-
- function assertEquals($control, $test, $message, $trace = null)
- {
- if (!$trace) {
- $trace = debug_backtrace();
- }
- if (str_replace(array("\r", "\n"), array('', ''),
- var_export($control, true)) != str_replace(array("\r", "\n"), array('', ''),
- var_export($test, true))) {
- $this->_failTest($trace, $message);
- if (class_exists('Text_Diff')) {
- echo "Diff of expecting/received:\n";
- $diff = new Text_Diff(
- explode("\n", var_export($control, true)),
- explode("\n", var_export($test, true)));
-
- // Output the diff in unified format.
- $renderer = new Text_Diff_Renderer_unified();
- echo $renderer->render($diff);
- if ($this->_diffonly) {
- return false;
- }
- }
- echo "Expecting:\n";
- var_export($control);
- echo "\nReceived:\n";
- var_export($test);
- echo "\n";
- return false;
- }
- return true;
- }
-
- function assertFileExists($fname, $message)
- {
- if (!@file_exists($fname)) {
- $this->_failTest(debug_backtrace(), $message);
- echo "File '$fname' does not exist, and should\n";
- return false;
- }
- return true;
- }
-
- function assertFileNotExists($fname, $message)
- {
- if (@file_exists($fname)) {
- $this->_failTest(debug_backtrace(), $message);
- echo "File '$fname' exists, and should not\n";
- return false;
- }
- return true;
- }
-
- function _failTest($trace, $message)
- {
- echo 'Test Failure: "' . $message . "\"\n in " . $trace[0]['file'] . ' line ' .
- $trace[0]['line'] . "\n";
- }
-
- function showAll()
- {
- $this->_diffonly = false;
- }
-}
-$test = new PEAR2_PHPT();
-?>