1 changed files with 0 additions and 216 deletions
@ -1,216 +0,0 @@ |
|||
<?php |
|||
/* This file is part of PHP test framework for ext/sybase_ct |
|||
* |
|||
* $Id$ |
|||
*/ |
|||
|
|||
// {{{ class PHPTExpectancy
|
|||
// Abstract base class for expectancies
|
|||
class PHPTExpectancy { |
|||
var |
|||
$expected = ''; |
|||
|
|||
function PHPTExpectancy($expected) { |
|||
$this->expected= $expected; |
|||
} |
|||
|
|||
function matches($output) { } |
|||
} |
|||
// }}}
|
|||
|
|||
// {{{ class PHPTRegexExpectancy
|
|||
// Expectancy class for regular expressions
|
|||
class PHPTRegexExpectancy extends PHPTExpectancy { |
|||
|
|||
function matches($output) { |
|||
return preg_match('°^'.strtr(preg_quote(rtrim($this->expected), '°'), array( |
|||
'%s' => '(.+)', |
|||
'%d' => '([0-9]+)' |
|||
)).'°', $output); |
|||
} |
|||
} |
|||
// }}}
|
|||
|
|||
// {{{ class PHPTTest
|
|||
// Represents a single .phpt-style test
|
|||
class PHPTTest { |
|||
var |
|||
$name = '', |
|||
$description = '', |
|||
$skipif = '', |
|||
$code = '', |
|||
$expectancy = NULL, |
|||
$output = ''; |
|||
|
|||
function &fromFile($filename) { |
|||
$fd= fopen($filename, 'r'); |
|||
|
|||
$sections= array(); |
|||
$current= NULL; |
|||
while (!feof($fd)) { |
|||
$line= fgets($fd, 0xFFFF); |
|||
if (1 == sscanf($line, '--%[^-]--', $section)) { |
|||
$sections[$section]= ''; |
|||
$current= $section; |
|||
continue; |
|||
} |
|||
$sections[$current].= $line; |
|||
} |
|||
fclose($fd); |
|||
|
|||
// Create instance from read data and return it
|
|||
$t= &new PHPTTest(); { |
|||
$t->name= substr(realpath($filename), 0, -1); |
|||
$t->description= rtrim($sections['TEST']); |
|||
$t->skipif= $sections['SKIPIF']; |
|||
$t->code= $sections['FILE']; |
|||
|
|||
if (isset($sections['EXPECTF'])) { |
|||
$t->expectancy= &new PHPTRegexExpectancy($sections['EXPECTF']); |
|||
} else { |
|||
// XXX TBI XXX
|
|||
} |
|||
} |
|||
return $t; |
|||
} |
|||
|
|||
function onError($errno, $errstr, $errfile, $errline) { |
|||
static $names= array( |
|||
E_NOTICE => 'Notice', |
|||
E_WARNING => 'Warning' |
|||
); |
|||
|
|||
if (!(error_reporting() & $errno)) return; |
|||
printf( |
|||
"\n%s: %s in %s on line %d\n", |
|||
$names[$errno], |
|||
$errstr, |
|||
strstr($errfile, 'eval()\'d code') ? $this->name : $errfile, |
|||
$errline |
|||
); |
|||
} |
|||
|
|||
function run() { |
|||
|
|||
// Precondition check - will die if test needs to be skipped
|
|||
eval('?>'.$this->skipif); |
|||
|
|||
set_error_handler(array(&$this, 'onError')); { |
|||
error_reporting(E_ALL); |
|||
|
|||
ob_start(); |
|||
eval('?>'.$this->code); |
|||
$this->output= rtrim(ob_get_contents()); |
|||
ob_end_clean(); |
|||
} restore_error_handler(); |
|||
|
|||
return $this->expectancy->matches($this->output); |
|||
} |
|||
} |
|||
// }}}
|
|||
|
|||
// {{{ main
|
|||
if (isset($_GET['phpinfo'])) { |
|||
phpinfo((int)$_GET['phpinfo']); |
|||
|
|||
echo '<a href="?">Home</a>'; |
|||
exit(); |
|||
} |
|||
|
|||
echo <<<__ |
|||
<html> |
|||
<head> |
|||
<title>PHPT Test</title> |
|||
<style type="text/css"> |
|||
body { |
|||
background-color: #ffffff;
|
|||
color: #000000;
|
|||
font-size: 75%; |
|||
} |
|||
body, td, th, h1, h2 { |
|||
font-family: sans-serif; |
|||
} |
|||
h1 { |
|||
font-size: 150%; |
|||
} |
|||
h2 { |
|||
font-size: 125%; |
|||
} |
|||
.header { |
|||
background: url(?=PHPE9568F34-D428-11d2-A769-00AA001ACF42); |
|||
background-position: right center; |
|||
background-repeat: no-repeat; |
|||
min-height: 70px; |
|||
background-color: #9999cc;
|
|||
padding: 4px; |
|||
padding-right: 120px; |
|||
border: 1px solid #000000;
|
|||
} |
|||
hr { |
|||
width: 600px; |
|||
background-color: #cccccc;
|
|||
border: 0px; |
|||
height: 1px; |
|||
color: #000000;
|
|||
} |
|||
</style> |
|||
</head> |
|||
<body> |
|||
__; |
|||
|
|||
$test= basename($_SERVER['QUERY_STRING']); |
|||
if ($test && file_exists($test)) { |
|||
$t= &PHPTTest::fromFile($test); |
|||
echo '<div class="header"><h1>'.basename($t->name), ': ', $t->description.'</h1></div>'; |
|||
echo '<a href="?">Back to test suite</a>'; |
|||
flush(); |
|||
|
|||
// Run the test
|
|||
$result= $t->run(); |
|||
|
|||
// Evaluate results
|
|||
if ($result) { |
|||
echo '<h2>Passed</h2>'; |
|||
} else { |
|||
echo '<h2>Failed</h2><hr/>'; |
|||
|
|||
echo '<h3>Actual output</h3>'; |
|||
echo '<xmp>', $t->output, '</xmp><hr/>'; |
|||
|
|||
echo '<h3>Expectancy</h3>'; |
|||
echo '<xmp>', $t->expectancy->expected, '</xmp>'; |
|||
} |
|||
|
|||
echo '<hr/>'; |
|||
exit(); |
|||
} |
|||
|
|||
echo '<div class="header"><h1>Test suite</h1></div>'; |
|||
|
|||
// phpinfo() links
|
|||
echo 'phpinfo(): '; |
|||
foreach (array( |
|||
1 => 'General', |
|||
4 => 'Configuration', |
|||
8 => 'Modules' |
|||
) as $const => $name) { |
|||
printf('<a href="?phpinfo=%d">%s</a> | ', $const, $name); |
|||
} |
|||
echo '<a href="?phpinfo=-1">(All)</a>'; |
|||
|
|||
echo '<h2>Select one to run</h2>'; |
|||
echo '<ul>'; |
|||
$d= dir(dirname(__FILE__)); |
|||
while ($entry= $d->read()) { |
|||
if ('.phpt' != substr($entry, -5)) continue; |
|||
echo '<li><a href="?'.$entry.'">'.$entry.'</a></li>'; |
|||
} |
|||
$d->close(); |
|||
echo '</ul><hr/>'; |
|||
|
|||
echo <<<__ |
|||
</body> |
|||
</html> |
|||
__; |
|||
// }}}
|
|||
?>
|
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue