123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- <?php
-
- require_once 'Sweety/Runner/AbstractTestRunner.php';
-
- /**
- * Runs SimpleTest cases as a group via the command line.
- * @package Sweety
- * @author Chris Corbyn
- */
- class Sweety_Runner_CliRunner extends Sweety_Runner_AbstractTestRunner
- {
-
- /**
- * Directories to scan for test cases.
- * @var string[]
- * @access private
- */
- private $_dirs = array();
-
- /**
- * The command to invoke when running test cases.
- * @var string
- * @access private
- */
- private $_command;
-
- /**
- * Creates a new CliRunner scanning the given directories, using the given
- * command and having the given name.
- * @param string[] $dirs
- * @param string $command
- * @param string $name
- */
- public function __construct(array $dirs, $command)
- {
- $this->_dirs = $dirs;
- $this->_command = $command;
- }
-
- /**
- * Runs all test cases found under the given directories.
- * @param string[] $directories to scan for test cases
- * @param string To be prepended to class names
- * @return int
- */
- public function runAllTests($dirs = array())
- {
- if (empty($dirs))
- {
- $dirs = $this->_dirs;
- }
-
- $reporter = $this->getReporter();
-
- if (!$reporter->isStarted())
- {
- $reporter->start();
- }
-
- $tests = $this->findTests($dirs);
- usort($tests, array($this, '_sort'));
-
- global $argv;
-
- if (!empty($argv[1]))
- {
- if (substr($argv[1], 0, 1) == '!')
- {
- $argv[1] = substr($argv[1], 1);
- foreach ($tests as $index => $name)
- {
- if (@preg_match($argv[1] . 'i', $name))
- {
- unset($tests[$index]);
- }
- }
- }
- else
- {
- foreach ($tests as $index => $name)
- {
- if (!@preg_match($argv[1] . 'i', $name))
- {
- unset($tests[$index]);
- }
- }
- }
- }
-
- $ret = $this->_runTestList($tests);
-
- $reporter->finish();
-
- return $ret;
- }
-
- /**
- * Run all possible tests from the given list.
- * @param string[] $tests
- * @return int
- */
- protected function _runTestList(array $tests)
- {
- foreach ($tests as $testCase)
- {
- if (preg_match($this->getIgnoredClassRegex(), $testCase))
- {
- continue;
- }
-
- $command = $this->_command;
- $command .= ' ' . $testCase;
- $command .= ' ' . Sweety_Runner::REPORT_XML;
-
- exec($command, $output, $status);
-
- $xml = implode(PHP_EOL, $output);
-
- $this->parseXml($xml, $testCase);
-
- unset($status);
- unset($output);
- }
-
- return 0;
- }
-
- }
|