Viewing file: BaseTestRunner.php (3.53 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php declare(strict_types=1); /* * This file is part of PHPUnit. * * (c) Sebastian Bergmann <sebastian@phpunit.de> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner;
use function is_dir; use function is_file; use function substr; use PHPUnit\Framework\Exception; use PHPUnit\Framework\TestSuite; use ReflectionClass; use ReflectionException; use SebastianBergmann\FileIterator\Facade as FileIteratorFacade;
/** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ abstract class BaseTestRunner { /** * @var int */ public const STATUS_UNKNOWN = -1;
/** * @var int */ public const STATUS_PASSED = 0;
/** * @var int */ public const STATUS_SKIPPED = 1;
/** * @var int */ public const STATUS_INCOMPLETE = 2;
/** * @var int */ public const STATUS_FAILURE = 3;
/** * @var int */ public const STATUS_ERROR = 4;
/** * @var int */ public const STATUS_RISKY = 5;
/** * @var int */ public const STATUS_WARNING = 6;
/** * @var string */ public const SUITE_METHODNAME = 'suite';
/** * Returns the loader to be used. */ public function getLoader(): TestSuiteLoader { return new StandardTestSuiteLoader; }
/** * Returns the Test corresponding to the given suite. * This is a template method, subclasses override * the runFailed() and clearStatus() methods. * * @param string|string[] $suffixes * * @throws Exception */ public function getTest(string $suiteClassFile, $suffixes = ''): ?TestSuite { if (is_dir($suiteClassFile)) { /** @var string[] $files */ $files = (new FileIteratorFacade)->getFilesAsArray( $suiteClassFile, $suffixes, );
$suite = new TestSuite($suiteClassFile); $suite->addTestFiles($files);
return $suite; }
if (is_file($suiteClassFile) && substr($suiteClassFile, -5, 5) === '.phpt') { $suite = new TestSuite; $suite->addTestFile($suiteClassFile);
return $suite; }
try { $testClass = $this->loadSuiteClass( $suiteClassFile, ); } catch (\PHPUnit\Exception $e) { $this->runFailed($e->getMessage());
return null; }
try { $suiteMethod = $testClass->getMethod(self::SUITE_METHODNAME);
if (!$suiteMethod->isStatic()) { $this->runFailed( 'suite() method must be static.', );
return null; }
$test = $suiteMethod->invoke(null, $testClass->getName()); } catch (ReflectionException $e) { $test = new TestSuite($testClass); }
$this->clearStatus();
return $test; }
/** * Returns the loaded ReflectionClass for a suite name. */ protected function loadSuiteClass(string $suiteClassFile): ReflectionClass { return $this->getLoader()->load($suiteClassFile); }
/** * Clears the status message. */ protected function clearStatus(): void { }
/** * Override to define how to handle a failed loading of * a test suite. */ abstract protected function runFailed(string $message): void; }
|