3 * This file is part of PHPUnit.
5 * (c) Sebastian Bergmann <sebastian@phpunit.de>
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
12 * Base class for all test runners.
14 * @since Class available since Release 2.0.0
16 abstract class PHPUnit_Runner_BaseTestRunner
18 const STATUS_PASSED = 0;
19 const STATUS_SKIPPED = 1;
20 const STATUS_INCOMPLETE = 2;
21 const STATUS_FAILURE = 3;
22 const STATUS_ERROR = 4;
23 const STATUS_RISKY = 5;
24 const SUITE_METHODNAME = 'suite';
27 * Returns the loader to be used.
29 * @return PHPUnit_Runner_TestSuiteLoader
31 public function getLoader()
33 return new PHPUnit_Runner_StandardTestSuiteLoader;
37 * Returns the Test corresponding to the given suite.
38 * This is a template method, subclasses override
39 * the runFailed() and clearStatus() methods.
41 * @param string $suiteClassName
42 * @param string $suiteClassFile
43 * @param mixed $suffixes
45 * @return PHPUnit_Framework_Test
47 public function getTest($suiteClassName, $suiteClassFile = '', $suffixes = '')
49 if (is_dir($suiteClassName) &&
50 !is_file($suiteClassName . '.php') && empty($suiteClassFile)) {
51 $facade = new File_Iterator_Facade;
52 $files = $facade->getFilesAsArray(
57 $suite = new PHPUnit_Framework_TestSuite($suiteClassName);
58 $suite->addTestFiles($files);
64 $testClass = $this->loadSuiteClass(
68 } catch (PHPUnit_Framework_Exception $e) {
69 $this->runFailed($e->getMessage());
75 $suiteMethod = $testClass->getMethod(self::SUITE_METHODNAME);
77 if (!$suiteMethod->isStatic()) {
79 'suite() method must be static.'
86 $test = $suiteMethod->invoke(null, $testClass->getName());
87 } catch (ReflectionException $e) {
90 "Failed to invoke suite() method.\n%s",
97 } catch (ReflectionException $e) {
99 $test = new PHPUnit_Framework_TestSuite($testClass);
100 } catch (PHPUnit_Framework_Exception $e) {
101 $test = new PHPUnit_Framework_TestSuite;
102 $test->setName($suiteClassName);
106 $this->clearStatus();
112 * Returns the loaded ReflectionClass for a suite name.
114 * @param string $suiteClassName
115 * @param string $suiteClassFile
117 * @return ReflectionClass
119 protected function loadSuiteClass($suiteClassName, $suiteClassFile = '')
121 $loader = $this->getLoader();
123 return $loader->load($suiteClassName, $suiteClassFile);
127 * Clears the status message.
129 protected function clearStatus()
134 * Override to define how to handle a failed loading of
137 * @param string $message
139 abstract protected function runFailed($message);