diff options
author | John Coggeshall <john@php.net> | 2002-11-01 00:22:02 +0000 |
---|---|---|
committer | John Coggeshall <john@php.net> | 2002-11-01 00:22:02 +0000 |
commit | 6ac365896c517fe159064dd3da6db1c63cffcda9 (patch) | |
tree | 74b90a1945197c7084d76da14482791f599706a6 /run-tests2.php | |
parent | 294b419d673eb545f59975ba8ab2e2cdc4e278ce (diff) | |
download | php-git-6ac365896c517fe159064dd3da6db1c63cffcda9.tar.gz |
Modified the experimental new test class to make it easier to port to the
web. Pushed all echo statements through a function that can be
overwritten, changed the way pass/skip/fail is handled (separate function)
that of course can also be overwritten. To begin testing of a web-based
test script also created a webHarness class which will output HTML. To
use, just $a = new webHarness(); instead of $a = new testHarness(); A few
modifications still must be made to remove the CLI reliance completely.
Also modified a test script description.
Diffstat (limited to 'run-tests2.php')
-rw-r--r-- | run-tests2.php | 245 |
1 files changed, 210 insertions, 35 deletions
diff --git a/run-tests2.php b/run-tests2.php index 98c3b30e09..2ca32ace2b 100644 --- a/run-tests2.php +++ b/run-tests2.php @@ -18,6 +18,7 @@ | Marcus Boerger <helly@php.net> | | Derick Rethans <derick@php.net> | | Sander Roobol <sander@php.net> | + | John Coggeshall <john@php.net | | (based on version by: Stig Bakken <ssb@fast.no>) | | (based on the PHP 3 test framework by Rasmus Lerdorf) | +----------------------------------------------------------------------+ @@ -28,6 +29,134 @@ error_reporting(E_ALL); define('PHP_QA_EMAIL', 'php-qa@lists.php.net'); define('QA_SUBMISSION_PAGE', 'http://qa.php.net/buildtest-process.php'); +class webHarness extends testHarness { + + var $textdata; + + function checkSafeMode() { + if (ini_get('safe_mode')) { + +?> +<CENTER> +<TABLE CELLPADDING=5 CELLSPACING=0 BORDER=1> +<TR> +<TD BGCOLOR="#FE8C97" ALIGN=CENTER><B>WARNING</B> +<HR NOSHADE COLOR=#000000> +You are running this test-suite with "safe_mode" <B>ENABLED</B>!<BR><BR> +Chances are high that none of the tests will work at all, depending on +how you configured "safe_mode". +</TD> +</TR> +</TABLE> +</CENTER> +<?php + return true; + } + return false; + } + + function runHeader() { + +?> +<TABLE CELLPADDING=3 CELLSPACING=0 BORDER=0 STYLE="border: thin solid black;"> +<TR> + <TD>TESTED FUNCTIONALITY</TD> + <TD>RESULT</TD> +</TR> +<?php + + } + + function runFooter() { + + +?> +<TR> +<TD COLSPAN=2 ALIGN=CENTER><FONT SIZE=3>Additional Notes</FONT><HR><?php $this->displaymsg(); ?></TD> +</TR> +</TABLE><BR><BR> +<?php + } + + function error($message) + { + $this->writemsg("ERROR: {$message}\n"); + exit(1); + } + + // Use this function to do any displaying of text, so that + // things can be over-written as necessary. + + function writemsg($msg) { + + $this->textdata = $this->textdata . $msg; + + } + + function displaymsg() { + +?> +<TEXTAREA ROWS=10 COLS=80><?=$this->textdata?></TEXTAREA> +<?php + } + + // Another wrapper function, this one should be used any time + // a particular test passes or fails + + function showstatus($item, $status, $reason = '') + { + static $color = "#FAE998"; + + $color = ($color == "#FAE998") ? "#FFFFFF" : "#FAE998"; + + switch($status) { + + case 'PASSED': + + ?> + <TR> + <TD BGCOLOR=<?=$color?>><?=$item?></TD> + <TD VALIGN=CENTER ALIGN=CENTER BGCOLOR=<?=$color?> ROWSPAN=2><FONT COLOR=#00FF00>PASSED</FONT></TD> + </TR> + <TR> + <TD BGCOLOR=<?=$color?>>Notes: <?=htmlentities($reason)?></TD> + </TR> + <?php + + break; + + case 'FAILED': + + ?> + <TR> + <TD BGCOLOR=<?=$color?>><?=$item?></TD> + <TD VALIGN=CENTER ALIGN=CENTER BGCOLOR=<?=$color?> ROWSPAN=2><FONT COLOR=#FF0000>FAILED</FONT></TD> + </TR> + <TR> + <TD BGCOLOR=<?=$color?>>Notes: <?=htmlentities($reason)?></TD> + </TR> + <?php + + break; + + case 'SKIPPED': + + ?> + <TR> + <TD BGCOLOR=<?=$color?>><?=$item?></TD> + <TD VALIGN=CENTER ALIGN=CENTER BGCOLOR=<?=$color?> ROWSPAN=2><FONT COLOR=#000000>SKIPPED</FONT></TD> + </TR> + <TR> + <TD BGCOLOR=<?=$color?>>Notes: <?=htmlentities($reason)?></TD> + </TR> + <?php + break; + + } + + } +} + class testHarness { var $cwd; var $TEST_PHP_SRCDIR; @@ -103,6 +232,43 @@ class testHarness { $this->run(); $this->summarizeResults(); } + + // Use this function to do any displaying of text, so that + // things can be over-written as necessary. + + function writemsg($msg) { + + echo $msg; + + } + + // Another wrapper function, this one should be used any time + // a particular test passes or fails + + function showstatus($item, $status, $reason = '') { + + switch($status) { + + case 'PASSED': + + $this->writemsg("PASSED: $item ($reason)\n"); + + break; + + case 'FAILED': + + $this->writemsg("FAILED: $item ($reason)\n"); + + break; + + case 'SKIPPED': + + $this->writemsg("SKIPPED: $item ($reason)\n"); + break; + + } + + } function help() { @@ -130,8 +296,8 @@ class testHarness { if ($argv[$i][0] != '-') continue; $opt = $argv[$i++][1]; $value = 0; - if ($argv[$i][0] != '-') { - $value = $argv[$i++]; + if (@$argv[$i][0] != '-') { + @$value = $argv[$i++]; } switch($opt) { case 'd': @@ -206,7 +372,7 @@ class testHarness { function checkSafeMode() { if (ini_get('safe_mode')) { - echo <<< SAFE_MODE_WARNING + $safewarn = <<< SAFE_MODE_WARNING +-----------------------------------------------------------+ | ! WARNING ! | @@ -218,6 +384,7 @@ class testHarness { SAFE_MODE_WARNING; + writemsg($safewarn); return true; } return false; @@ -233,7 +400,7 @@ SAFE_MODE_WARNING; $ini=php_ini_scanned_files(); } - echo "\n$this->ddash\n". + $this->writemsg("\n$this->ddash\n". "CWD : {$this->cwd}\n". "PHP : {$this->TEST_PHP_EXECUTABLE}\n". "PHP_SAPI : " . PHP_SAPI . "\n". @@ -241,11 +408,11 @@ SAFE_MODE_WARNING; "PHP_OS : " . PHP_OS . "\n". "INI actual : " . realpath(get_cfg_var('cfg_file_path')) . "\n". "More .INIs : " . str_replace("\n","", $ini) . "\n". - "Test Dirs : "; + "Test Dirs : "); foreach ($this->test_dirs as $test_dir) { - echo "{$test_dir}\n "; + $this->writemsg("{$test_dir}\n "); } - echo "\n$this->ddash\n"; + $this->writemsg("\n$this->ddash\n"); } function loadFileList() @@ -290,7 +457,16 @@ SAFE_MODE_WARNING; function runHeader() { - echo "TIME START " . date('Y-m-d H:i:s', $this->start_time) . "\n".$this->ddash."\n"; + $this->writemsg("TIME START " . date('Y-m-d H:i:s', $this->start_time) . "\n".$this->ddash."\n"); + $this->writemsg("Running selected tests.\n"); + } + + // Probably unnecessary for CLI, but used when overloading a + // web-based test class + + function runFooter() + { + } function run() @@ -299,7 +475,7 @@ SAFE_MODE_WARNING; $this->runHeader(); // Run selected tests. if (count($this->test_to_run)) { - echo "Running selected tests.\n"; + foreach($this->test_to_run as $name=>$runnable) { if(!preg_match("/\.phpt$/", $name)) continue; @@ -313,12 +489,13 @@ SAFE_MODE_WARNING; } } $this->end_time = time(); + $this->runFooter(); } function summarizeResults() { if (count($this->test_results) == 0) { - echo "No tests were run.\n"; + $this->writemsg("No tests were run.\n"); return; } @@ -335,7 +512,7 @@ SAFE_MODE_WARNING; $percent_results[$v] = (100.0 * $n) / $n_total; } - echo "\n".$this->ddash."\n". + $this->writemsg("\n".$this->ddash."\n". "TIME END " . date('Y-m-d H:i:s', $this->end_time) . "\n". $this->ddash."\n". "TEST RESULT SUMMARY\n". @@ -349,7 +526,7 @@ SAFE_MODE_WARNING; "Tests passed : " . sprintf("%4d (%2.1f%%)",$sum_results['PASSED'],$percent_results['PASSED']) . "\n". $this->sdash."\n". "Time taken : " . sprintf("%4d seconds", $this->end_time - $this->start_time) . "\n". - $this->ddash."\n"; + $this->ddash."\n"); $failed_test_summary = ''; if ($this->failed_tests) { @@ -362,13 +539,13 @@ SAFE_MODE_WARNING; } if ($failed_test_summary && !$this->NO_PHPTEST_SUMMARY) { - echo $failed_test_summary; + $this->writemsg($failed_test_summary); } /* We got failed Tests, offer the user to send and e-mail to QA team, unless NO_INTERACTION is set */ if ($sum_results['FAILED'] && !$this->NO_INTERACTION) { $fp = fopen("php://stdin", "r+"); - echo "Some tests have failed, would you like to send the\nreport to PHP's QA team? [Yn]: "; + $this->writemsg("Some tests have failed, would you like to send the\nreport to PHP's QA team? [Yn]: "); $user_input = fgets($fp, 10); if (strlen(trim($user_input)) == 0 || strtolower($user_input[0]) == 'y') { @@ -420,7 +597,7 @@ SAFE_MODE_WARNING; fwrite($fp, $failed_tests_data); fclose($fp); - echo "\nThe test script was unable to automatically send the report to PHP's QA Team\nPlease send ".$output_file." to ".PHP_QA_EMAIL." manually, thank you.\n"; + $this->writemsg("\nThe test script was unable to automatically send the report to PHP's QA Team\nPlease send ".$output_file." to ".PHP_QA_EMAIL." manually, thank you.\n"); } } } @@ -524,13 +701,10 @@ SAFE_MODE_WARNING; $output = `{$this->TEST_PHP_EXECUTABLE} $tmp_skipif`; @unlink($tmp_skipif); if (ereg("^skip", trim($output))){ - echo "SKIP {$section_text['TEST']}"; + $reason = (ereg("^skip[[:space:]]*(.+)\$", trim($output))) ? ereg_replace("^skip[[:space:]]*(.+)\$", "\\1", trim($output)) : FALSE; - if ($reason) { - echo " (reason: $reason)\n"; - } else { - echo "\n"; - } + $this->showstatus($section_text['TEST'], 'SKIPPED', $reason); + return 'SKIPPED'; } } @@ -544,7 +718,7 @@ SAFE_MODE_WARNING; function run_test($file) { if ($this->TEST_PHP_DETAILED) - echo "\n=================\nTEST $file\n"; + $this->writemsg("\n=================\nTEST $file\n"); $section_text = $this->getSectionText($file); @@ -609,14 +783,14 @@ SAFE_MODE_WARNING; } if ($this->TEST_PHP_DETAILED) - echo "\nCONTENT_LENGTH = " . $env['CONTENT_LENGTH'] . + $this->writemsg("\nCONTENT_LENGTH = " . $env['CONTENT_LENGTH'] . "\nCONTENT_TYPE = " . $env['CONTENT_TYPE'] . "\nPATH_TRANSLATED = " . $env['PATH_TRANSLATED'] . "\nQUERY_STRING = " . $env['QUERY_STRING'] . "\nREDIRECT_STATUS = " . $env['REDIRECT_STATUS'] . "\nREQUEST_METHOD = " . $env['REQUEST_METHOD'] . "\nSCRIPT_FILENAME = " . $env['SCRIPT_FILENAME'] . - "\nCOMMAND $cmd\n"; + "\nCOMMAND $cmd\n"); $this->setEnvironment($env); @@ -653,7 +827,7 @@ SAFE_MODE_WARNING; */ if (preg_match("/^$wanted_re\$/s", $output)) { @unlink($tmp_file); - echo "PASS $tested\n"; + $this->showstatus($tested, 'PASSED'); return 'PASSED'; } @@ -664,13 +838,13 @@ SAFE_MODE_WARNING; $ok = (0 == strcmp($output,$wanted)); if ($ok) { @unlink($tmp_file); - echo "PASS $tested\n"; + $this->showstatus($tested, 'PASSED'); return 'PASSED'; } } // Test failed so we need to report details. - echo "FAIL $tested\n"; + $this->showstatus($tested, 'FAILED'); $this->failed_tests[] = array( 'name' => $file, @@ -726,7 +900,7 @@ SAFE_MODE_WARNING; return FALSE; } - echo "Posting to {$url_bits['host']} {$url_bits['path']}\n"; + $this->writemsg("Posting to {$url_bits['host']} {$url_bits['path']}\n"); fwrite($fs, "POST ".$url_bits['path']." HTTP/1.1\r\n"); fwrite($fs, "Host: ".$url_bits['host']."\r\n"); fwrite($fs, "User-Agent: QA Browser 0.1\r\n"); @@ -749,7 +923,7 @@ SAFE_MODE_WARNING; fwrite($fp,$text); fclose($fp); if (1 < $this->TEST_PHP_DETAILED) { - echo "\nFILE $filename {{{\n$text\n}}}\n"; + $this->writemsg("\nFILE $filename {{{\n$text\n}}}\n"); } } @@ -761,13 +935,14 @@ SAFE_MODE_WARNING; $testname = realpath($testname); $logname = realpath($logname); switch ($this->TEST_PHP_ERROR_STYLE) { + default: case 'MSVC': - echo $testname . "(1) : $tested\n"; - echo $logname . "(1) : $tested\n"; + $this->writemsg($testname . "(1) : $tested\n"); + $this->writemsg($logname . "(1) : $tested\n"); break; case 'EMACS': - echo $testname . ":1: $tested\n"; - echo $logname . ":1: $tested\n"; + $this->writemsg($testname . ":1: $tested\n"); + $this->writemsg($logname . ":1: $tested\n"); break; } } @@ -789,12 +964,12 @@ SAFE_MODE_WARNING; function error($message) { - echo "ERROR: {$message}\n"; + $this->writemsg("ERROR: {$message}\n"); exit(1); } } -$test = new testHarness(); +$test = new webHarness(); /* * Local variables: * tab-width: 4 |