From 55c4ac1bfe565f1ca7f537fdd8b7a201be28e581 Mon Sep 17 00:00:00 2001 From: xue <> Date: Thu, 10 Nov 2005 12:47:19 +0000 Subject: Initial import of prado framework --- tests/UnitTests/simpletest/runner.php | 300 ++++++++++++++++++++++++++++++++++ 1 file changed, 300 insertions(+) create mode 100644 tests/UnitTests/simpletest/runner.php (limited to 'tests/UnitTests/simpletest/runner.php') diff --git a/tests/UnitTests/simpletest/runner.php b/tests/UnitTests/simpletest/runner.php new file mode 100644 index 00000000..5a14332d --- /dev/null +++ b/tests/UnitTests/simpletest/runner.php @@ -0,0 +1,300 @@ +_test_case = $test_case; + } + + /** + * Accessor for test case being run. + * @return SimpleTestCase Test case. + * @access public + */ + function getTestCase() { + return $this->_test_case; + } + + /** + * Invokes a test method and buffered with setUp() + * and tearDown() calls. + * @param string $method Test method to call. + * @access public + */ + function invoke($method) { + $this->_test_case->setUp(); + $this->_test_case->$method(); + $this->_test_case->tearDown(); + } + } + + /** + * Do nothing decorator. Just passes the invocation + * straight through. + * @package SimpleTest + * @subpackage UnitTester + */ + class SimpleInvokerDecorator { + protected $_invoker; + + /** + * Stores the invoker to wrap. + * @param SimpleInvoker $invoker Test method runner. + */ + function SimpleInvokerDecorator($invoker) { + $this->_invoker = $invoker; + } + + /** + * Accessor for test case being run. + * @return SimpleTestCase Test case. + * @access public + */ + function getTestCase() { + return $this->_invoker->getTestCase(); + } + + /** + * Invokes a test method and buffered with setUp() + * and tearDown() calls. + * @param string $method Test method to call. + * @access public + */ + function invoke($method) { + $this->_invoker->invoke($method); + } + } + + /** + * 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()) { + $test_case = $this->getTestCase(); + $test_case->error($severity, $message, $file, $line, $globals); + } + restore_error_handler(); + } + } + + /** + * The standard runner. Will run every method starting + * with test Basically the + * Mediator pattern. + * @package SimpleTest + * @subpackage UnitTester + */ + class SimpleRunner { + protected $_test_case; + protected $_scorer; + + /** + * Takes in the test case and reporter to mediate between. + * @param SimpleTestCase $test_case Test case to run. + * @param SimpleScorer $scorer Reporter to receive events. + */ + function SimpleRunner($test_case, $scorer) { + $this->_test_case = $test_case; + $this->_scorer = $scorer; + } + + /** + * Accessor for test case being run. + * @return SimpleTestCase Test case. + * @access public + */ + function getTestCase() { + return $this->_test_case; + } + + /** + * Runs the test methods in the test case. + * @param SimpleTest $test_case Test case to run test on. + * @param string $method Name of test method. + * @access public + */ + function run() { + $methods = get_class_methods(get_class($this->_test_case)); + $invoker = $this->_test_case->createInvoker(); + foreach ($methods as $method) { + if (! $this->_isTest($method)) { + continue; + } + if ($this->_isConstructor($method)) { + continue; + } + $this->_scorer->paintMethodStart($method); + if ($this->_scorer->shouldInvoke($this->_test_case->getLabel(), $method)) { + $invoker->invoke($method); + } + $this->_scorer->paintMethodEnd($method); + } + } + + /** + * Tests to see if the method is the constructor and + * so should be ignored. + * @param string $method Method name to try. + * @return boolean True if constructor. + * @access protected + */ + function _isConstructor($method) { + return SimpleTestCompatibility::isA( + $this->_test_case, + strtolower($method)); + } + + /** + * Tests to see if the method is a test that should + * be run. Currently any method that starts with 'test' + * is a candidate. + * @param string $method Method name to try. + * @return boolean True if test method. + * @access protected + */ + function _isTest($method) { + return strtolower(substr($method, 0, 4)) == 'test'; + } + + /** + * Paints the start of a test method. + * @param string $test_name Name of test or other label. + * @access public + */ + function paintMethodStart($test_name) { + $this->_scorer->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->_scorer->paintMethodEnd($test_name); + } + + /** + * Chains to the wrapped reporter. + * @param string $message Message is ignored. + * @access public + */ + function paintPass($message) { + $this->_scorer->paintPass($message); + } + + /** + * Chains to the wrapped reporter. + * @param string $message Message is ignored. + * @access public + */ + function paintFail($message) { + $this->_scorer->paintFail($message); + } + + /** + * Chains to the wrapped reporter. + * @param string $message Text of error formatted by + * the test case. + * @access public + */ + function paintError($message) { + $this->_scorer->paintError($message); + } + + /** + * Chains to the wrapped reporter. + * @param Exception $exception Object thrown. + * @access public + */ + function paintException($exception) { + $this->_scorer->paintException($exception); + } + + /** + * Chains to the wrapped reporter. + * @param string $message Text to display. + * @access public + */ + function paintMessage($message) { + $this->_scorer->paintMessage($message); + } + + /** + * Chains to the wrapped reporter. + * @param string $message Text to display. + * @access public + */ + function paintFormattedMessage($message) { + $this->_scorer->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->_scorer->paintSignal($type, $payload); + } + } +?> -- cgit v1.2.3