diff --git a/src/MinCoverage/MinCoverageResult.php b/src/MinCoverage/MinCoverageResult.php index 2e20a8a..aa3f0d8 100644 --- a/src/MinCoverage/MinCoverageResult.php +++ b/src/MinCoverage/MinCoverageResult.php @@ -85,6 +85,9 @@ public static function mapFromRulesAndMetrics( $coveragePercentage = 0; foreach ($metricsForPattern as $metric) { + if (0 === $totalTrackedLines) { + continue; + } $weight = $metric->getNumberOfTrackedLines() / $totalTrackedLines; $coveragePercentage += ($metric->getTotalPercentageCoverage() * $weight); } diff --git a/tests/Subscriber/Application/ApplicationFinishedSubscriberTest.php b/tests/Subscriber/Application/ApplicationFinishedSubscriberTest.php index 8721ce3..a9f8b11 100644 --- a/tests/Subscriber/Application/ApplicationFinishedSubscriberTest.php +++ b/tests/Subscriber/Application/ApplicationFinishedSubscriberTest.php @@ -282,6 +282,40 @@ public function testDivideByZero(): void $this->assertMatchesTextSnapshot($this->output); } + public function testNotifyWhenNoTrackedLines(): void + { + $this->exitter + ->expects($this->never()) + ->method('exit'); + + $subscriber = new ApplicationFinishedSubscriber( + relativePathToCloverXml: 'tests/clover-with-no-tracked-lines.xml', + minCoverageRules: MinCoverageRules::fromConfigFile('tests/Subscriber/Application/min-coverage-rules-no-tracked-lines.php'), + cleanUpCloverXml: false, + exitter: $this->exitter, + consoleOutput: new ConsoleOutput($this->output, $this->resourceUsageFormatter), + timer: $this->timer, + ); + + $subscriber->notify(event: new Finished( + new Info( + current: new Snapshot( + time: HRTime::fromSecondsAndNanoseconds(1, 0), + memoryUsage: MemoryUsage::fromBytes(100), + peakMemoryUsage: MemoryUsage::fromBytes(100), + garbageCollectorStatus: new GarbageCollectorStatus(0, 0, 0, 0, null, null, null, null, null, null, null, null) + ), + durationSinceStart: Duration::fromSecondsAndNanoseconds(1, 0), + memorySinceStart: MemoryUsage::fromBytes(100), + durationSincePrevious: Duration::fromSecondsAndNanoseconds(1, 0), + memorySincePrevious: MemoryUsage::fromBytes(100), + ), + 0 + )); + + $this->assertMatchesTextSnapshot($this->output); + } + public function testNotifyWithNonExistingCloverFile(): void { $this->exitter diff --git a/tests/Subscriber/Application/__snapshots__/ApplicationFinishedSubscriberTest__testNotifyWhenNoTrackedLines__1.txt b/tests/Subscriber/Application/__snapshots__/ApplicationFinishedSubscriberTest__testNotifyWhenNoTrackedLines__1.txt new file mode 100644 index 0000000..bce2996 --- /dev/null +++ b/tests/Subscriber/Application/__snapshots__/ApplicationFinishedSubscriberTest__testNotifyWhenNoTrackedLines__1.txt @@ -0,0 +1,10 @@ + ++-----------------------+------- Code coverage results -----------------+-------------+ +| Pattern | Expected | Actual | | Exit on | +| | | | | fail? | ++-----------------------+------------+----------+-----------------------+-------------+ +| *CommandHandler | 20% | 0% | No lines to track...? | Yes | ++-----------------------+------------+----------+-----------------------+-------------+ +| There was at least one pattern that did not match any covered classes. Please consider removing them. | ++-----------------------+------------+----------+-----------------------+-------------+ +Time: 00:00.350, Memory: 12.00 MB \ No newline at end of file diff --git a/tests/Subscriber/Application/min-coverage-rules-no-tracked-lines.php b/tests/Subscriber/Application/min-coverage-rules-no-tracked-lines.php new file mode 100644 index 0000000..b44f71e --- /dev/null +++ b/tests/Subscriber/Application/min-coverage-rules-no-tracked-lines.php @@ -0,0 +1,11 @@ + + + + + + + + + + +