diff --git a/src/Symfony/Bridge/PhpUnit/ForwardCompatTestTrait.php b/src/Symfony/Bridge/PhpUnit/ForwardCompatTestTrait.php index bdff8c18829b..29597bbe10cb 100644 --- a/src/Symfony/Bridge/PhpUnit/ForwardCompatTestTrait.php +++ b/src/Symfony/Bridge/PhpUnit/ForwardCompatTestTrait.php @@ -15,7 +15,14 @@ // A trait to provide forward compatibility with newest PHPUnit versions -if (method_exists(\ReflectionMethod::class, 'hasReturnType') && (new \ReflectionMethod(TestCase::class, 'tearDown'))->hasReturnType()) { +$r = new \ReflectionClass(TestCase::class); + +if (\PHP_VERSION_ID < 70000 || !$r->hasMethod('createMock') || !$r->getMethod('createMock')->hasReturnType()) { + trait ForwardCompatTestTrait + { + use Legacy\ForwardCompatTestTraitForV5; + } +} elseif ($r->getMethod('tearDown')->hasReturnType()) { trait ForwardCompatTestTrait { use Legacy\ForwardCompatTestTraitForV8; @@ -23,6 +30,6 @@ trait ForwardCompatTestTrait } else { trait ForwardCompatTestTrait { - use Legacy\ForwardCompatTestTraitForV5; + use Legacy\ForwardCompatTestTraitForV7; } } diff --git a/src/Symfony/Bridge/PhpUnit/Legacy/ForwardCompatTestTraitForV5.php b/src/Symfony/Bridge/PhpUnit/Legacy/ForwardCompatTestTraitForV5.php index 5ef837434a94..36db32e55f65 100644 --- a/src/Symfony/Bridge/PhpUnit/Legacy/ForwardCompatTestTraitForV5.php +++ b/src/Symfony/Bridge/PhpUnit/Legacy/ForwardCompatTestTraitForV5.php @@ -11,6 +11,8 @@ namespace Symfony\Bridge\PhpUnit\Legacy; +use PHPUnit\Framework\MockObject\MockObject; + /** * @internal */ @@ -80,6 +82,25 @@ private function doTearDown() parent::tearDown(); } + /** + * @param string $originalClassName + * + * @return MockObject + */ + protected function createMock($originalClassName) + { + $mock = $this->getMockBuilder($originalClassName) + ->disableOriginalConstructor() + ->disableOriginalClone() + ->disableArgumentCloning(); + + if (method_exists($mock, 'disallowMockingUnknownTypes')) { + $mock = $mock->disallowMockingUnknownTypes(); + } + + return $mock->getMock(); + } + /** * @param string $message * diff --git a/src/Symfony/Bridge/PhpUnit/Legacy/ForwardCompatTestTraitForV7.php b/src/Symfony/Bridge/PhpUnit/Legacy/ForwardCompatTestTraitForV7.php new file mode 100644 index 000000000000..84a26faebe99 --- /dev/null +++ b/src/Symfony/Bridge/PhpUnit/Legacy/ForwardCompatTestTraitForV7.php @@ -0,0 +1,35 @@ + + * + * 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\MockObject\MockObject; + +/** + * @internal + */ +trait ForwardCompatTestTraitForV7 +{ + use ForwardCompatTestTraitForV5; + + /** + * @param string|string[] $originalClassName + */ + protected function createMock($originalClassName): MockObject + { + return $this->getMockBuilder($originalClassName) + ->disableOriginalConstructor() + ->disableOriginalClone() + ->disableArgumentCloning() + ->disallowMockingUnknownTypes() + ->getMock(); + } +} diff --git a/src/Symfony/Component/Validator/Tests/DataCollector/ValidatorDataCollectorTest.php b/src/Symfony/Component/Validator/Tests/DataCollector/ValidatorDataCollectorTest.php index f32acf228bcc..00407b3ab0f3 100644 --- a/src/Symfony/Component/Validator/Tests/DataCollector/ValidatorDataCollectorTest.php +++ b/src/Symfony/Component/Validator/Tests/DataCollector/ValidatorDataCollectorTest.php @@ -12,6 +12,7 @@ namespace Symfony\Component\Validator\Tests\DataCollector; use PHPUnit\Framework\TestCase; +use Symfony\Bridge\PhpUnit\ForwardCompatTestTrait; use Symfony\Component\Validator\ConstraintViolation; use Symfony\Component\Validator\ConstraintViolationList; use Symfony\Component\Validator\DataCollector\ValidatorDataCollector; @@ -20,6 +21,8 @@ class ValidatorDataCollectorTest extends TestCase { + use ForwardCompatTestTrait; + public function testCollectsValidatorCalls() { $originalValidator = $this->createMock(ValidatorInterface::class); @@ -71,9 +74,4 @@ public function testReset() $this->assertCount(0, $collector->getCalls()); $this->assertSame(0, $collector->getViolationsCount()); } - - protected function createMock($classname) - { - return $this->getMockBuilder($classname)->disableOriginalConstructor()->getMock(); - } } diff --git a/src/Symfony/Component/Validator/Tests/Validator/TraceableValidatorTest.php b/src/Symfony/Component/Validator/Tests/Validator/TraceableValidatorTest.php index b80efed27e7b..2e76466b1c6b 100644 --- a/src/Symfony/Component/Validator/Tests/Validator/TraceableValidatorTest.php +++ b/src/Symfony/Component/Validator/Tests/Validator/TraceableValidatorTest.php @@ -12,6 +12,7 @@ namespace Symfony\Component\Validator\Tests\Validator; use PHPUnit\Framework\TestCase; +use Symfony\Bridge\PhpUnit\ForwardCompatTestTrait; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintViolation; use Symfony\Component\Validator\ConstraintViolationList; @@ -23,6 +24,8 @@ class TraceableValidatorTest extends TestCase { + use ForwardCompatTestTrait; + public function testValidate() { $originalValidator = $this->createMock(ValidatorInterface::class); @@ -95,9 +98,4 @@ public function testForwardsToOriginalValidator() $expects('validatePropertyValue')->willReturn($expected = new ConstraintViolationList()); $this->assertSame($expected, $validator->validatePropertyValue(new \stdClass(), 'property', 'value'), 'returns original validator validatePropertyValue() result'); } - - protected function createMock($classname) - { - return $this->getMockBuilder($classname)->disableOriginalConstructor()->getMock(); - } }