summaryrefslogtreecommitdiff
path: root/vendor/phpunit/phpunit/src/TextUI/TestSuiteMapper.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/phpunit/src/TextUI/TestSuiteMapper.php')
-rw-r--r--vendor/phpunit/phpunit/src/TextUI/TestSuiteMapper.php103
1 files changed, 103 insertions, 0 deletions
diff --git a/vendor/phpunit/phpunit/src/TextUI/TestSuiteMapper.php b/vendor/phpunit/phpunit/src/TextUI/TestSuiteMapper.php
new file mode 100644
index 000000000..8a703aeea
--- /dev/null
+++ b/vendor/phpunit/phpunit/src/TextUI/TestSuiteMapper.php
@@ -0,0 +1,103 @@
+<?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\TextUI;
+
+use const PHP_VERSION;
+use function explode;
+use function in_array;
+use function is_dir;
+use function is_file;
+use function strpos;
+use function version_compare;
+use PHPUnit\Framework\Exception as FrameworkException;
+use PHPUnit\Framework\TestSuite as TestSuiteObject;
+use PHPUnit\TextUI\XmlConfiguration\TestSuiteCollection;
+use SebastianBergmann\FileIterator\Facade;
+
+/**
+ * @internal This class is not covered by the backward compatibility promise for PHPUnit
+ */
+final class TestSuiteMapper
+{
+ /**
+ * @throws RuntimeException
+ * @throws TestDirectoryNotFoundException
+ * @throws TestFileNotFoundException
+ */
+ public function map(TestSuiteCollection $configuration, string $filter): TestSuiteObject
+ {
+ try {
+ $filterAsArray = $filter ? explode(',', $filter) : [];
+ $result = new TestSuiteObject;
+
+ foreach ($configuration as $testSuiteConfiguration) {
+ if (!empty($filterAsArray) && !in_array($testSuiteConfiguration->name(), $filterAsArray, true)) {
+ continue;
+ }
+
+ $testSuite = new TestSuiteObject($testSuiteConfiguration->name());
+ $testSuiteEmpty = true;
+
+ foreach ($testSuiteConfiguration->directories() as $directory) {
+ if (!version_compare(PHP_VERSION, $directory->phpVersion(), $directory->phpVersionOperator()->asString())) {
+ continue;
+ }
+
+ $exclude = [];
+
+ foreach ($testSuiteConfiguration->exclude()->asArray() as $file) {
+ $exclude[] = $file->path();
+ }
+
+ $files = (new Facade)->getFilesAsArray(
+ $directory->path(),
+ $directory->suffix(),
+ $directory->prefix(),
+ $exclude
+ );
+
+ if (!empty($files)) {
+ $testSuite->addTestFiles($files);
+
+ $testSuiteEmpty = false;
+ } elseif (strpos($directory->path(), '*') === false && !is_dir($directory->path())) {
+ throw new TestDirectoryNotFoundException($directory->path());
+ }
+ }
+
+ foreach ($testSuiteConfiguration->files() as $file) {
+ if (!is_file($file->path())) {
+ throw new TestFileNotFoundException($file->path());
+ }
+
+ if (!version_compare(PHP_VERSION, $file->phpVersion(), $file->phpVersionOperator()->asString())) {
+ continue;
+ }
+
+ $testSuite->addTestFile($file->path());
+
+ $testSuiteEmpty = false;
+ }
+
+ if (!$testSuiteEmpty) {
+ $result->addTest($testSuite);
+ }
+ }
+
+ return $result;
+ } catch (FrameworkException $e) {
+ throw new RuntimeException(
+ $e->getMessage(),
+ (int) $e->getCode(),
+ $e
+ );
+ }
+ }
+}