summaryrefslogtreecommitdiff
path: root/modules/simpletest/default_reporter.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules/simpletest/default_reporter.php')
-rw-r--r--modules/simpletest/default_reporter.php75
1 files changed, 75 insertions, 0 deletions
diff --git a/modules/simpletest/default_reporter.php b/modules/simpletest/default_reporter.php
new file mode 100644
index 000000000..8a760353d
--- /dev/null
+++ b/modules/simpletest/default_reporter.php
@@ -0,0 +1,75 @@
+<?php
+// $Id$
+
+/**
+ * Parser for command line arguments. Extracts
+ * the a specific test to run and engages XML
+ * reporting when necessary.
+ */
+class SimpleCommandLineParser {
+ protected $to_property = array('c' => 'case', 't' => 'test');
+ protected $case = '';
+ protected $test = '';
+ protected $xml = false;
+
+ function SimpleCommandLineParser($arguments) {
+ if (!is_array($arguments)) {
+ return;
+ }
+ foreach ($arguments as $i => $argument) {
+ if (preg_match('/^--?(test|case|t|c)=(.+)$/', $argument, $matches)) {
+ $this->{$this->_parseProperty($matches[1])} = $matches[2];
+ }
+ elseif (preg_match('/^--?(test|case|t|c)$/', $argument, $matches)) {
+ if (isset($arguments[$i + 1])) {
+ $this->{$this->_parseProperty($matches[1])} = $arguments[$i + 1];
+ }
+ }
+ elseif (preg_match('/^--?(xml|x)$/', $argument)) {
+ $this->xml = true;
+ }
+ }
+ }
+ function _parseProperty($property) {
+ if (isset($this->to_property[$property])) {
+ return $this->to_property[$property];
+ }
+ else {
+ return $property;
+ }
+ }
+ function getTest() {
+ return $this->test;
+ }
+
+ function getTestCase() {
+ return $this->case;
+ }
+
+ function isXml() {
+ return $this->xml;
+ }
+}
+
+/**
+ * The default reporter used by SimpleTest's autorun
+ * feature. The actual reporters used are dependency
+ * injected and can be overridden.
+ */
+class DefaultReporter extends SimpleReporterDecorator {
+ /**
+ * Assembles the appopriate reporter for the environment.
+ */
+ function DefaultReporter() {
+ if (SimpleReporter::inCli()) {
+ global $argv;
+ $parser = new SimpleCommandLineParser($argv);
+ $interfaces = $parser->isXml() ? array('XmlReporter') : array('TextReporter');
+ $reporter = &new SelectiveReporter(SimpleTest::preferred($interfaces), $parser->getTestCase(), $parser->getTest());
+ }
+ else {
+ $reporter = &new SelectiveReporter(SimpleTest::preferred('HtmlReporter'), @$_GET['c'], @$_GET['t']);
+ }
+ $this->SimpleReporterDecorator($reporter);
+ }
+}