Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/*** base include file for SimpleTest* @package SimpleTest* @subpackage UnitTester* @version $Id: errors.php 1606 2007-01-09 10:42:06Z wei $*//** @ignore - PHP5 compatibility fix. */if (! defined('E_STRICT')) {define('E_STRICT', 2048);}/**#@+* Includes SimpleTest files.*/require_once(dirname(__FILE__) . '/invoker.php');/*** Extension that traps errors into an error queue.* @package SimpleTest* @subpackage UnitTester*/class SimpleErrorTrappingInvoker extends SimpleInvokerDecorator {/*** Stores the invoker to wrap.* @param SimpleInvoker $invoker Test method runner.*/function SimpleErrorTrappingInvoker($invoker) {$this->SimpleInvokerDecorator($invoker);}/*** Invokes a test method and dispatches any* untrapped errors. Called back from* the visiting runner.* @param string $method Test method to call.* @access public*/function invoke($method) {set_error_handler('simpleTestErrorHandler');parent::invoke($method);$queue = SimpleErrorQueue::instance();while (list($severity, $message, $file, $line, $globals) = $queue->extract()) {$severity = SimpleErrorQueue::getSeverityAsString($severity);$test_case = $this->getTestCase();$test_case->error($severity, $message, $file, $line);}restore_error_handler();}}/*** Singleton error queue used to record trapped* errors.* @package SimpleTest* @subpackage UnitTester*/class SimpleErrorQueue {protected $_queue;/*** Starts with an empty queue.* @access public*/function SimpleErrorQueue() {$this->clear();}/*** Adds an error to the front of the queue.* @param $severity PHP error code.* @param $message Text of error.* @param $filename File error occoured in.* @param $line Line number of error.* @param $super_globals Hash of PHP super global arrays.* @access public*/function add($severity, $message, $filename, $line, $super_globals) {array_push($this->_queue,array($severity, $message, $filename, $line, $super_globals));}/*** Pulls the earliest error from the queue.* @return False if none, or a list of error* information. Elements are: severity* as the PHP error code, the error message,* the file with the error, the line number* and a list of PHP super global arrays.* @access public*/function extract() {if (count($this->_queue)) {return array_shift($this->_queue);}return false;}/*** Discards the contents of the error queue.* @access public*/function clear() {$this->_queue = array();}/*** Tests to see if the queue is empty.* @return True if empty.*/function isEmpty() {return (count($this->_queue) == 0);}/*** Global access to a single error queue.* @return Global error queue object.* @access public* @static*/static function instance() {static $queue = false;if (! $queue) {$queue = new SimpleErrorQueue();}return $queue;}/*** Converst an error code into it's string* representation.* @param $severity PHP integer error code.* @return String version of error code.* @access public* @static*/static function getSeverityAsString($severity) {static $map = array(E_STRICT => 'E_STRICT',E_ERROR => 'E_ERROR',E_WARNING => 'E_WARNING',E_PARSE => 'E_PARSE',E_NOTICE => 'E_NOTICE',E_CORE_ERROR => 'E_CORE_ERROR',E_CORE_WARNING => 'E_CORE_WARNING',E_COMPILE_ERROR => 'E_COMPILE_ERROR',E_COMPILE_WARNING => 'E_COMPILE_WARNING',E_USER_ERROR => 'E_USER_ERROR',E_USER_WARNING => 'E_USER_WARNING',E_USER_NOTICE => 'E_USER_NOTICE', 4096 => 'E??');return $map[$severity];}}/*** Error handler that simply stashes any errors into the global* error queue. Simulates the existing behaviour with respect to* logging errors, but this feature may be removed in future.* @param $severity PHP error code.* @param $message Text of error.* @param $filename File error occoured in.* @param $line Line number of error.* @param $super_globals Hash of PHP super global arrays.* @static* @access public*/function simpleTestErrorHandler($severity, $message, $filename, $line, $super_globals) {if ($severity = $severity & error_reporting()) {restore_error_handler();if (ini_get('log_errors')) {$label = SimpleErrorQueue::getSeverityAsString($severity);error_log("$label: $message in $filename on line $line");}$queue = SimpleErrorQueue::instance();$queue->add($severity, $message, $filename, $line, $super_globals);set_error_handler('simpleTestErrorHandler');}}?>