From 2de999a279fd9f557f7fc1dc119b298da1bd491b Mon Sep 17 00:00:00 2001 From: webimpress Date: Thu, 22 Mar 2018 14:35:41 +0000 Subject: [PATCH] Added support for PHPUnit 6.5 and 7.0 --- .travis.yml | 9 +++- autoload.php | 42 +++++++++++++++ classes/DefaultArgumentRemover.php | 31 +++++++++-- ...kDisabler.php => MockDisablerPHPUnit6.php} | 2 +- classes/MockDisablerPHPUnit7.php | 51 +++++++++++++++++++ classes/MockObjectProxy.php | 5 +- classes/PHPMock.php | 27 +--------- compatibility/BaseTestListener.php | 13 +++++ composer.json | 3 +- tests/MockObjectProxyTest.php | 12 +++-- 10 files changed, 155 insertions(+), 40 deletions(-) create mode 100644 autoload.php rename classes/{MockDisabler.php => MockDisablerPHPUnit6.php} (95%) create mode 100644 classes/MockDisablerPHPUnit7.php create mode 100644 compatibility/BaseTestListener.php diff --git a/.travis.yml b/.travis.yml index 11ef379..3562af7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,15 +13,22 @@ env: - PHPUNIT_VERSION=~6.2.0 - PHPUNIT_VERSION=~6.3.0 - PHPUNIT_VERSION=~6.4.0 + - PHPUNIT_VERSION=~6.5.0 + - PHPUNIT_VERSION=~7.0.0 php: - 7.2 - 7.1 - - 7.0 + - 7 - hhvm matrix: fast_finish: true + exclude: + - php: 7 + env: PHPUNIT_VERSION=dev-master + - php: 7 + env: PHPUNIT_VERSION=~7.0.0 allow_failures: - php: hhvm - env: PHPUNIT_VERSION=dev-master diff --git a/autoload.php b/autoload.php new file mode 100644 index 0000000..06fc33b --- /dev/null +++ b/autoload.php @@ -0,0 +1,42 @@ +parameters); + if ($invocation instanceof Invocation\StaticInvocation) { + $this->removeDefaultArguments($invocation); + } else { + MockFunctionGenerator::removeDefaultArguments($invocation->parameters); + } + return false; } @@ -47,8 +54,22 @@ public function hasMatchers() return false; } - public function toString() + public function toString() : string { return __CLASS__; } + + /** + * Remove default arguments from StaticInvocation or its children (hack) + * + * @SuppressWarnings(PHPMD) + */ + private function removeDefaultArguments(Invocation\StaticInvocation $invocation) + { + $remover = function () { + MockFunctionGenerator::removeDefaultArguments($this->parameters); + }; + + $remover->bindTo($invocation, Invocation\StaticInvocation::class)(); + } } diff --git a/classes/MockDisabler.php b/classes/MockDisablerPHPUnit6.php similarity index 95% rename from classes/MockDisabler.php rename to classes/MockDisablerPHPUnit6.php index 2bac2aa..ed8ab10 100644 --- a/classes/MockDisabler.php +++ b/classes/MockDisablerPHPUnit6.php @@ -16,7 +16,7 @@ * @license http://www.wtfpl.net/txt/copying/ WTFPL * @internal */ -class MockDisabler extends BaseTestListener +class MockDisablerPHPUnit6 extends BaseTestListener { /** diff --git a/classes/MockDisablerPHPUnit7.php b/classes/MockDisablerPHPUnit7.php new file mode 100644 index 0000000..c2722f4 --- /dev/null +++ b/classes/MockDisablerPHPUnit7.php @@ -0,0 +1,51 @@ + + * @link bitcoin:1335STSwu9hST4vcMRppEPgENMHD2r1REK Donations + * @license http://www.wtfpl.net/txt/copying/ WTFPL + * @internal + */ +class MockDisablerPHPUnit7 extends BaseTestListener +{ + + /** + * @var Deactivatable The function mocks. + */ + private $deactivatable; + + /** + * Sets the function mocks. + * + * @param Deactivatable $deactivatable The function mocks. + */ + public function __construct(Deactivatable $deactivatable) + { + $this->deactivatable = $deactivatable; + } + + /** + * Disables the function mocks. + * + * @param Test $test The test. + * @param int $time The test duration. + * + * @see Mock::disable() + */ + public function endTest(Test $test, float $time) : void + { + parent::endTest($test, $time); + + $this->deactivatable->disable(); + } +} diff --git a/classes/MockObjectProxy.php b/classes/MockObjectProxy.php index 4776822..0132be0 100644 --- a/classes/MockObjectProxy.php +++ b/classes/MockObjectProxy.php @@ -2,7 +2,8 @@ namespace phpmock\phpunit; -use PHPUnit_Framework_MockObject_MockObject as MockObject; +use PHPUnit\Framework\MockObject\Matcher\Invocation; +use PHPUnit\Framework\MockObject\MockObject; use phpmock\integration\MockDelegateFunctionBuilder; /** @@ -61,7 +62,7 @@ public function __phpunit_verify() return $this->mockObject->__phpunit_verify(); } - public function expects(\PHPUnit_Framework_MockObject_Matcher_Invocation $matcher) + public function expects(Invocation $matcher) { return $this->mockObject->expects($matcher)->method(MockDelegateFunctionBuilder::METHOD); } diff --git a/classes/PHPMock.php b/classes/PHPMock.php index 3746ad2..603fbc6 100644 --- a/classes/PHPMock.php +++ b/classes/PHPMock.php @@ -5,6 +5,7 @@ use phpmock\integration\MockDelegateFunctionBuilder; use phpmock\MockBuilder; use phpmock\Deactivatable; +use PHPUnit\Framework\MockObject\MockObject; /** * Adds building a function mock functionality into \PHPUnit\Framework\TestCase. @@ -35,30 +36,6 @@ */ trait PHPMock { - - /** - * Returns a builder object to create mock objects using a fluent interface. - * - * This method exists in \PHPUnit\Framework\TestCase. - * - * @param string $className Name of the class to mock. - * @return \PHPUnit_Framework_MockObject_MockBuilder - * @see \PHPUnit\Framework\TestCase::getMockBuilder() - * @internal - */ - abstract protected function getMockBuilder($className); - - /** - * Returns the test result. - * - * This method exists in \PHPUnit\Framework\TestCase. - * - * @return \PHPUnit\Framework\TestResult The test result. - * @see \PHPUnit\Framework\TestCase::getTestResultObject() - * @internal - */ - abstract protected function getTestResultObject(); - /** * Returns the enabled function mock. * @@ -67,7 +44,7 @@ abstract protected function getTestResultObject(); * @param string $namespace The function namespace. * @param string $name The function name. * - * @return \PHPUnit_Framework_MockObject_MockObject The PHPUnit mock. + * @return MockObject The PHPUnit mock. */ public function getFunctionMock($namespace, $name) { diff --git a/compatibility/BaseTestListener.php b/compatibility/BaseTestListener.php new file mode 100644 index 0000000..1ddd1a9 --- /dev/null +++ b/compatibility/BaseTestListener.php @@ -0,0 +1,13 @@ +=7", - "phpunit/phpunit": "^6 <6.5", + "phpunit/phpunit": "^6 || ^7", "php-mock/php-mock-integration": "^2" }, "archive": { diff --git a/tests/MockObjectProxyTest.php b/tests/MockObjectProxyTest.php index d7de226..950005b 100644 --- a/tests/MockObjectProxyTest.php +++ b/tests/MockObjectProxyTest.php @@ -2,9 +2,11 @@ namespace phpmock\phpunit; -use \PHPUnit_Framework_MockObject_Builder_InvocationMocker as InvocationMocker; use PHPUnit\Framework\TestCase; use phpmock\integration\MockDelegateFunctionBuilder; +use PHPUnit\Framework\MockObject\Builder\InvocationMocker; +use PHPUnit\Framework\MockObject\Matcher\Invocation; +use PHPUnit\Framework\MockObject\MockObject; /** * Tests MockObjectProxyTest. @@ -25,13 +27,13 @@ class MockObjectProxyTest extends TestCase */ public function testExpects() { - $matcher = $this->getMockBuilder(\PHPUnit_Framework_MockObject_Matcher_Invocation::class)->getMock(); + $matcher = $this->getMockBuilder(Invocation::class)->getMock(); $invocationMocker = $this->getMockBuilder(InvocationMocker::class)->disableOriginalConstructor()->getMock(); $invocationMocker->expects($this->once())->method("method") ->with(MockDelegateFunctionBuilder::METHOD)->willReturn($invocationMocker); - $prophecy = $this->prophesize(\PHPUnit_Framework_MockObject_MockObject::class); + $prophecy = $this->prophesize(MockObject::class); $prophecy->expects($matcher)->willReturn($invocationMocker); $mock = $prophecy->reveal(); @@ -53,7 +55,7 @@ public function testExpects() */ public function testHasMatcher() { - $prophecy = $this->prophesize(\PHPUnit_Framework_MockObject_MockObject::class); + $prophecy = $this->prophesize(MockObject::class); $prophecy->__phpunit_hasMatchers()->willReturn("foo"); $mock = $prophecy->reveal(); @@ -74,7 +76,7 @@ public function testHasMatcher() */ public function testProxiedMethods($method, array $arguments = [], $expected = "foo") { - $prophecy = $this->prophesize(\PHPUnit_Framework_MockObject_MockObject::class); + $prophecy = $this->prophesize(MockObject::class); call_user_func_array([$prophecy, $method], $arguments)->willReturn($expected); $mock = $prophecy->reveal();