diff options
Diffstat (limited to '3rdparty/simpletest/default_reporter.php')
-rw-r--r-- | 3rdparty/simpletest/default_reporter.php | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/3rdparty/simpletest/default_reporter.php b/3rdparty/simpletest/default_reporter.php new file mode 100644 index 00000000000..6feb67a3088 --- /dev/null +++ b/3rdparty/simpletest/default_reporter.php @@ -0,0 +1,163 @@ +<?php +/** + * Optional include file for SimpleTest + * @package SimpleTest + * @subpackage UnitTester + * @version $Id: default_reporter.php 2011 2011-04-29 08:22:48Z pp11 $ + */ + +/**#@+ + * include other SimpleTest class files + */ +require_once(dirname(__FILE__) . '/simpletest.php'); +require_once(dirname(__FILE__) . '/scorer.php'); +require_once(dirname(__FILE__) . '/reporter.php'); +require_once(dirname(__FILE__) . '/xml.php'); +/**#@-*/ + +/** + * Parser for command line arguments. Extracts + * the a specific test to run and engages XML + * reporting when necessary. + * @package SimpleTest + * @subpackage UnitTester + */ +class SimpleCommandLineParser { + private $to_property = array( + 'case' => 'case', 'c' => 'case', + 'test' => 'test', 't' => 'test', + ); + private $case = ''; + private $test = ''; + private $xml = false; + private $help = false; + private $no_skips = false; + + /** + * Parses raw command line arguments into object properties. + * @param string $arguments Raw commend line arguments. + */ + function __construct($arguments) { + if (! is_array($arguments)) { + return; + } + foreach ($arguments as $i => $argument) { + if (preg_match('/^--?(test|case|t|c)=(.+)$/', $argument, $matches)) { + $property = $this->to_property[$matches[1]]; + $this->$property = $matches[2]; + } elseif (preg_match('/^--?(test|case|t|c)$/', $argument, $matches)) { + $property = $this->to_property[$matches[1]]; + if (isset($arguments[$i + 1])) { + $this->$property = $arguments[$i + 1]; + } + } elseif (preg_match('/^--?(xml|x)$/', $argument)) { + $this->xml = true; + } elseif (preg_match('/^--?(no-skip|no-skips|s)$/', $argument)) { + $this->no_skips = true; + } elseif (preg_match('/^--?(help|h)$/', $argument)) { + $this->help = true; + } + } + } + + /** + * Run only this test. + * @return string Test name to run. + */ + function getTest() { + return $this->test; + } + + /** + * Run only this test suite. + * @return string Test class name to run. + */ + function getTestCase() { + return $this->case; + } + + /** + * Output should be XML or not. + * @return boolean True if XML desired. + */ + function isXml() { + return $this->xml; + } + + /** + * Output should suppress skip messages. + * @return boolean True for no skips. + */ + function noSkips() { + return $this->no_skips; + } + + /** + * Output should be a help message. Disabled during XML mode. + * @return boolean True if help message desired. + */ + function help() { + return $this->help && ! $this->xml; + } + + /** + * Returns plain-text help message for command line runner. + * @return string String help message + */ + function getHelpText() { + return <<<HELP +SimpleTest command line default reporter (autorun) +Usage: php <test_file> [args...] + + -c <class> Run only the test-case <class> + -t <method> Run only the test method <method> + -s Suppress skip messages + -x Return test results in XML + -h Display this help message + +HELP; + } + +} + +/** + * The default reporter used by SimpleTest's autorun + * feature. The actual reporters used are dependency + * injected and can be overridden. + * @package SimpleTest + * @subpackage UnitTester + */ +class DefaultReporter extends SimpleReporterDecorator { + + /** + * Assembles the appropriate reporter for the environment. + */ + function __construct() { + if (SimpleReporter::inCli()) { + $parser = new SimpleCommandLineParser($_SERVER['argv']); + $interfaces = $parser->isXml() ? array('XmlReporter') : array('TextReporter'); + if ($parser->help()) { + // I'm not sure if we should do the echo'ing here -- ezyang + echo $parser->getHelpText(); + exit(1); + } + $reporter = new SelectiveReporter( + SimpleTest::preferred($interfaces), + $parser->getTestCase(), + $parser->getTest()); + if ($parser->noSkips()) { + $reporter = new NoSkipsReporter($reporter); + } + } else { + $reporter = new SelectiveReporter( + SimpleTest::preferred('HtmlReporter'), + @$_GET['c'], + @$_GET['t']); + if (@$_GET['skips'] == 'no' || @$_GET['show-skips'] == 'no') { + $reporter = new NoSkipsReporter($reporter); + } + } + parent::__construct($reporter); + } +} +?>
\ No newline at end of file |