summaryrefslogtreecommitdiff
path: root/vendor/phpunit/phpunit/src/Runner/Filter/Factory.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/phpunit/src/Runner/Filter/Factory.php')
-rw-r--r--vendor/phpunit/phpunit/src/Runner/Filter/Factory.php61
1 files changed, 61 insertions, 0 deletions
diff --git a/vendor/phpunit/phpunit/src/Runner/Filter/Factory.php b/vendor/phpunit/phpunit/src/Runner/Filter/Factory.php
new file mode 100644
index 000000000..3f79da541
--- /dev/null
+++ b/vendor/phpunit/phpunit/src/Runner/Filter/Factory.php
@@ -0,0 +1,61 @@
+<?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\Filter;
+
+use function assert;
+use function sprintf;
+use FilterIterator;
+use Iterator;
+use PHPUnit\Framework\TestSuite;
+use PHPUnit\Runner\Exception;
+use RecursiveFilterIterator;
+use ReflectionClass;
+
+/**
+ * @internal This class is not covered by the backward compatibility promise for PHPUnit
+ */
+final class Factory
+{
+ /**
+ * @psalm-var array<int,array{0: \ReflectionClass, 1: array|string}>
+ */
+ private $filters = [];
+
+ /**
+ * @param array|string $args
+ *
+ * @throws Exception
+ */
+ public function addFilter(ReflectionClass $filter, $args): void
+ {
+ if (!$filter->isSubclassOf(RecursiveFilterIterator::class)) {
+ throw new Exception(
+ sprintf(
+ 'Class "%s" does not extend RecursiveFilterIterator',
+ $filter->name
+ )
+ );
+ }
+
+ $this->filters[] = [$filter, $args];
+ }
+
+ public function factory(Iterator $iterator, TestSuite $suite): FilterIterator
+ {
+ foreach ($this->filters as $filter) {
+ [$class, $args] = $filter;
+ $iterator = $class->newInstance($iterator, $args, $suite);
+ }
+
+ assert($iterator instanceof FilterIterator);
+
+ return $iterator;
+ }
+}