![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mcoil.corals.io/vendor/phpunit/phpunit/src/Runner/Filter/ |
<?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 end; use function preg_match; use function sprintf; use function str_replace; use PHPUnit\Framework\Test; use PHPUnit\Framework\TestSuite; use PHPUnit\Runner\PhptTestCase; use RecursiveFilterIterator; use RecursiveIterator; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ abstract class NameFilterIterator extends RecursiveFilterIterator { /** * @psalm-var non-empty-string */ private readonly string $regularExpression; private readonly ?int $dataSetMinimum; private readonly ?int $dataSetMaximum; /** * @psalm-param RecursiveIterator<int, Test> $iterator * @psalm-param non-empty-string $filter */ public function __construct(RecursiveIterator $iterator, string $filter) { parent::__construct($iterator); $preparedFilter = $this->prepareFilter($filter); $this->regularExpression = $preparedFilter['regularExpression']; $this->dataSetMinimum = $preparedFilter['dataSetMinimum']; $this->dataSetMaximum = $preparedFilter['dataSetMaximum']; } public function accept(): bool { $test = $this->getInnerIterator()->current(); if ($test instanceof TestSuite) { return true; } if ($test instanceof PhptTestCase) { return false; } $name = $test::class . '::' . $test->nameWithDataSet(); $accepted = @preg_match($this->regularExpression, $name, $matches) === 1; if ($accepted && isset($this->dataSetMaximum)) { $set = end($matches); $accepted = $set >= $this->dataSetMinimum && $set <= $this->dataSetMaximum; } return $this->doAccept($accepted); } abstract protected function doAccept(bool $result): bool; /** * @psalm-param non-empty-string $filter * * @psalm-return array{regularExpression: non-empty-string, dataSetMinimum: ?int, dataSetMaximum: ?int} */ private function prepareFilter(string $filter): array { $dataSetMinimum = null; $dataSetMaximum = null; if (@preg_match($filter, '') === false) { // Handles: // * testAssertEqualsSucceeds#4 // * testAssertEqualsSucceeds#4-8 if (preg_match('/^(.*?)#(\d+)(?:-(\d+))?$/', $filter, $matches)) { if (isset($matches[3]) && $matches[2] < $matches[3]) { $filter = sprintf( '%s.*with data set #(\d+)$', $matches[1], ); $dataSetMinimum = (int) $matches[2]; $dataSetMaximum = (int) $matches[3]; } else { $filter = sprintf( '%s.*with data set #%s$', $matches[1], $matches[2], ); } } // Handles: // * testDetermineJsonError@JSON_ERROR_NONE // * testDetermineJsonError@JSON.* elseif (preg_match('/^(.*?)@(.+)$/', $filter, $matches)) { $filter = sprintf( '%s.*with data set "%s"$', $matches[1], $matches[2], ); } // Escape delimiters in regular expression. Do NOT use preg_quote, // to keep magic characters. $filter = sprintf( '/%s/i', str_replace( '/', '\\/', $filter, ), ); } return [ 'regularExpression' => $filter, 'dataSetMinimum' => $dataSetMinimum, 'dataSetMaximum' => $dataSetMaximum, ]; } }