From 1a89e6383888223e2883d96b31941c65c00c4616 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sun, 13 Sep 2020 02:36:48 +0000 Subject: [PATCH] Tests: Replace the native PHPUnit `getMockForAbstractClass()` and `getMockBuilder()` methods. This avoids parse errors in PHPUnit internals due to `match` being a reserved keyword in PHP 8. To run on PHP 8, the tests relying on these methods require PHPUnit 9.3 or later. When the test suite is updated for compatibility with PHPUnit 9.x, these overrides can be removed. See #50913, #50902. git-svn-id: https://develop.svn.wordpress.org/trunk@48972 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/includes/phpunit7/testcase.php | 60 ++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/tests/phpunit/includes/phpunit7/testcase.php b/tests/phpunit/includes/phpunit7/testcase.php index 9a8ddc12de..948f5799de 100644 --- a/tests/phpunit/includes/phpunit7/testcase.php +++ b/tests/phpunit/includes/phpunit7/testcase.php @@ -37,4 +37,64 @@ class WP_UnitTestCase extends WP_UnitTestCase_Base { static::assertThat( $actual, $constraint, $message ); } + + /** + * Returns a mock object for the specified abstract class with all abstract + * methods of the class mocked. Concrete methods to mock can be specified with + * the last parameter. + * + * This method replaces the native PHPUnit method to avoid parse errors + * due to `match` being a reserved keyword in PHP 8. + * + * To run on PHP 8, the tests using this method require PHPUnit 9.3 or later. + * + * When the test suite is updated for compatibility with PHPUnit 9.x, + * this override can be removed. + * + * @since 5.6.0 + * + * @param string $original_class_name + * @param string $mock_class_name + * @param bool $call_original_constructor + * @param bool $call_original_clone + * @param bool $call_autoload + * @param array $mocked_methods + * @param bool $clone_arguments + * + * @throws \ReflectionException + * @throws RuntimeException + * @throws Exception + * + * @return MockObject + */ + public function getMockForAbstractClass( $original_class_name, array $arguments = array(), $mock_class_name = '', $call_original_constructor = true, $call_original_clone = true, $call_autoload = true, $mocked_methods = array(), $clone_arguments = false ): PHPUnit\Framework\MockObject\MockObject { + if ( PHP_VERSION_ID >= 80000 && version_compare( tests_get_phpunit_version(), '9.3', '<' ) ) { + $this->markTestSkipped( 'To run on PHP 8, this test requires PHPUnit 9.3 or later.' ); + } + + return parent::getMockForAbstractClass( $original_class_name, $arguments, $mock_class_name, $call_original_constructor, $call_original_clone, $call_autoload, $mocked_methods, $clone_arguments ); + } + + /** + * Returns a builder object to create mock objects using a fluent interface. + * + * This method replaces the native PHPUnit method to avoid parse errors + * due to `match` being a reserved keyword in PHP 8. + * + * To run on PHP 8, the tests using this method require PHPUnit 9.3 or later. + * + * When the test suite is updated for compatibility with PHPUnit 9.x, + * this override can be removed. + * + * @since 5.6.0 + * + * @param string|string[] $class_name + */ + public function getMockBuilder( $class_name ): PHPUnit\Framework\MockObject\MockBuilder { + if ( PHP_VERSION_ID >= 80000 && version_compare( tests_get_phpunit_version(), '9.3', '<' ) ) { + $this->markTestSkipped( 'To run on PHP 8, this test requires PHPUnit 9.3 or later.' ); + } + + return parent::getMockBuilder( $class_name ); + } }