From 1c95329a1b8adc533d021cd70f4e432783adab0d Mon Sep 17 00:00:00 2001 From: Sebastian Bergmann Date: Sat, 20 Jun 2020 07:05:35 +0200 Subject: [PATCH] Closes #4306 --- ChangeLog-8.5.md | 1 + src/TextUI/TestRunner.php | 88 +++++++++++++++++++++------------------ 2 files changed, 48 insertions(+), 41 deletions(-) diff --git a/ChangeLog-8.5.md b/ChangeLog-8.5.md index 9e19b2b082a..eb22790e7f7 100644 --- a/ChangeLog-8.5.md +++ b/ChangeLog-8.5.md @@ -7,6 +7,7 @@ All notable changes of the PHPUnit 8.5 release series are documented in this fil ### Fixed * [#4299](https://github.com/sebastianbergmann/phpunit/issues/4299): "No tests executed" does not always result in exit code `1` +* [#4306](https://github.com/sebastianbergmann/phpunit/issues/4306): Exceptions during code coverage driver initialization are not handled correctly ## [8.5.6] - 2020-06-15 diff --git a/src/TextUI/TestRunner.php b/src/TextUI/TestRunner.php index 9ed277f83a1..3958bb0063d 100644 --- a/src/TextUI/TestRunner.php +++ b/src/TextUI/TestRunner.php @@ -503,59 +503,65 @@ public function doRun(Test $suite, array $arguments = [], array $warnings = [], } if ($codeCoverageReports > 0) { - $codeCoverage = new CodeCoverage( - null, - $this->codeCoverageFilter - ); - - $codeCoverage->setUnintentionallyCoveredSubclassesWhitelist( - [Comparator::class] - ); - - $codeCoverage->setCheckForUnintentionallyCoveredCode( - $arguments['strictCoverage'] - ); + try { + $codeCoverage = new CodeCoverage( + null, + $this->codeCoverageFilter + ); - $codeCoverage->setCheckForMissingCoversAnnotation( - $arguments['strictCoverage'] - ); + $codeCoverage->setUnintentionallyCoveredSubclassesWhitelist( + [Comparator::class] + ); - if (isset($arguments['forceCoversAnnotation'])) { - $codeCoverage->setForceCoversAnnotation( - $arguments['forceCoversAnnotation'] + $codeCoverage->setCheckForUnintentionallyCoveredCode( + $arguments['strictCoverage'] ); - } - if (isset($arguments['ignoreDeprecatedCodeUnitsFromCodeCoverage'])) { - $codeCoverage->setIgnoreDeprecatedCode( - $arguments['ignoreDeprecatedCodeUnitsFromCodeCoverage'] + $codeCoverage->setCheckForMissingCoversAnnotation( + $arguments['strictCoverage'] ); - } - if (isset($arguments['disableCodeCoverageIgnore'])) { - $codeCoverage->setDisableIgnoredLines(true); - } + if (isset($arguments['forceCoversAnnotation'])) { + $codeCoverage->setForceCoversAnnotation( + $arguments['forceCoversAnnotation'] + ); + } - if (!empty($filterConfiguration['whitelist'])) { - $codeCoverage->setAddUncoveredFilesFromWhitelist( - $filterConfiguration['whitelist']['addUncoveredFilesFromWhitelist'] - ); + if (isset($arguments['ignoreDeprecatedCodeUnitsFromCodeCoverage'])) { + $codeCoverage->setIgnoreDeprecatedCode( + $arguments['ignoreDeprecatedCodeUnitsFromCodeCoverage'] + ); + } - $codeCoverage->setProcessUncoveredFilesFromWhitelist( - $filterConfiguration['whitelist']['processUncoveredFilesFromWhitelist'] - ); - } + if (isset($arguments['disableCodeCoverageIgnore'])) { + $codeCoverage->setDisableIgnoredLines(true); + } - if (!$this->codeCoverageFilter->hasWhitelist()) { - if (!$whitelistFromConfigurationFile && !$whitelistFromOption) { - $this->writeMessage('Error', 'No whitelist is configured, no code coverage will be generated.'); - } else { - $this->writeMessage('Error', 'Incorrect whitelist config, no code coverage will be generated.'); + if (!empty($filterConfiguration['whitelist'])) { + $codeCoverage->setAddUncoveredFilesFromWhitelist( + $filterConfiguration['whitelist']['addUncoveredFilesFromWhitelist'] + ); + + $codeCoverage->setProcessUncoveredFilesFromWhitelist( + $filterConfiguration['whitelist']['processUncoveredFilesFromWhitelist'] + ); } - $codeCoverageReports = 0; + if (!$this->codeCoverageFilter->hasWhitelist()) { + if (!$whitelistFromConfigurationFile && !$whitelistFromOption) { + $this->writeMessage('Error', 'No whitelist is configured, no code coverage will be generated.'); + } else { + $this->writeMessage('Error', 'Incorrect whitelist config, no code coverage will be generated.'); + } + + $codeCoverageReports = 0; - unset($codeCoverage); + unset($codeCoverage); + } + } catch (CodeCoverageException $e) { + $this->writeMessage('Error', $e->getMessage()); + + $codeCoverageReports = 0; } }