From c2f62eff956c827d0e858e39b452377d9fe328ab Mon Sep 17 00:00:00 2001 From: Douglas Greenshields Date: Fri, 2 Feb 2018 15:21:07 +0000 Subject: [PATCH 1/2] [PhpBridge] add PHPUnit 7 support to SymfonyTestsListener --- .../Legacy/SymfonyTestsListenerPhpunit6.php | 57 +++++++++++++++++++ .../Bridge/PhpUnit/SymfonyTestsListener.php | 33 ++++++----- 2 files changed, 76 insertions(+), 14 deletions(-) create mode 100644 src/Symfony/Bridge/PhpUnit/Legacy/SymfonyTestsListenerPhpunit6.php diff --git a/src/Symfony/Bridge/PhpUnit/Legacy/SymfonyTestsListenerPhpunit6.php b/src/Symfony/Bridge/PhpUnit/Legacy/SymfonyTestsListenerPhpunit6.php new file mode 100644 index 000000000000..544d3680ec98 --- /dev/null +++ b/src/Symfony/Bridge/PhpUnit/Legacy/SymfonyTestsListenerPhpunit6.php @@ -0,0 +1,57 @@ + + * + * 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; +use PHPUnit\Framework\TestSuite; +use PHPUnit\Framework\Warning; + +class SymfonyTestsListenerPhpunit6 extends BaseTestListener +{ + private $trait; + + public function __construct(array $mockedNamespaces = array()) + { + $this->trait = new SymfonyTestsListenerTrait($mockedNamespaces); + } + + public function globalListenerDisabled() + { + $this->trait->globalListenerDisabled(); + } + + public function startTestSuite(TestSuite $suite) + { + $this->trait->startTestSuite($suite); + } + + public function addSkippedTest(Test $test, \Exception $e, $time) + { + $this->trait->addSkippedTest($test, $e, $time); + } + + public function startTest(Test $test) + { + $this->trait->startTest($test); + } + + public function addWarning(Test $test, Warning $e, $time) + { + $this->trait->addWarning($test, $e, $time); + } + + public function endTest(Test $test, $time) + { + $this->trait->endTest($test, $time); + } +} diff --git a/src/Symfony/Bridge/PhpUnit/SymfonyTestsListener.php b/src/Symfony/Bridge/PhpUnit/SymfonyTestsListener.php index c11fde9526ea..f118732c4267 100644 --- a/src/Symfony/Bridge/PhpUnit/SymfonyTestsListener.php +++ b/src/Symfony/Bridge/PhpUnit/SymfonyTestsListener.php @@ -11,15 +11,18 @@ namespace Symfony\Bridge\PhpUnit; -use PHPUnit\Framework\BaseTestListener; use PHPUnit\Framework\Test; +use PHPUnit\Framework\TestListener; +use PHPUnit\Framework\TestListenerDefaultImplementation; use PHPUnit\Framework\TestSuite; use PHPUnit\Framework\Warning; -if (class_exists('PHPUnit_Runner_Version') && version_compare(\PHPUnit_Runner_Version::id(), '6.0.0', '<')) { - class_alias('Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListener', 'Symfony\Bridge\PhpUnit\SymfonyTestsListener'); // 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) +if (class_exists('PHPUnit_Runner_Version') && version_compare(\PHPUnit_Runner_Version::id(), '6.0.0', '<')) { + class_alias('Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListener', 'Symfony\Bridge\PhpUnit\SymfonyTestsListener'); +} elseif (version_compare(\PHPUnit\Runner\Version::id(), '7.0.0', '<')) { + class_alias('Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListenerPhpunit6', 'Symfony\Bridge\PhpUnit\SymfonyTestsListener'); } else { /** * Collects and replays skipped tests. @@ -28,8 +31,10 @@ class_alias('Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListener', 'Symfony\Bridg * * @final */ - class SymfonyTestsListener extends BaseTestListener + class SymfonyTestsListener implements TestListener { + use TestListenerDefaultImplementation; + private $trait; public function __construct(array $mockedNamespaces = array()) @@ -42,29 +47,29 @@ public function globalListenerDisabled() $this->trait->globalListenerDisabled(); } - public function startTestSuite(TestSuite $suite) + public function startTestSuite(TestSuite $suite): void { - return $this->trait->startTestSuite($suite); + $this->trait->startTestSuite($suite); } - public function addSkippedTest(Test $test, \Exception $e, $time) + public function addSkippedTest(Test $test, \Throwable $t, float $time): void { - return $this->trait->addSkippedTest($test, $e, $time); + $this->trait->addSkippedTest($test, $t, $time); } - public function startTest(Test $test) + public function startTest(Test $test): void { - return $this->trait->startTest($test); + $this->trait->startTest($test); } - public function addWarning(Test $test, Warning $e, $time) + public function addWarning(Test $test, Warning $e, float $time): void { - return $this->trait->addWarning($test, $e, $time); + $this->trait->addWarning($test, $e, $time); } - public function endTest(Test $test, $time) + public function endTest(Test $test, float $time): void { - return $this->trait->endTest($test, $time); + $this->trait->endTest($test, $time); } } } From 4c7432a23ad3267e14474a70574455507f55f0ff Mon Sep 17 00:00:00 2001 From: Douglas Greenshields Date: Sun, 4 Feb 2018 17:24:51 +0000 Subject: [PATCH 2/2] [PhpBridge] use progressive enhancement to keep compatibility with PHP 5 in SymfonyTestsListener --- .../Legacy/SymfonyTestsListenerPhpunit6.php | 57 --------------- .../Bridge/PhpUnit/SymfonyTestsListener.php | 31 ++++----- .../SymfonyTestsListenerWithReturnTypes.php | 69 +++++++++++++++++++ 3 files changed, 83 insertions(+), 74 deletions(-) delete mode 100644 src/Symfony/Bridge/PhpUnit/Legacy/SymfonyTestsListenerPhpunit6.php create mode 100644 src/Symfony/Bridge/PhpUnit/SymfonyTestsListenerWithReturnTypes.php diff --git a/src/Symfony/Bridge/PhpUnit/Legacy/SymfonyTestsListenerPhpunit6.php b/src/Symfony/Bridge/PhpUnit/Legacy/SymfonyTestsListenerPhpunit6.php deleted file mode 100644 index 544d3680ec98..000000000000 --- a/src/Symfony/Bridge/PhpUnit/Legacy/SymfonyTestsListenerPhpunit6.php +++ /dev/null @@ -1,57 +0,0 @@ - - * - * 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; -use PHPUnit\Framework\TestSuite; -use PHPUnit\Framework\Warning; - -class SymfonyTestsListenerPhpunit6 extends BaseTestListener -{ - private $trait; - - public function __construct(array $mockedNamespaces = array()) - { - $this->trait = new SymfonyTestsListenerTrait($mockedNamespaces); - } - - public function globalListenerDisabled() - { - $this->trait->globalListenerDisabled(); - } - - public function startTestSuite(TestSuite $suite) - { - $this->trait->startTestSuite($suite); - } - - public function addSkippedTest(Test $test, \Exception $e, $time) - { - $this->trait->addSkippedTest($test, $e, $time); - } - - public function startTest(Test $test) - { - $this->trait->startTest($test); - } - - public function addWarning(Test $test, Warning $e, $time) - { - $this->trait->addWarning($test, $e, $time); - } - - public function endTest(Test $test, $time) - { - $this->trait->endTest($test, $time); - } -} diff --git a/src/Symfony/Bridge/PhpUnit/SymfonyTestsListener.php b/src/Symfony/Bridge/PhpUnit/SymfonyTestsListener.php index f118732c4267..7115f31485cb 100644 --- a/src/Symfony/Bridge/PhpUnit/SymfonyTestsListener.php +++ b/src/Symfony/Bridge/PhpUnit/SymfonyTestsListener.php @@ -11,9 +11,8 @@ namespace Symfony\Bridge\PhpUnit; +use PHPUnit\Framework\BaseTestListener; use PHPUnit\Framework\Test; -use PHPUnit\Framework\TestListener; -use PHPUnit\Framework\TestListenerDefaultImplementation; use PHPUnit\Framework\TestSuite; use PHPUnit\Framework\Warning; @@ -21,8 +20,8 @@ // gets defined without executing the code before it and so the definition is not properly conditional) if (class_exists('PHPUnit_Runner_Version') && version_compare(\PHPUnit_Runner_Version::id(), '6.0.0', '<')) { class_alias('Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListener', 'Symfony\Bridge\PhpUnit\SymfonyTestsListener'); -} elseif (version_compare(\PHPUnit\Runner\Version::id(), '7.0.0', '<')) { - class_alias('Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListenerPhpunit6', 'Symfony\Bridge\PhpUnit\SymfonyTestsListener'); +} elseif (version_compare(\PHPUnit\Runner\Version::id(), '7.0.0', '>=')) { + class_alias('Symfony\Bridge\PhpUnit\SymfonyTestsListenerWithReturnTypes', 'Symfony\Bridge\PhpUnit\SymfonyTestsListener'); } else { /** * Collects and replays skipped tests. @@ -31,10 +30,8 @@ class_alias('Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListenerPhpunit6', 'Symfo * * @final */ - class SymfonyTestsListener implements TestListener + class SymfonyTestsListener extends BaseTestListener { - use TestListenerDefaultImplementation; - private $trait; public function __construct(array $mockedNamespaces = array()) @@ -47,29 +44,29 @@ public function globalListenerDisabled() $this->trait->globalListenerDisabled(); } - public function startTestSuite(TestSuite $suite): void + public function startTestSuite(TestSuite $suite) { - $this->trait->startTestSuite($suite); + return $this->trait->startTestSuite($suite); } - public function addSkippedTest(Test $test, \Throwable $t, float $time): void + public function addSkippedTest(Test $test, \Exception $e, $time) { - $this->trait->addSkippedTest($test, $t, $time); + return $this->trait->addSkippedTest($test, $e, $time); } - public function startTest(Test $test): void + public function startTest(Test $test) { - $this->trait->startTest($test); + return $this->trait->startTest($test); } - public function addWarning(Test $test, Warning $e, float $time): void + public function addWarning(Test $test, Warning $e, $time) { - $this->trait->addWarning($test, $e, $time); + return $this->trait->addWarning($test, $e, $time); } - public function endTest(Test $test, float $time): void + public function endTest(Test $test, $time) { - $this->trait->endTest($test, $time); + return $this->trait->endTest($test, $time); } } } diff --git a/src/Symfony/Bridge/PhpUnit/SymfonyTestsListenerWithReturnTypes.php b/src/Symfony/Bridge/PhpUnit/SymfonyTestsListenerWithReturnTypes.php new file mode 100644 index 000000000000..dfe13afb3f21 --- /dev/null +++ b/src/Symfony/Bridge/PhpUnit/SymfonyTestsListenerWithReturnTypes.php @@ -0,0 +1,69 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bridge\PhpUnit; + +use PHPUnit\Framework\Test; +use PHPUnit\Framework\TestListener; +use PHPUnit\Framework\TestListenerDefaultImplementation; +use PHPUnit\Framework\TestSuite; +use PHPUnit\Framework\Warning; + +/** + * Collects and replays skipped tests. + * + * (Version of SymfonyTestsListener for PHPUnit 7+, and PHP 7.1+.) + * + * @author Nicolas Grekas + * + * @final + */ +class SymfonyTestsListenerWithReturnTypes implements TestListener +{ + use TestListenerDefaultImplementation; + + private $trait; + + public function __construct(array $mockedNamespaces = array()) + { + $this->trait = new Legacy\SymfonyTestsListenerTrait($mockedNamespaces); + } + + public function globalListenerDisabled() + { + $this->trait->globalListenerDisabled(); + } + + public function startTestSuite(TestSuite $suite): void + { + $this->trait->startTestSuite($suite); + } + + public function addSkippedTest(Test $test, \Throwable $t, float $time): void + { + $this->trait->addSkippedTest($test, $t, $time); + } + + public function startTest(Test $test): void + { + $this->trait->startTest($test); + } + + public function addWarning(Test $test, Warning $e, float $time): void + { + $this->trait->addWarning($test, $e, $time); + } + + public function endTest(Test $test, float $time): void + { + $this->trait->endTest($test, $time); + } +}