Chris@18: _diffonly = $diffonly; Chris@18: $this->_errors = array(); Chris@18: PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($this, 'pearerrorCallback')); Chris@18: if (!$noStackCatch) { Chris@18: PEAR_ErrorStack::setDefaultCallback(array($this, 'pearerrorstackCallback')); Chris@18: } Chris@18: } Chris@18: Chris@18: function pearerrorCallback($err) Chris@18: { Chris@18: PEAR_ErrorStack::staticPush('PEAR_Error', -1, 'error', array('obj' => $err), Chris@18: $err->getMessage()); Chris@18: } Chris@18: Chris@18: function pearerrorstackCallback($err) Chris@18: { Chris@18: $this->_errors[] = $err; Chris@18: } Chris@18: Chris@18: function assertPEARError($err, $message) Chris@18: { Chris@18: if (is_a($err, 'PEAR_Error')) { Chris@18: return true; Chris@18: } Chris@18: $this->_failTest(debug_backtrace(), $message); Chris@18: echo "Not a PEAR_Error\n"; Chris@18: return false; Chris@18: } Chris@18: Chris@18: function assertNoErrors($message, $trace = null) Chris@18: { Chris@18: if (count($this->_errors) == 0) { Chris@18: return true; Chris@18: } Chris@18: if ($trace === null) { Chris@18: $trace = debug_backtrace(); Chris@18: } Chris@18: $this->_failTest($trace, $message); Chris@18: foreach ($this->_errors as $err) { Chris@18: if ($err['package'] == 'PEAR_Error') { Chris@18: echo "Unexpected PEAR_Error:\n"; Chris@18: echo 'message "' . $err['message'] . "\"\n"; Chris@18: } else { Chris@18: echo "Unexpected PEAR_ErrorStack error:\n"; Chris@18: echo 'package "' . $err['package'] . "\"\n"; Chris@18: echo 'message "' . $err['message'] . "\"\n"; Chris@18: } Chris@18: } Chris@18: $this->_errors = array(); Chris@18: return false; Chris@18: } Chris@18: Chris@18: function assertErrors($errors, $message, $trace = null) Chris@18: { Chris@18: if (!count($this->_errors)) { Chris@18: if ($trace === null) { Chris@18: $trace = debug_backtrace(); Chris@18: } Chris@18: $this->_failTest($trace, $message); Chris@18: echo "No errors caught, but errors were expected\n"; Chris@18: return false; Chris@18: } Chris@18: if (!isset($errors[0])) { Chris@18: $errors = array($errors); Chris@18: } Chris@18: $failed = false; Chris@18: foreach ($errors as $err) { Chris@18: $found = false; Chris@18: foreach ($this->_errors as $i => $caughterror) { Chris@18: if ($caughterror['package'] == $err['package']) { Chris@18: if ($caughterror['message'] == $err['message']) { Chris@18: $found = true; Chris@18: break; Chris@18: } Chris@18: } Chris@18: } Chris@18: if ($found) { Chris@18: unset($this->_errors[$i]); Chris@18: continue; Chris@18: } Chris@18: if (!$failed) { Chris@18: if ($trace === null) { Chris@18: $trace = debug_backtrace(); Chris@18: } Chris@18: $failed = true; Chris@18: $this->_failTest($trace, $message); Chris@18: } Chris@18: echo "Unthrown error:\n"; Chris@18: if ($err['package'] == 'PEAR_Error') { Chris@18: echo "PEAR_Error:\n"; Chris@18: } else { Chris@18: echo "error package: \"$err[package]\"\n"; Chris@18: } Chris@18: echo "message: \"$err[message]\"\n"; Chris@18: } Chris@18: if (count($this->_errors)) { Chris@18: if (!$failed) { Chris@18: if ($trace === null) { Chris@18: $trace = debug_backtrace(); Chris@18: } Chris@18: $failed = true; Chris@18: $this->_failTest($trace, $message); Chris@18: } Chris@18: foreach ($this->_errors as $err) { Chris@18: echo "Unexpected error:\n"; Chris@18: if ($err['package'] == 'PEAR_Error') { Chris@18: echo "PEAR_Error:\n"; Chris@18: } else { Chris@18: echo "error package: \"$err[package]\"\n"; Chris@18: } Chris@18: echo "message: \"$err[message]\"\n"; Chris@18: } Chris@18: } Chris@18: $this->_errors = array(); Chris@18: return !$failed; Chris@18: } Chris@18: Chris@18: function assertTrue($test, $message) Chris@18: { Chris@18: $this->assertNoErrors($message, debug_backtrace()); Chris@18: if ($test === true) { Chris@18: return true; Chris@18: } Chris@18: $this->_failTest(debug_backtrace(), $message); Chris@18: echo "Unexpected non-true value: \n"; Chris@18: var_export($test); Chris@18: echo "\n'$message'\n"; Chris@18: return false; Chris@18: } Chris@18: Chris@18: function assertIsa($control, $test, $message) Chris@18: { Chris@18: $this->assertNoErrors($message, debug_backtrace()); Chris@18: if (is_a($test, $control)) { Chris@18: return true; Chris@18: } Chris@18: $this->_failTest(debug_backtrace(), $message); Chris@18: echo "Unexpected non-$control object: \n"; Chris@18: var_export($test); Chris@18: echo "\n'$message'\n"; Chris@18: return false; Chris@18: } Chris@18: Chris@18: function assertNull($test, $message) Chris@18: { Chris@18: $this->assertNoErrors($message, debug_backtrace()); Chris@18: if ($test === null) { Chris@18: return true; Chris@18: } Chris@18: $this->_failTest(debug_backtrace(), $message); Chris@18: echo "Unexpected non-null value: \n"; Chris@18: var_export($test); Chris@18: echo "\n'$message'\n"; Chris@18: return false; Chris@18: } Chris@18: Chris@18: function assertNotNull($test, $message) Chris@18: { Chris@18: $this->assertNoErrors($message, debug_backtrace()); Chris@18: if ($test !== null) { Chris@18: return true; Chris@18: } Chris@18: $this->_failTest(debug_backtrace(), $message); Chris@18: echo "Unexpected null: \n"; Chris@18: var_export($test); Chris@18: echo "\n'$message'\n"; Chris@18: return false; Chris@18: } Chris@18: Chris@18: function assertSame($test, $test1, $message) Chris@18: { Chris@18: $this->assertNoErrors($message, debug_backtrace()); Chris@18: if ($test === $test1) { Chris@18: return true; Chris@18: } Chris@18: $this->_failTest(debug_backtrace(), $message); Chris@18: echo "Unexpectedly two vars are not the same thing: \n"; Chris@18: echo "\n'$message'\n"; Chris@18: return false; Chris@18: } Chris@18: Chris@18: function assertNotSame($test, $test1, $message) Chris@18: { Chris@18: $this->assertNoErrors($message, debug_backtrace()); Chris@18: if ($test !== $test1) { Chris@18: return true; Chris@18: } Chris@18: $this->_failTest(debug_backtrace(), $message); Chris@18: echo "Unexpectedly two vars are the same thing: \n"; Chris@18: echo "\n'$message'\n"; Chris@18: return false; Chris@18: } Chris@18: Chris@18: function assertFalse($test, $message) Chris@18: { Chris@18: $this->assertNoErrors($message, debug_backtrace()); Chris@18: if ($test === false) { Chris@18: return true; Chris@18: } Chris@18: $this->_failTest(debug_backtrace(), $message); Chris@18: echo "Unexpected non-false value: \n"; Chris@18: var_export($test); Chris@18: echo "\n'$message'\n"; Chris@18: return false; Chris@18: } Chris@18: Chris@18: function assertNotTrue($test, $message) Chris@18: { Chris@18: $this->assertNoErrors($message, debug_backtrace()); Chris@18: if (!$test) { Chris@18: return true; Chris@18: } Chris@18: $this->_failTest(debug_backtrace(), $message); Chris@18: echo "Unexpected loose true value: \n"; Chris@18: var_export($test); Chris@18: echo "\n'$message'\n"; Chris@18: return false; Chris@18: } Chris@18: Chris@18: function assertNotFalse($test, $message) Chris@18: { Chris@18: $this->assertNoErrors($message, debug_backtrace()); Chris@18: if ($test) { Chris@18: return true; Chris@18: } Chris@18: $this->_failTest(debug_backtrace(), $message); Chris@18: echo "Unexpected loose false value: \n"; Chris@18: var_export($test); Chris@18: echo "\n'$message'\n"; Chris@18: return false; Chris@18: } Chris@18: Chris@18: function assertEquals($control, $test, $message) Chris@18: { Chris@18: $this->assertNoErrors($message, debug_backtrace()); Chris@18: if (str_replace(array("\r", "\n"), array('', ''), Chris@18: var_export($control, true)) != str_replace(array("\r", "\n"), array('', ''), Chris@18: var_export($test, true))) { Chris@18: $this->_failTest(debug_backtrace(), $message); Chris@18: if (class_exists('Text_Diff')) { Chris@18: echo "Diff of expecting/received:\n"; Chris@18: $diff = new Text_Diff( Chris@18: explode("\n", var_export($control, true)), Chris@18: explode("\n", var_export($test, true))); Chris@18: Chris@18: // Output the diff in unified format. Chris@18: $renderer = new Text_Diff_Renderer_unified(); Chris@18: echo $renderer->render($diff); Chris@18: if ($this->_diffonly) { Chris@18: return false; Chris@18: } Chris@18: } Chris@18: echo "Expecting:\n"; Chris@18: var_export($control); Chris@18: echo "\nReceived:\n"; Chris@18: var_export($test); Chris@18: echo "\n"; Chris@18: return false; Chris@18: } Chris@18: return true; Chris@18: } Chris@18: Chris@18: function assertFileExists($fname, $message) Chris@18: { Chris@18: $this->assertNoErrors($message, debug_backtrace()); Chris@18: if (!@file_exists($fname)) { Chris@18: $this->_failTest(debug_backtrace(), $message); Chris@18: echo "File '$fname' does not exist, and should\n"; Chris@18: return false; Chris@18: } Chris@18: return true; Chris@18: } Chris@18: Chris@18: function assertFileNotExists($fname, $message) Chris@18: { Chris@18: $this->assertNoErrors($message, debug_backtrace()); Chris@18: if (@file_exists($fname)) { Chris@18: $this->_failTest(debug_backtrace(), $message); Chris@18: echo "File '$fname' exists, and should not\n"; Chris@18: return false; Chris@18: } Chris@18: return true; Chris@18: } Chris@18: Chris@18: function assertRegEquals($dump, &$reg, $message) Chris@18: { Chris@18: $actualdump = var_export(trim($this->dumpReg($reg)), true); Chris@18: $testdump = var_export(trim($dump), true); Chris@18: return $this->assertEquals($testdump, $actualdump, $message); Chris@18: } Chris@18: Chris@18: function assertPackageInfoEquals($control, $test, $message) Chris@18: { Chris@18: $this->assertNoErrors($message, debug_backtrace()); Chris@18: if (isset($control[0])) { Chris@18: if (!isset($test[0]) || (count($control) != count($test))) { Chris@18: echo "Invalid packageInfo\n"; Chris@18: $ret = $this->assertEquals($control, $test, $message); Chris@18: } Chris@18: $ret = true; Chris@18: foreach ($control as $i => $packageinfo) { Chris@18: $ret = $ret && Chris@18: $this->assertPackageInfoEquals($packageinfo, $test[$i], $message . $i); Chris@18: } Chris@18: return $ret; Chris@18: } Chris@18: if (isset($control['_lastmodified'])) { Chris@18: if (!isset($test['_lastmodified'])) { Chris@18: echo "_lastmodified is not set in packageInfo() output\n"; Chris@18: $this->_failTest(debug_backtrace(), $message); Chris@18: return false; Chris@18: } Chris@18: } Chris@18: $savecontrol = sort($control); Chris@18: $savetest = sort($test); Chris@18: unset($control['_lastmodified']); Chris@18: unset($test['_lastmodified']); Chris@18: if (var_export($control, true) != var_export($test, true)) { Chris@18: $this->_failTest(debug_backtrace(), $message); Chris@18: if (class_exists('Text_Diff')) { Chris@18: echo "Diff of expecting/received:\n"; Chris@18: $diff = new Text_Diff( Chris@18: explode("\n", var_export($control, true)), Chris@18: explode("\n", var_export($test, true))); Chris@18: Chris@18: // Output the diff in unified format. Chris@18: $renderer = new Text_Diff_Renderer_unified(); Chris@18: echo $renderer->render($diff); Chris@18: if ($this->_diffonly) { Chris@18: return false; Chris@18: } Chris@18: } Chris@18: echo "Expecting:\n"; Chris@18: var_export($savecontrol); Chris@18: echo "\nReceived:\n"; Chris@18: var_export($savetest); Chris@18: return false; Chris@18: } Chris@18: return true; Chris@18: } Chris@18: Chris@18: function _sortRegEntries($a, $b) Chris@18: { Chris@18: return strnatcasecmp($a['name'], $b['name']); Chris@18: } Chris@18: Chris@18: function dumpReg(&$reg) Chris@18: { Chris@18: ob_start(); Chris@18: print "dumping registry...\n"; Chris@18: $infos = $reg->packageInfo(null, null, null); Chris@18: ksort($infos); Chris@18: foreach ($infos as $channel => $info) { Chris@18: echo "channel $channel:\n"; Chris@18: usort($info, array($this, '_sortRegEntries')); Chris@18: foreach ($info as $pkg) { Chris@18: print $pkg["name"] . ":"; Chris@18: unset($pkg["name"]); Chris@18: foreach ($pkg as $k => $v) { Chris@18: if ($k == '_lastmodified') { Chris@18: print " _lastmodified is set"; Chris@18: continue; Chris@18: } Chris@18: if (is_array($v) && $k == 'filelist') { Chris@18: print " $k=array("; Chris@18: $i = 0; Chris@18: foreach ($v as $k2 => $v2) { Chris@18: if ($i++ > 0) print ","; Chris@18: print "{$k2}["; Chris@18: $j = 0; Chris@18: foreach ($v2 as $k3 => $v3) { Chris@18: if ($j++ > 0) print ","; Chris@18: print "$k3=$v3"; Chris@18: } Chris@18: print "]"; Chris@18: } Chris@18: print ")"; Chris@18: } else { Chris@18: print " $k=\"$v\""; Chris@18: } Chris@18: } Chris@18: print "\n"; Chris@18: } Chris@18: } Chris@18: print "dump done\n"; Chris@18: $ret = ob_get_contents(); Chris@18: ob_end_clean(); Chris@18: return $ret; Chris@18: } Chris@18: Chris@18: function _failTest($trace, $message) Chris@18: { Chris@18: echo 'Test Failure: "' . $message . "\"\n in " . $trace[0]['file'] . ' line ' . Chris@18: $trace[0]['line'] . "\n"; Chris@18: } Chris@18: Chris@18: function showAll() Chris@18: { Chris@18: $this->_diffonly = false; Chris@18: } Chris@18: } Chris@18: ?>