From 4375f7963c5696dc832db50e2d1bc9d2b2f07b3a Mon Sep 17 00:00:00 2001 From: Benjamin Date: Mon, 17 Feb 2020 09:30:34 +0100 Subject: [PATCH 1/2] [PhpUnitBridge] Add compatibility to PHPUnit 9 #35662 --- Legacy/CommandForV9.php | 63 +++++++++++++++++++++++++++++++++++++++++ TextUI/Command.php | 4 ++- 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 Legacy/CommandForV9.php diff --git a/Legacy/CommandForV9.php b/Legacy/CommandForV9.php new file mode 100644 index 00000000..aa48ca5f --- /dev/null +++ b/Legacy/CommandForV9.php @@ -0,0 +1,63 @@ + + * + * 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\TextUI\Command as BaseCommand; +use PHPUnit\TextUI\Configuration\Configuration; +use PHPUnit\TextUI\Configuration\Registry; +use PHPUnit\TextUI\TestRunner as BaseRunner; +use Symfony\Bridge\PhpUnit\SymfonyTestsListener; + +/** + * {@inheritdoc} + * + * @internal + */ +class CommandForV9 extends BaseCommand +{ + /** + * {@inheritdoc} + */ + protected function createRunner(): BaseRunner + { + $this->arguments['listeners'] = isset($this->arguments['listeners']) ? $this->arguments['listeners'] : []; + + $registeredLocally = false; + + foreach ($this->arguments['listeners'] as $registeredListener) { + if ($registeredListener instanceof SymfonyTestsListener) { + $registeredListener->globalListenerDisabled(); + $registeredLocally = true; + break; + } + } + + if (isset($this->arguments['configuration'])) { + $configuration = $this->arguments['configuration']; + if (!$configuration instanceof Configuration) { + $configuration = Registry::getInstance()->get($this->arguments['configuration']); + } + foreach ($configuration->listeners() as $registeredListener) { + if ('Symfony\Bridge\PhpUnit\SymfonyTestsListener' === ltrim($registeredListener->className(), '\\')) { + $registeredLocally = true; + break; + } + } + } + + if (!$registeredLocally) { + $this->arguments['listeners'][] = new SymfonyTestsListener(); + } + + return parent::createRunner(); + } +} diff --git a/TextUI/Command.php b/TextUI/Command.php index be73e4d2..8690812b 100644 --- a/TextUI/Command.php +++ b/TextUI/Command.php @@ -13,8 +13,10 @@ if (version_compare(\PHPUnit\Runner\Version::id(), '6.0.0', '<')) { class_alias('Symfony\Bridge\PhpUnit\Legacy\CommandForV5', 'Symfony\Bridge\PhpUnit\TextUI\Command'); -} else { +} elseif (version_compare(\PHPUnit\Runner\Version::id(), '9.0.0', '<')) { class_alias('Symfony\Bridge\PhpUnit\Legacy\CommandForV6', 'Symfony\Bridge\PhpUnit\TextUI\Command'); +} else { + class_alias('Symfony\Bridge\PhpUnit\Legacy\CommandForV9', 'Symfony\Bridge\PhpUnit\TextUI\Command'); } if (false) { From c02893ae43532b46a4f0e0f207d088b939f278d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcello=20M=C3=B6nkemeyer?= Date: Wed, 19 Feb 2020 14:20:42 +0000 Subject: [PATCH 2/2] [PhpUnitBridge] Use trait instead of extending deprecated class --- Legacy/CoverageListenerForV6.php | 7 +++++-- composer.json | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Legacy/CoverageListenerForV6.php b/Legacy/CoverageListenerForV6.php index 0917ea47..1b3ceec1 100644 --- a/Legacy/CoverageListenerForV6.php +++ b/Legacy/CoverageListenerForV6.php @@ -11,8 +11,9 @@ namespace Symfony\Bridge\PhpUnit\Legacy; -use PHPUnit\Framework\BaseTestListener; use PHPUnit\Framework\Test; +use PHPUnit\Framework\TestListener; +use PHPUnit\Framework\TestListenerDefaultImplementation; /** * CoverageListener adds `@covers ` on each test when possible to @@ -22,8 +23,10 @@ * * @internal */ -class CoverageListenerForV6 extends BaseTestListener +class CoverageListenerForV6 implements TestListener { + use TestListenerDefaultImplementation; + private $trait; public function __construct(callable $sutFqcnResolver = null, $warningOnSutNotFound = false) diff --git a/composer.json b/composer.json index 25dcb0cd..f7d94926 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "symfony/debug": "For tracking deprecated interfaces usages at runtime with DebugClassLoader" }, "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0|<6.4,>=6.0" }, "autoload": { "files": [ "bootstrap.php" ],