From 6c0e6af47a5f36b906892537f5b2fbf15dab30b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Pineau?= Date: Thu, 8 Feb 2018 11:41:17 +0100 Subject: [PATCH] [PhpUnitBridge] Added support for PHPUnit 7 in Coverage Listener --- .../Bridge/PhpUnit/CoverageListener.php | 32 ++------------- ...Listener.php => CoverageListenerForV5.php} | 2 +- .../PhpUnit/Legacy/CoverageListenerForV6.php | 38 +++++++++++++++++ .../PhpUnit/Legacy/CoverageListenerForV7.php | 41 +++++++++++++++++++ .../PhpUnit/Tests/CoverageListenerTest.php | 4 +- .../Fixtures/coverage/tests/bootstrap.php | 8 +++- 6 files changed, 94 insertions(+), 31 deletions(-) rename src/Symfony/Bridge/PhpUnit/Legacy/{CoverageListener.php => CoverageListenerForV5.php} (91%) create mode 100644 src/Symfony/Bridge/PhpUnit/Legacy/CoverageListenerForV6.php create mode 100644 src/Symfony/Bridge/PhpUnit/Legacy/CoverageListenerForV7.php diff --git a/src/Symfony/Bridge/PhpUnit/CoverageListener.php b/src/Symfony/Bridge/PhpUnit/CoverageListener.php index e6b4e7ec98b8..79333fbd0022 100644 --- a/src/Symfony/Bridge/PhpUnit/CoverageListener.php +++ b/src/Symfony/Bridge/PhpUnit/CoverageListener.php @@ -11,34 +11,10 @@ namespace Symfony\Bridge\PhpUnit; -use PHPUnit\Framework\BaseTestListener; -use PHPUnit\Framework\Test; -use Symfony\Bridge\PhpUnit\Legacy\CoverageListenerTrait; - if (class_exists('PHPUnit_Runner_Version') && version_compare(\PHPUnit_Runner_Version::id(), '6.0.0', '<')) { - class_alias('Symfony\Bridge\PhpUnit\Legacy\CoverageListener', 'Symfony\Bridge\PhpUnit\CoverageListener'); -// Using an early return instead of a else does not work when using the PHPUnit -// phar due to some weird PHP behavior (the class gets defined without executing -// the code before it and so the definition is not properly conditional) + class_alias('Symfony\Bridge\PhpUnit\Legacy\CoverageListenerForV5', 'Symfony\Bridge\PhpUnit\CoverageListener'); +} elseif (version_compare(\PHPUnit\Runner\Version::id(), '7.0.0', '<')) { + class_alias('Symfony\Bridge\PhpUnit\Legacy\CoverageListenerForV6', 'Symfony\Bridge\PhpUnit\CoverageListener'); } else { - /** - * CoverageListener adds `@covers ` on each test suite when possible - * to make the code coverage more accurate. - * - * @author Grégoire Pineau - */ - class CoverageListener extends BaseTestListener - { - private $trait; - - public function __construct(callable $sutFqcnResolver = null, $warningOnSutNotFound = false) - { - $this->trait = new CoverageListenerTrait($sutFqcnResolver, $warningOnSutNotFound); - } - - public function startTest(Test $test) - { - $this->trait->startTest($test); - } - } + class_alias('Symfony\Bridge\PhpUnit\Legacy\CoverageListenerForV7', 'Symfony\Bridge\PhpUnit\CoverageListener'); } diff --git a/src/Symfony/Bridge/PhpUnit/Legacy/CoverageListener.php b/src/Symfony/Bridge/PhpUnit/Legacy/CoverageListenerForV5.php similarity index 91% rename from src/Symfony/Bridge/PhpUnit/Legacy/CoverageListener.php rename to src/Symfony/Bridge/PhpUnit/Legacy/CoverageListenerForV5.php index 022782851576..4bf19223f3c1 100644 --- a/src/Symfony/Bridge/PhpUnit/Legacy/CoverageListener.php +++ b/src/Symfony/Bridge/PhpUnit/Legacy/CoverageListenerForV5.php @@ -19,7 +19,7 @@ * * @internal */ -class CoverageListener extends \PHPUnit_Framework_BaseTestListener +class CoverageListenerForV5 extends \PHPUnit_Framework_BaseTestListener { private $trait; diff --git a/src/Symfony/Bridge/PhpUnit/Legacy/CoverageListenerForV6.php b/src/Symfony/Bridge/PhpUnit/Legacy/CoverageListenerForV6.php new file mode 100644 index 000000000000..f0dfc7577cd0 --- /dev/null +++ b/src/Symfony/Bridge/PhpUnit/Legacy/CoverageListenerForV6.php @@ -0,0 +1,38 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bridge\PhpUnit\Legacy; + +use PHPUnit\Framework\BaseTestListener; +use PHPUnit\Framework\Test; + +/** + * CoverageListener adds `@covers ` on each test suite when possible + * to make the code coverage more accurate. + * + * @author Grégoire Pineau + * + * @internal + */ +class CoverageListenerForV6 extends BaseTestListener +{ + private $trait; + + public function __construct(callable $sutFqcnResolver = null, $warningOnSutNotFound = false) + { + $this->trait = new CoverageListenerTrait($sutFqcnResolver, $warningOnSutNotFound); + } + + public function startTest(Test $test) + { + $this->trait->startTest($test); + } +} diff --git a/src/Symfony/Bridge/PhpUnit/Legacy/CoverageListenerForV7.php b/src/Symfony/Bridge/PhpUnit/Legacy/CoverageListenerForV7.php new file mode 100644 index 000000000000..699d4bde35cc --- /dev/null +++ b/src/Symfony/Bridge/PhpUnit/Legacy/CoverageListenerForV7.php @@ -0,0 +1,41 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bridge\PhpUnit\Legacy; + +use PHPUnit\Framework\TestListener; +use PHPUnit\Framework\TestListenerDefaultImplementation; +use PHPUnit\Framework\TestSuite; + +/** + * CoverageListener adds `@covers ` on each test suite when possible + * to make the code coverage more accurate. + * + * @author Grégoire Pineau + * + * @internal + */ +class CoverageListenerForV7 implements TestListener +{ + use TestListenerDefaultImplementation; + + private $trait; + + public function __construct(callable $sutFqcnResolver = null, $warningOnSutNotFound = false) + { + $this->trait = new CoverageListenerTrait($sutFqcnResolver, $warningOnSutNotFound); + } + + public function startTestSuite(TestSuite $suite): void + { + $this->trait->startTest($test); + } +} diff --git a/src/Symfony/Bridge/PhpUnit/Tests/CoverageListenerTest.php b/src/Symfony/Bridge/PhpUnit/Tests/CoverageListenerTest.php index b07effe3d27d..957499dfb6a2 100644 --- a/src/Symfony/Bridge/PhpUnit/Tests/CoverageListenerTest.php +++ b/src/Symfony/Bridge/PhpUnit/Tests/CoverageListenerTest.php @@ -16,7 +16,9 @@ public function test() $this->markTestSkipped('This test cannot be run on HHVM.'); } - if (\PHP_VERSION_ID >= 70000) { + exec('type phpdbg', $output, $returnCode); + + if (\PHP_VERSION_ID >= 70000 && 0 === $returnCode) { $php = 'phpdbg -qrr'; } else { exec('php --ri xdebug -d zend_extension=xdebug.so 2> /dev/null', $output, $returnCode); diff --git a/src/Symfony/Bridge/PhpUnit/Tests/Fixtures/coverage/tests/bootstrap.php b/src/Symfony/Bridge/PhpUnit/Tests/Fixtures/coverage/tests/bootstrap.php index 925f4831ac89..241006431ace 100644 --- a/src/Symfony/Bridge/PhpUnit/Tests/Fixtures/coverage/tests/bootstrap.php +++ b/src/Symfony/Bridge/PhpUnit/Tests/Fixtures/coverage/tests/bootstrap.php @@ -13,7 +13,13 @@ require __DIR__.'/../src/FooCov.php'; require __DIR__.'/../../../../Legacy/CoverageListenerTrait.php'; + if (class_exists('PHPUnit_Runner_Version') && version_compare(\PHPUnit_Runner_Version::id(), '6.0.0', '<')) { - require __DIR__.'/../../../../Legacy/CoverageListener.php'; + require_once __DIR__.'/../../../../Legacy/CoverageListenerForV5.php'; +} elseif (version_compare(\PHPUnit\Runner\Version::id(), '7.0.0', '<')) { + require_once __DIR__.'/../../../../Legacy/CoverageListenerForV6.php'; +} else { + require_once __DIR__.'/../../../../Legacy/CoverageListenerForV7.php'; } + require __DIR__.'/../../../../CoverageListener.php';