From 3d5271f512d38024269fa029dce44b138e39a3c7 Mon Sep 17 00:00:00 2001 From: Nuno Maduro Date: Fri, 16 Sep 2022 17:47:29 +0100 Subject: [PATCH] Improves coverage feedback --- composer.json | 2 +- src/Plugins/Coverage.php | 18 ++++++++++++++++++ src/Support/Coverage.php | 16 +++++++++++++++- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 433f4f0a..8f401627 100644 --- a/composer.json +++ b/composer.json @@ -75,7 +75,7 @@ "lint": "pint --test", "test:lint": "pint --test", "test:types": "phpstan analyse --ansi --memory-limit=-1 --debug", - "test:unit": "php bin/pest --colors=always --exclude-group=integration", + "test:unit": "php bin/pest --colors=always --exclude-group=integration --compact", "test:parallel": "exit 1", "test:integration": "php bin/pest --colors=always --group=integration -v", "update:snapshots": "REBUILD_SNAPSHOTS=true php bin/pest --colors=always", diff --git a/src/Plugins/Coverage.php b/src/Plugins/Coverage.php index fe8f0be6..06315d36 100644 --- a/src/Plugins/Coverage.php +++ b/src/Plugins/Coverage.php @@ -87,6 +87,24 @@ final class Coverage implements AddsOutput, HandlesArguments $this->coverageMin = (float) $minOption; } + if (! \Pest\Support\Coverage::isAvailable()) { + if (\Pest\Support\Coverage::usingXdebug()) { + $this->output->writeln([ + '', + " ERROR Unable to get coverage using Xdebug. Did you set Xdebug's coverage mode?", + '', + ]); + } else { + $this->output->writeln([ + '', + ' ERROR No code coverage driver is available.', + '', + ]); + } + + exit(1); + } + return $originals; } diff --git a/src/Support/Coverage.php b/src/Support/Coverage.php index 8e1fcd5a..3d409ceb 100644 --- a/src/Support/Coverage.php +++ b/src/Support/Coverage.php @@ -36,7 +36,21 @@ final class Coverage */ public static function isAvailable(): bool { - return (new Runtime())->canCollectCodeCoverage(); + $runtime = new Runtime(); + + if (! $runtime->canCollectCodeCoverage()) { + return false; + } + + if ($runtime->hasXdebug()) { + if (version_compare((string) phpversion('xdebug'), '3.1', '>=')) { + if (! in_array('coverage', xdebug_info('mode'), true)) { + return false; + } + } + } + + return true; } /**