From 652853ecfa478e459ae5b67bb26c8db3c8b7fdd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Pudil?= Date: Thu, 3 Dec 2020 12:15:04 +0100 Subject: [PATCH] CodeCoverage: support Xdebug 3 (#424) --- src/Runner/CliTester.php | 6 +++++- tests/CodeCoverage/Collector.phpt | 9 ++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Runner/CliTester.php b/src/Runner/CliTester.php index 3b294f5a..f0638f1d 100644 --- a/src/Runner/CliTester.php +++ b/src/Runner/CliTester.php @@ -236,11 +236,15 @@ private function prepareCodeCoverage(Runner $runner): string file_put_contents($this->options['--coverage'], ''); $file = realpath($this->options['--coverage']); - [$engine] = reset($engines); + [$engine, $version] = reset($engines); $runner->setEnvironmentVariable(Environment::COVERAGE, $file); $runner->setEnvironmentVariable(Environment::COVERAGE_ENGINE, $engine); + if ($engine === CodeCoverage\Collector::ENGINE_XDEBUG && version_compare($version, '3.0.0', '>=')) { + $runner->addPhpIniOption('xdebug.mode', ltrim(ini_get('xdebug.mode') . ',coverage', ',')); + } + if ($engine === CodeCoverage\Collector::ENGINE_PCOV && count($this->options['--coverage-src'])) { $runner->addPhpIniOption('pcov.directory', Helpers::findCommonDirectory($this->options['--coverage-src'])); } diff --git a/tests/CodeCoverage/Collector.phpt b/tests/CodeCoverage/Collector.phpt index 595137b8..29074d60 100644 --- a/tests/CodeCoverage/Collector.phpt +++ b/tests/CodeCoverage/Collector.phpt @@ -16,7 +16,14 @@ $engines = array_filter(CodeCoverage\Collector::detectEngines(), function (array if (count($engines) < 1) { Tester\Environment::skip('Requires Xdebug or PHPDB SAPI.'); } -[$engine] = reset($engines); +[$engine, $version] = reset($engines); + +if ($engine === CodeCoverage\Collector::ENGINE_XDEBUG + && version_compare($version, '3.0.0', '>=') + && strpos(ini_get('xdebug.mode'), 'coverage') === false +) { + Tester\Environment::skip('Requires xdebug.mode=coverage with Xdebug 3.'); +} if (CodeCoverage\Collector::isStarted()) { Tester\Environment::skip('Requires running without --coverage.');