123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414 |
- <?php
- @include_once 'Text/Diff.php';
- @include_once 'Text/Diff/Renderer.php';
- @include_once 'Text/Diff/Renderer/unified.php';
- require_once 'PEAR/ErrorStack.php';
- require_once 'PEAR.php';
- class PEAR_PHPTest
- {
- var $_diffonly;
- var $_errors;
- function __construct($diffonly = false, $noStackCatch = false)
- {
- $this->_diffonly = $diffonly;
- $this->_errors = array();
- PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($this, 'pearerrorCallback'));
- if (!$noStackCatch) {
- PEAR_ErrorStack::setDefaultCallback(array($this, 'pearerrorstackCallback'));
- }
- }
- function pearerrorCallback($err)
- {
- PEAR_ErrorStack::staticPush('PEAR_Error', -1, 'error', array('obj' => $err),
- $err->getMessage());
- }
- function pearerrorstackCallback($err)
- {
- $this->_errors[] = $err;
- }
- function assertPEARError($err, $message)
- {
- if (is_a($err, 'PEAR_Error')) {
- return true;
- }
- $this->_failTest(debug_backtrace(), $message);
- echo "Not a PEAR_Error\n";
- return false;
- }
- function assertNoErrors($message, $trace = null)
- {
- if (count($this->_errors) == 0) {
- return true;
- }
- if ($trace === null) {
- $trace = debug_backtrace();
- }
- $this->_failTest($trace, $message);
- foreach ($this->_errors as $err) {
- if ($err['package'] == 'PEAR_Error') {
- echo "Unexpected PEAR_Error:\n";
- echo 'message "' . $err['message'] . "\"\n";
- } else {
- echo "Unexpected PEAR_ErrorStack error:\n";
- echo 'package "' . $err['package'] . "\"\n";
- echo 'message "' . $err['message'] . "\"\n";
- }
- }
- $this->_errors = array();
- return false;
- }
- function assertErrors($errors, $message, $trace = null)
- {
- if (!count($this->_errors)) {
- if ($trace === null) {
- $trace = debug_backtrace();
- }
- $this->_failTest($trace, $message);
- echo "No errors caught, but errors were expected\n";
- return false;
- }
- if (!isset($errors[0])) {
- $errors = array($errors);
- }
- $failed = false;
- foreach ($errors as $err) {
- $found = false;
- foreach ($this->_errors as $i => $caughterror) {
- if ($caughterror['package'] == $err['package']) {
- if ($caughterror['message'] == $err['message']) {
- $found = true;
- break;
- }
- }
- }
- if ($found) {
- unset($this->_errors[$i]);
- continue;
- }
- if (!$failed) {
- if ($trace === null) {
- $trace = debug_backtrace();
- }
- $failed = true;
- $this->_failTest($trace, $message);
- }
- echo "Unthrown error:\n";
- if ($err['package'] == 'PEAR_Error') {
- echo "PEAR_Error:\n";
- } else {
- echo "error package: \"$err[package]\"\n";
- }
- echo "message: \"$err[message]\"\n";
- }
- if (count($this->_errors)) {
- if (!$failed) {
- if ($trace === null) {
- $trace = debug_backtrace();
- }
- $failed = true;
- $this->_failTest($trace, $message);
- }
- foreach ($this->_errors as $err) {
- echo "Unexpected error:\n";
- if ($err['package'] == 'PEAR_Error') {
- echo "PEAR_Error:\n";
- } else {
- echo "error package: \"$err[package]\"\n";
- }
- echo "message: \"$err[message]\"\n";
- }
- }
- $this->_errors = array();
- return !$failed;
- }
- function assertTrue($test, $message)
- {
- $this->assertNoErrors($message, debug_backtrace());
- 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)
- {
- $this->assertNoErrors($message, debug_backtrace());
- 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)
- {
- $this->assertNoErrors($message, debug_backtrace());
- 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)
- {
- $this->assertNoErrors($message, debug_backtrace());
- 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)
- {
- $this->assertNoErrors($message, debug_backtrace());
- 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)
- {
- $this->assertNoErrors($message, debug_backtrace());
- 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)
- {
- $this->assertNoErrors($message, debug_backtrace());
- 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)
- {
- $this->assertNoErrors($message, debug_backtrace());
- 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)
- {
- $this->assertNoErrors($message, debug_backtrace());
- 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 assertEquals($control, $test, $message)
- {
- $this->assertNoErrors($message, 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(debug_backtrace(), $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)
- {
- $this->assertNoErrors($message, debug_backtrace());
- 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)
- {
- $this->assertNoErrors($message, debug_backtrace());
- if (@file_exists($fname)) {
- $this->_failTest(debug_backtrace(), $message);
- echo "File '$fname' exists, and should not\n";
- return false;
- }
- return true;
- }
- function assertRegEquals($dump, &$reg, $message)
- {
- $actualdump = var_export(trim($this->dumpReg($reg)), true);
- $testdump = var_export(trim($dump), true);
- return $this->assertEquals($testdump, $actualdump, $message);
- }
- function assertPackageInfoEquals($control, $test, $message)
- {
- $this->assertNoErrors($message, debug_backtrace());
- if (isset($control[0])) {
- if (!isset($test[0]) || (count($control) != count($test))) {
- echo "Invalid packageInfo\n";
- $ret = $this->assertEquals($control, $test, $message);
- }
- $ret = true;
- foreach ($control as $i => $packageinfo) {
- $ret = $ret &&
- $this->assertPackageInfoEquals($packageinfo, $test[$i], $message . $i);
- }
- return $ret;
- }
- if (isset($control['_lastmodified'])) {
- if (!isset($test['_lastmodified'])) {
- echo "_lastmodified is not set in packageInfo() output\n";
- $this->_failTest(debug_backtrace(), $message);
- return false;
- }
- }
- $savecontrol = sort($control);
- $savetest = sort($test);
- unset($control['_lastmodified']);
- unset($test['_lastmodified']);
- if (var_export($control, true) != var_export($test, true)) {
- $this->_failTest(debug_backtrace(), $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($savecontrol);
- echo "\nReceived:\n";
- var_export($savetest);
- return false;
- }
- return true;
- }
- function _sortRegEntries($a, $b)
- {
- return strnatcasecmp($a['name'], $b['name']);
- }
- function dumpReg(&$reg)
- {
- ob_start();
- print "dumping registry...\n";
- $infos = $reg->packageInfo(null, null, null);
- ksort($infos);
- foreach ($infos as $channel => $info) {
- echo "channel $channel:\n";
- usort($info, array($this, '_sortRegEntries'));
- foreach ($info as $pkg) {
- print $pkg["name"] . ":";
- unset($pkg["name"]);
- foreach ($pkg as $k => $v) {
- if ($k == '_lastmodified') {
- print " _lastmodified is set";
- continue;
- }
- if (is_array($v) && $k == 'filelist') {
- print " $k=array(";
- $i = 0;
- foreach ($v as $k2 => $v2) {
- if ($i++ > 0) print ",";
- print "{$k2}[";
- $j = 0;
- foreach ($v2 as $k3 => $v3) {
- if ($j++ > 0) print ",";
- print "$k3=$v3";
- }
- print "]";
- }
- print ")";
- } else {
- print " $k=\"$v\"";
- }
- }
- print "\n";
- }
- }
- print "dump done\n";
- $ret = ob_get_contents();
- ob_end_clean();
- return $ret;
- }
- function _failTest($trace, $message)
- {
- echo 'Test Failure: "' . $message . "\"\n in " . $trace[0]['file'] . ' line ' .
- $trace[0]['line'] . "\n";
- }
- function showAll()
- {
- $this->_diffonly = false;
- }
- }
- ?>
|