summaryrefslogtreecommitdiff
path: root/vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php')
-rw-r--r--vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php161
1 files changed, 161 insertions, 0 deletions
diff --git a/vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php b/vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php
new file mode 100644
index 000000000..75a70ca5f
--- /dev/null
+++ b/vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php
@@ -0,0 +1,161 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of PHPUnit.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * 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;
+}