From 3b3a16db765741502b86fa4ee4f60834684aa665 Mon Sep 17 00:00:00 2001 From: Jan Nedbal Date: Thu, 2 Jul 2026 13:37:04 +0200 Subject: [PATCH] Do not build code unit map when test has no coverage targets --- src/CodeCoverage.php | 8 ++++++-- tests/tests/CodeCoverageTest.php | 6 ++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/CodeCoverage.php b/src/CodeCoverage.php index b146899bb..6da9d6051 100644 --- a/src/CodeCoverage.php +++ b/src/CodeCoverage.php @@ -259,10 +259,10 @@ public function append(RawCodeCoverageData $rawData, ?string $id = null, bool $a $linesToBeUsed = []; if ($covers !== false) { - $linesToBeCovered = $this->targetMapper()->mapTargets($covers); + $linesToBeCovered = $covers->isEmpty() ? [] : $this->targetMapper()->mapTargets($covers); } - if ($linesToBeCovered !== false) { + if ($linesToBeCovered !== false && $uses->isNotEmpty()) { $linesToBeUsed = $this->targetMapper()->mapTargets($uses); } @@ -403,6 +403,10 @@ public function collectsBranchAndPathCoverage(): bool public function validate(TargetCollection $targets): ValidationResult { + if ($targets->isEmpty()) { + return ValidationResult::success(); + } + return (new TargetCollectionValidator)->validate($this->targetMapper(), $targets); } diff --git a/tests/tests/CodeCoverageTest.php b/tests/tests/CodeCoverageTest.php index 895be4588..246972b8e 100644 --- a/tests/tests/CodeCoverageTest.php +++ b/tests/tests/CodeCoverageTest.php @@ -14,6 +14,7 @@ use SebastianBergmann\CodeCoverage\Data\RawCodeCoverageData; use SebastianBergmann\CodeCoverage\Driver\Driver; use SebastianBergmann\CodeCoverage\Driver\Selector; +use SebastianBergmann\CodeCoverage\Test\Target\TargetCollection; use SebastianBergmann\Environment\Runtime; #[CoversClass(CodeCoverage::class)] @@ -140,4 +141,9 @@ public function testMerge2(): void $coverage->getData()->lineCoverage(), ); } + + public function testEmptyTargetCollectionIsValidWithoutBuildingCodeUnitMap(): void + { + $this->assertTrue($this->coverage->validate(TargetCollection::fromArray([]))->isSuccess()); + } }