From 20fa23469e26590b3094cae6f380f95a56cc5611 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Wed, 8 Feb 2023 09:14:00 +0100 Subject: [PATCH] CodeCoverage: use non-singleton local instances from PHPUnit 10.0.6 (#728) --- composer.json | 2 +- src/Util/PhpstormHelper.php | 23 ++---------------- .../ApplicationForWrapperWorker.php | 14 +++++++---- src/WrapperRunner/EmptyLogFileException.php | 12 ---------- src/WrapperRunner/SuiteLoader.php | 9 +++++-- src/WrapperRunner/WrapperRunner.php | 24 ++++++++++--------- test/Unit/WrapperRunner/SuiteLoaderTest.php | 3 ++- 7 files changed, 35 insertions(+), 52 deletions(-) delete mode 100644 src/WrapperRunner/EmptyLogFileException.php diff --git a/composer.json b/composer.json index 91a3d830..ad799e1d 100644 --- a/composer.json +++ b/composer.json @@ -43,7 +43,7 @@ "phpunit/php-code-coverage": "^10.0", "phpunit/php-file-iterator": "^4.0", "phpunit/php-timer": "^6.0", - "phpunit/phpunit": "^10.0.5", + "phpunit/phpunit": "^10.0.6", "sebastian/environment": "^6.0", "symfony/console": "^6.2.5", "symfony/process": "^6.2.5" diff --git a/src/Util/PhpstormHelper.php b/src/Util/PhpstormHelper.php index c9509b60..93872287 100644 --- a/src/Util/PhpstormHelper.php +++ b/src/Util/PhpstormHelper.php @@ -9,8 +9,7 @@ use function array_search; use function array_unshift; use function in_array; -use function strlen; -use function substr_compare; +use function str_ends_with; /** @internal */ final class PhpstormHelper @@ -50,7 +49,7 @@ public static function handleArgvFromPhpstorm(array &$argv, string $paratestBina private static function getArgvKeyFor(array $argv, string $searchFor): int { foreach ($argv as $key => $arg) { - if (self::strEndsWith($arg, $searchFor)) { + if (str_ends_with($arg, $searchFor)) { return $key; } } @@ -58,24 +57,6 @@ private static function getArgvKeyFor(array $argv, string $searchFor): int throw new RuntimeException("Missing path to '$searchFor'"); } - /** - * Polyfill from PHP 8.0, drop when 7.4 support ends - */ - public static function strEndsWith(string $haystack, string $needle): bool - { - if ($needle === '' || $needle === $haystack) { - return true; - } - - if ($haystack === '') { - return false; - } - - $needleLength = strlen($needle); - - return $needleLength <= strlen($haystack) && substr_compare($haystack, $needle, -$needleLength) === 0; - } - /** * @param array $argv * diff --git a/src/WrapperRunner/ApplicationForWrapperWorker.php b/src/WrapperRunner/ApplicationForWrapperWorker.php index 2c6bff5b..0569e06d 100644 --- a/src/WrapperRunner/ApplicationForWrapperWorker.php +++ b/src/WrapperRunner/ApplicationForWrapperWorker.php @@ -19,6 +19,7 @@ use PHPUnit\Runner\TestSuiteSorter; use PHPUnit\TestRunner\TestResult\Facade as TestResultFacade; use PHPUnit\TextUI\Configuration\Builder; +use PHPUnit\TextUI\Configuration\CodeCoverageFilterRegistry; use PHPUnit\TextUI\Configuration\Configuration; use PHPUnit\TextUI\Configuration\PhpHandler; use PHPUnit\TextUI\Output\Default\ProgressPrinter\ProgressPrinter; @@ -32,7 +33,11 @@ use function mt_srand; use function serialize; -/** @internal */ +/** + * @internal + * + * @codeCoverageIgnore + */ final class ApplicationForWrapperWorker { private bool $hasBeenBootstrapped = false; @@ -109,7 +114,7 @@ private function bootstrap(): void } } - CodeCoverage::init($this->configuration); + CodeCoverage::instance()->init($this->configuration, CodeCoverageFilterRegistry::instance()); if ($this->configuration->hasLogfileJunit()) { new JunitXmlLogger(DefaultPrinter::from($this->configuration->logfileJunit())); @@ -145,15 +150,16 @@ public function end(): void EventFacade::emitter()->testRunnerExecutionFinished(); EventFacade::emitter()->testRunnerFinished(); - CodeCoverage::generateReports(new NullPrinter(), $this->configuration); + CodeCoverage::instance()->generateReports(new NullPrinter(), $this->configuration); + $result = TestResultFacade::result(); if (isset($this->testdoxResultCollector)) { (new TestDoxResultPrinter(DefaultPrinter::from($this->testdoxFile), $this->testdoxColor))->print( $this->testdoxResultCollector->testMethodsGroupedByClass(), + $result, ); } - $result = TestResultFacade::result(); file_put_contents($this->testresultFile, serialize($result)); EventFacade::emitter()->applicationFinished(0); diff --git a/src/WrapperRunner/EmptyLogFileException.php b/src/WrapperRunner/EmptyLogFileException.php deleted file mode 100644 index f5a0cb11..00000000 --- a/src/WrapperRunner/EmptyLogFileException.php +++ /dev/null @@ -1,12 +0,0 @@ -handle($this->options->configuration->php()); @@ -79,7 +81,10 @@ public function __construct( } ob_start(); - $result = (new WarmCodeCoverageCacheCommand($this->options->configuration))->execute(); + $result = (new WarmCodeCoverageCacheCommand( + $this->options->configuration, + $codeCoverageFilterRegistry, + ))->execute(); $output->write(ob_get_clean()); $output->write($result->output()); if ($result->shellExitCode() !== Result::SUCCESS) { diff --git a/src/WrapperRunner/WrapperRunner.php b/src/WrapperRunner/WrapperRunner.php index e8303f03..f73f2be9 100644 --- a/src/WrapperRunner/WrapperRunner.php +++ b/src/WrapperRunner/WrapperRunner.php @@ -13,6 +13,7 @@ use PHPUnit\Runner\CodeCoverage; use PHPUnit\TestRunner\TestResult\Facade as TestResultFacade; use PHPUnit\TestRunner\TestResult\TestResult; +use PHPUnit\TextUI\Configuration\CodeCoverageFilterRegistry; use PHPUnit\TextUI\ShellExitCodeCalculator; use PHPUnit\Util\ExcludeList; use SplFileInfo; @@ -58,9 +59,9 @@ final class WrapperRunner implements RunnerInterface private array $teamcityFiles = []; /** @var list */ private array $testdoxFiles = []; - /** @var non-empty-string[] */ private readonly array $parameters; + private CodeCoverageFilterRegistry $codeCoverageFilterRegistry; public function __construct( private readonly Options $options, @@ -84,7 +85,8 @@ public function __construct( $parameters[] = $wrapper; - $this->parameters = $parameters; + $this->parameters = $parameters; + $this->codeCoverageFilterRegistry = new CodeCoverageFilterRegistry(); } public function run(): int @@ -92,7 +94,11 @@ public function run(): int ExcludeList::addDirectory(dirname(__DIR__)); TestResultFacade::init(); EventFacade::seal(); - $suiteLoader = new SuiteLoader($this->options, $this->output); + $suiteLoader = new SuiteLoader( + $this->options, + $this->output, + $this->codeCoverageFilterRegistry, + ); $result = TestResultFacade::result(); $this->pending = $suiteLoader->files; @@ -105,11 +111,6 @@ public function run(): int return $this->complete($result); } - public function getExitCode(): int - { - return $this->exitcode; - } - private function startWorkers(): void { for ($token = 1; $token <= $this->options->processes; ++$token) { @@ -300,13 +301,14 @@ protected function generateCodeCoverageReports(): void return; } - CodeCoverage::init($this->options->configuration); - $coverageMerger = new CoverageMerger(CodeCoverage::instance()); + $coverageManager = new CodeCoverage(); + $coverageManager->init($this->options->configuration, $this->codeCoverageFilterRegistry); + $coverageMerger = new CoverageMerger($coverageManager->codeCoverage()); foreach ($this->coverageFiles as $coverageFile) { $coverageMerger->addCoverageFromFile($coverageFile); } - CodeCoverage::generateReports( + $coverageManager->generateReports( $this->printer->printer, $this->options->configuration, ); diff --git a/test/Unit/WrapperRunner/SuiteLoaderTest.php b/test/Unit/WrapperRunner/SuiteLoaderTest.php index bcce1f00..dd1b91c8 100644 --- a/test/Unit/WrapperRunner/SuiteLoaderTest.php +++ b/test/Unit/WrapperRunner/SuiteLoaderTest.php @@ -6,6 +6,7 @@ use ParaTest\Tests\TestBase; use ParaTest\WrapperRunner\SuiteLoader; +use PHPUnit\TextUI\Configuration\CodeCoverageFilterRegistry; use Symfony\Component\Console\Output\BufferedOutput; use function array_shift; @@ -59,6 +60,6 @@ private function loadSuite(?string $cwd = null): SuiteLoader { $options = $this->createOptionsFromArgv($this->bareOptions, $cwd); - return new SuiteLoader($options, $this->output); + return new SuiteLoader($options, $this->output, new CodeCoverageFilterRegistry()); } }