From b2e97539e7af7712b04dd5c2610a454d09aa0333 Mon Sep 17 00:00:00 2001 From: wei <> Date: Fri, 7 Jul 2006 23:18:19 +0000 Subject: Update simpletest --- tests/test_tools/simpletest/scorer.php | 507 +++++++++++++++++++++++++++++---- 1 file changed, 453 insertions(+), 54 deletions(-) (limited to 'tests/test_tools/simpletest/scorer.php') diff --git a/tests/test_tools/simpletest/scorer.php b/tests/test_tools/simpletest/scorer.php index 6c321f8c..e9cff6a6 100644 --- a/tests/test_tools/simpletest/scorer.php +++ b/tests/test_tools/simpletest/scorer.php @@ -3,9 +3,13 @@ * base include file for SimpleTest * @package SimpleTest * @subpackage UnitTester - * @version $Id: scorer.php,v 1.4 2005/01/11 04:03:46 lastcraft Exp $ + * @version $Id: scorer.php,v 1.12 2006/02/06 06:05:18 lastcraft Exp $ */ - + + /**#@+*/ + require_once(dirname(__FILE__) . '/invoker.php'); + /**#@-*/ + /** * Can recieve test events and display them. Display * is achieved by making display methods available @@ -19,7 +23,7 @@ protected $_fails; protected $_exceptions; protected $_is_dry_run; - + /** * Starts the test run with no results. * @access public @@ -30,16 +34,18 @@ $this->_exceptions = 0; $this->_is_dry_run = false; } - + /** * Signals that the next evaluation will be a dry * run. That is, the structure events will be * recorded, but no tests will be run. + * @param boolean $is_dry Dry run if true. + * @access public */ function makeDry($is_dry = true) { $this->_is_dry_run = $is_dry; } - + /** * The reporter has a veto on what should be run. * @param string $test_case_name name of test case. @@ -50,6 +56,17 @@ return ! $this->_is_dry_run; } + /** + * Can wrap the invoker in preperation for running + * a test. + * @param SimpleInvoker $invoker Individual test runner. + * @return SimpleInvoker Wrapped test runner. + * @access public + */ + function &createInvoker($invoker) { + return $invoker; + } + /** * Accessor for current status. Will be false * if there have been any failures or exceptions. @@ -63,23 +80,24 @@ } return true; } - + /** - * Paints the start of a test method. + * Paints the start of a group test. * @param string $test_name Name of test or other label. + * @param integer $size Number of test cases starting. * @access public */ - function paintMethodStart($test_name) { + function paintGroupStart($test_name, $size) { } - + /** - * Paints the end of a test method. + * Paints the end of a group test. * @param string $test_name Name of test or other label. * @access public */ - function paintMethodEnd($test_name) { + function paintGroupEnd($test_name) { } - + /** * Paints the start of a test case. * @param string $test_name Name of test or other label. @@ -87,7 +105,7 @@ */ function paintCaseStart($test_name) { } - + /** * Paints the end of a test case. * @param string $test_name Name of test or other label. @@ -95,24 +113,23 @@ */ function paintCaseEnd($test_name) { } - + /** - * Paints the start of a group test. + * Paints the start of a test method. * @param string $test_name Name of test or other label. - * @param integer $size Number of test cases starting. * @access public */ - function paintGroupStart($test_name, $size) { + function paintMethodStart($test_name) { } - + /** - * Paints the end of a group test. + * Paints the end of a test method. * @param string $test_name Name of test or other label. * @access public */ - function paintGroupEnd($test_name) { + function paintMethodEnd($test_name) { } - + /** * Increments the pass count. * @param string $message Message is ignored. @@ -121,7 +138,7 @@ function paintPass($message) { $this->_passes++; } - + /** * Increments the fail count. * @param string $message Message is ignored. @@ -130,27 +147,18 @@ function paintFail($message) { $this->_fails++; } - + /** - * Deals with PHP 4 throwing an error. + * Deals with PHP 4 throwing an error or PHP 5 + * throwing an exception. * @param string $message Text of error formatted by * the test case. * @access public */ function paintError($message) { - $this->paintException($message); - } - - /** - * Deals with PHP 5 throwing an exception - * This isn't really implemented yet. - * @param Exception $exception Object thrown. - * @access public - */ - function paintException($exception) { $this->_exceptions++; } - + /** * Accessor for the number of passes so far. * @return integer Number of passes. @@ -159,7 +167,7 @@ function getPassCount() { return $this->_passes; } - + /** * Accessor for the number of fails so far. * @return integer Number of fails. @@ -168,7 +176,7 @@ function getFailCount() { return $this->_fails; } - + /** * Accessor for the number of untrapped errors * so far. @@ -178,7 +186,7 @@ function getExceptionCount() { return $this->_exceptions; } - + /** * Paints a simple supplementary message. * @param string $message Text to display. @@ -186,7 +194,7 @@ */ function paintMessage($message) { } - + /** * Paints a formatted ASCII message such as a * variable dump. @@ -195,7 +203,7 @@ */ function paintFormattedMessage($message) { } - + /** * By default just ignores user generated events. * @param string $type Event type as text. @@ -218,7 +226,7 @@ protected $_test_stack; protected $_size; protected $_progress; - + /** * Starts the display with no results in. * @access public @@ -229,7 +237,7 @@ $this->_size = null; $this->_progress = 0; } - + /** * Paints the start of a group test. Will also paint * the page header and footer if this is the @@ -248,7 +256,7 @@ } $this->_test_stack[] = $test_name; } - + /** * Paints the end of a group test. Will paint the page * footer if the stack of tests has unwound. @@ -262,7 +270,7 @@ $this->paintFooter($test_name); } } - + /** * Paints the start of a test case. Will also paint * the page header and footer if this is the @@ -280,7 +288,7 @@ } $this->_test_stack[] = $test_name; } - + /** * Paints the end of a test case. Will paint the page * footer if the stack of tests has unwound. @@ -294,7 +302,7 @@ $this->paintFooter($test_name); } } - + /** * Paints the start of a test method. * @param string $test_name Name of test that is starting. @@ -303,7 +311,7 @@ function paintMethodStart($test_name) { $this->_test_stack[] = $test_name; } - + /** * Paints the end of a test method. Will paint the page * footer if the stack of tests has unwound. @@ -313,7 +321,7 @@ function paintMethodEnd($test_name) { array_pop($this->_test_stack); } - + /** * Paints the test document header. * @param string $test_name First test top level @@ -323,7 +331,7 @@ */ function paintHeader($test_name) { } - + /** * Paints the test document footer. * @param string $test_name The top level test. @@ -332,7 +340,7 @@ */ function paintFooter($test_name) { } - + /** * Accessor for internal test stack. For * subclasses that need to see the whole test @@ -343,7 +351,7 @@ function getTestList() { return $this->_test_stack; } - + /** * Accessor for total test size in number * of test cases. Null until the first @@ -354,7 +362,7 @@ function getTestCaseCount() { return $this->_size; } - + /** * Accessor for the number of test cases * completed so far. @@ -364,15 +372,406 @@ function getTestCaseProgress() { return $this->_progress; } - + /** * Static check for running in the comand line. * @return boolean True if CLI. * @access public * @static */ - static function inCli() { + function inCli() { return php_sapi_name() == 'cli'; } } + + /** + * For modifying the behaviour of the visual reporters. + * @package SimpleTest + * @subpackage UnitTester + */ + class SimpleReporterDecorator { + protected $_reporter; + + /** + * Mediates between teh reporter and the test case. + * @param SimpleScorer $reporter Reporter to receive events. + */ + function SimpleReporterDecorator($reporter) { + $this->_reporter = $reporter; + } + + /** + * Signals that the next evaluation will be a dry + * run. That is, the structure events will be + * recorded, but no tests will be run. + * @param boolean $is_dry Dry run if true. + * @access public + */ + function makeDry($is_dry = true) { + $this->_reporter->makeDry($is_dry); + } + + /** + * Accessor for current status. Will be false + * if there have been any failures or exceptions. + * Used for command line tools. + * @return boolean True if no failures. + * @access public + */ + function getStatus() { + return $this->_reporter->getStatus(); + } + + /** + * The reporter has a veto on what should be run. + * @param string $test_case_name name of test case. + * @param string $method Name of test method. + * @return boolean True if test should be run. + * @access public + */ + function shouldInvoke($test_case_name, $method) { + return $this->_reporter->shouldInvoke($test_case_name, $method); + } + + /** + * Can wrap the invoker in preperation for running + * a test. + * @param SimpleInvoker $invoker Individual test runner. + * @return SimpleInvoker Wrapped test runner. + * @access public + */ + function &createInvoker($invoker) { + return $this->_reporter->createInvoker($invoker); + } + + /** + * Paints the start of a group test. + * @param string $test_name Name of test or other label. + * @param integer $size Number of test cases starting. + * @access public + */ + function paintGroupStart($test_name, $size) { + $this->_reporter->paintGroupStart($test_name, $size); + } + + /** + * Paints the end of a group test. + * @param string $test_name Name of test or other label. + * @access public + */ + function paintGroupEnd($test_name) { + $this->_reporter->paintGroupEnd($test_name); + } + + /** + * Paints the start of a test case. + * @param string $test_name Name of test or other label. + * @access public + */ + function paintCaseStart($test_name) { + $this->_reporter->paintCaseStart($test_name); + } + + /** + * Paints the end of a test case. + * @param string $test_name Name of test or other label. + * @access public + */ + function paintCaseEnd($test_name) { + $this->_reporter->paintCaseEnd($test_name); + } + + /** + * Paints the start of a test method. + * @param string $test_name Name of test or other label. + * @access public + */ + function paintMethodStart($test_name) { + $this->_reporter->paintMethodStart($test_name); + } + + /** + * Paints the end of a test method. + * @param string $test_name Name of test or other label. + * @access public + */ + function paintMethodEnd($test_name) { + $this->_reporter->paintMethodEnd($test_name); + } + + /** + * Chains to the wrapped reporter. + * @param string $message Message is ignored. + * @access public + */ + function paintPass($message) { + $this->_reporter->paintPass($message); + } + + /** + * Chains to the wrapped reporter. + * @param string $message Message is ignored. + * @access public + */ + function paintFail($message) { + $this->_reporter->paintFail($message); + } + + /** + * Chains to the wrapped reporter. + * @param string $message Text of error formatted by + * the test case. + * @access public + */ + function paintError($message) { + $this->_reporter->paintError($message); + } + + /** + * Chains to the wrapped reporter. + * @param string $message Text to display. + * @access public + */ + function paintMessage($message) { + $this->_reporter->paintMessage($message); + } + + /** + * Chains to the wrapped reporter. + * @param string $message Text to display. + * @access public + */ + function paintFormattedMessage($message) { + $this->_reporter->paintFormattedMessage($message); + } + + /** + * Chains to the wrapped reporter. + * @param string $type Event type as text. + * @param mixed $payload Message or object. + * @return boolean Should return false if this + * type of signal should fail the + * test suite. + * @access public + */ + function paintSignal($type, $payload) { + $this->_reporter->paintSignal($type, $payload); + } + } + + /** + * For sending messages to multiple reporters at + * the same time. + * @package SimpleTest + * @subpackage UnitTester + */ + class MultipleReporter { + protected $_reporters = array(); + + /** + * Adds a reporter to the subscriber list. + * @param SimpleScorer $reporter Reporter to receive events. + * @access public + */ + function attachReporter($reporter) { + $this->_reporters[] = $reporter; + } + + /** + * Signals that the next evaluation will be a dry + * run. That is, the structure events will be + * recorded, but no tests will be run. + * @param boolean $is_dry Dry run if true. + * @access public + */ + function makeDry($is_dry = true) { + for ($i = 0; $i < count($this->_reporters); $i++) { + $this->_reporters[$i]->makeDry($is_dry); + } + } + + /** + * Accessor for current status. Will be false + * if there have been any failures or exceptions. + * If any reporter reports a failure, the whole + * suite fails. + * @return boolean True if no failures. + * @access public + */ + function getStatus() { + for ($i = 0; $i < count($this->_reporters); $i++) { + if (! $this->_reporters[$i]->getStatus()) { + return false; + } + } + return true; + } + + /** + * The reporter has a veto on what should be run. + * It requires all reporters to want to run the method. + * @param string $test_case_name name of test case. + * @param string $method Name of test method. + * @access public + */ + function shouldInvoke($test_case_name, $method) { + for ($i = 0; $i < count($this->_reporters); $i++) { + if (! $this->_reporters[$i]->shouldInvoke($test_case_name, $method)) { + return false; + } + } + return true; + } + + /** + * Every reporter gets a chance to wrap the invoker. + * @param SimpleInvoker $invoker Individual test runner. + * @return SimpleInvoker Wrapped test runner. + * @access public + */ + function &createInvoker($invoker) { + for ($i = 0; $i < count($this->_reporters); $i++) { + $invoker = $this->_reporters[$i]->createInvoker($invoker); + } + return $invoker; + } + + /** + * Paints the start of a group test. + * @param string $test_name Name of test or other label. + * @param integer $size Number of test cases starting. + * @access public + */ + function paintGroupStart($test_name, $size) { + for ($i = 0; $i < count($this->_reporters); $i++) { + $this->_reporters[$i]->paintGroupStart($test_name, $size); + } + } + + /** + * Paints the end of a group test. + * @param string $test_name Name of test or other label. + * @access public + */ + function paintGroupEnd($test_name) { + for ($i = 0; $i < count($this->_reporters); $i++) { + $this->_reporters[$i]->paintGroupEnd($test_name); + } + } + + /** + * Paints the start of a test case. + * @param string $test_name Name of test or other label. + * @access public + */ + function paintCaseStart($test_name) { + for ($i = 0; $i < count($this->_reporters); $i++) { + $this->_reporters[$i]->paintCaseStart($test_name); + } + } + + /** + * Paints the end of a test case. + * @param string $test_name Name of test or other label. + * @access public + */ + function paintCaseEnd($test_name) { + for ($i = 0; $i < count($this->_reporters); $i++) { + $this->_reporters[$i]->paintCaseEnd($test_name); + } + } + + /** + * Paints the start of a test method. + * @param string $test_name Name of test or other label. + * @access public + */ + function paintMethodStart($test_name) { + for ($i = 0; $i < count($this->_reporters); $i++) { + $this->_reporters[$i]->paintMethodStart($test_name); + } + } + + /** + * Paints the end of a test method. + * @param string $test_name Name of test or other label. + * @access public + */ + function paintMethodEnd($test_name) { + for ($i = 0; $i < count($this->_reporters); $i++) { + $this->_reporters[$i]->paintMethodEnd($test_name); + } + } + + /** + * Chains to the wrapped reporter. + * @param string $message Message is ignored. + * @access public + */ + function paintPass($message) { + for ($i = 0; $i < count($this->_reporters); $i++) { + $this->_reporters[$i]->paintPass($message); + } + } + + /** + * Chains to the wrapped reporter. + * @param string $message Message is ignored. + * @access public + */ + function paintFail($message) { + for ($i = 0; $i < count($this->_reporters); $i++) { + $this->_reporters[$i]->paintFail($message); + } + } + + /** + * Chains to the wrapped reporter. + * @param string $message Text of error formatted by + * the test case. + * @access public + */ + function paintError($message) { + for ($i = 0; $i < count($this->_reporters); $i++) { + $this->_reporters[$i]->paintError($message); + } + } + + /** + * Chains to the wrapped reporter. + * @param string $message Text to display. + * @access public + */ + function paintMessage($message) { + for ($i = 0; $i < count($this->_reporters); $i++) { + $this->_reporters[$i]->paintMessage($message); + } + } + + /** + * Chains to the wrapped reporter. + * @param string $message Text to display. + * @access public + */ + function paintFormattedMessage($message) { + for ($i = 0; $i < count($this->_reporters); $i++) { + $this->_reporters[$i]->paintFormattedMessage($message); + } + } + + /** + * Chains to the wrapped reporter. + * @param string $type Event type as text. + * @param mixed $payload Message or object. + * @return boolean Should return false if this + * type of signal should fail the + * test suite. + * @access public + */ + function paintSignal($type, $payload) { + for ($i = 0; $i < count($this->_reporters); $i++) { + $this->_reporters[$i]->paintSignal($type, $payload); + } + } + } ?> \ No newline at end of file -- cgit v1.2.3