From 6fdbca1226963371d9e1433b5d85684d7f0e123a Mon Sep 17 00:00:00 2001 From: nuno maduro Date: Mon, 6 Apr 2026 23:37:49 +0100 Subject: [PATCH] fix: parallel testing --- .../Parallel/Paratest/WrapperRunner.php | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/Plugins/Parallel/Paratest/WrapperRunner.php b/src/Plugins/Parallel/Paratest/WrapperRunner.php index 064856bc..6c4756f3 100644 --- a/src/Plugins/Parallel/Paratest/WrapperRunner.php +++ b/src/Plugins/Parallel/Paratest/WrapperRunner.php @@ -7,7 +7,6 @@ namespace Pest\Plugins\Parallel\Paratest; use const DIRECTORY_SEPARATOR; use NunoMaduro\Collision\Adapters\Phpunit\Support\ResultReflection; -use ParaTest\Coverage\CoverageMerger; use ParaTest\JUnit\LogMerger; use ParaTest\JUnit\Writer; use ParaTest\Options; @@ -25,11 +24,17 @@ use PHPUnit\TestRunner\TestResult\Facade as TestResultFacade; use PHPUnit\TestRunner\TestResult\TestResult; use PHPUnit\TextUI\Configuration\CodeCoverageFilterRegistry; use PHPUnit\Util\ExcludeList; +use ReflectionProperty; +use SebastianBergmann\CodeCoverage\Node\Builder; +use SebastianBergmann\CodeCoverage\Serialization\Merger; +use SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser; +use SebastianBergmann\CodeCoverage\StaticAnalysis\ParsingSourceAnalyser; use SebastianBergmann\Timer\Timer; use SplFileInfo; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Process\PhpExecutableFinder; +use function array_filter; use function array_merge; use function array_merge_recursive; use function array_shift; @@ -440,10 +445,23 @@ final class WrapperRunner implements RunnerInterface return; } - $coverageMerger = new CoverageMerger($coverageManager->codeCoverage()); - foreach ($this->coverageFiles as $coverageFile) { - $coverageMerger->addCoverageFromFile($coverageFile); + $coverageFiles = []; + foreach ($this->coverageFiles as $fileInfo) { + $realPath = $fileInfo->getRealPath(); + if ($realPath !== false && $realPath !== '') { + $coverageFiles[] = $realPath; + } } + $serializedCoverage = (new Merger)->merge($coverageFiles); + + $report = (new Builder(new FileAnalyser(new ParsingSourceAnalyser, false, false)))->build( + $serializedCoverage['codeCoverage'], + $serializedCoverage['testResults'], + $serializedCoverage['basePath'], + ); + $codeCoverage = $coverageManager->codeCoverage(); + $codeCoverage->setTests($serializedCoverage['testResults']); + (new ReflectionProperty(\SebastianBergmann\CodeCoverage\CodeCoverage::class, 'cachedReport'))->setValue($codeCoverage, $report); $coverageManager->generateReports( $this->printer->printer,