diff --git a/src/Util/Tokens.php b/src/Util/Tokens.php index 5554cc9aae..73cf02ddd7 100644 --- a/src/Util/Tokens.php +++ b/src/Util/Tokens.php @@ -85,6 +85,11 @@ define('T_TYPE_OPEN_PARENTHESIS', 'PHPCS_T_TYPE_OPEN_PARENTHESIS'); define('T_TYPE_CLOSE_PARENTHESIS', 'PHPCS_T_TYPE_CLOSE_PARENTHESIS'); +/* + * {@internal IMPORTANT: all PHP native polyfilled tokens MUST be added to the + * `PHP_CodeSniffer\Tests\Core\Util\Tokens\TokenNameTest::dataPolyfilledPHPNativeTokens()` test method!} + */ + // Some PHP 5.5 tokens, replicated for lower versions. if (defined('T_FINALLY') === false) { define('T_FINALLY', 'PHPCS_T_FINALLY'); diff --git a/tests/Core/Util/Tokens/TokenNameTest.php b/tests/Core/Util/Tokens/TokenNameTest.php index 435df07139..28c6c613c2 100644 --- a/tests/Core/Util/Tokens/TokenNameTest.php +++ b/tests/Core/Util/Tokens/TokenNameTest.php @@ -28,6 +28,7 @@ final class TokenNameTest extends TestCase * @param string $expected The expected token name. * * @dataProvider dataTokenName + * @dataProvider dataPolyfilledPHPNativeTokens * * @return void */ @@ -78,4 +79,106 @@ public static function dataTokenName() }//end dataTokenName() + /** + * Data provider. + * + * @return array> + */ + public static function dataPolyfilledPHPNativeTokens() + { + return [ + 'PHP 5.5 native token, polyfilled: T_FINALLY' => [ + 'tokenCode' => T_FINALLY, + 'expected' => 'T_FINALLY', + ], + 'PHP 5.5 native token, polyfilled: T_YIELD' => [ + 'tokenCode' => T_YIELD, + 'expected' => 'T_YIELD', + ], + + 'PHP 5.6 native token, polyfilled: T_ELLIPSIS' => [ + 'tokenCode' => T_ELLIPSIS, + 'expected' => 'T_ELLIPSIS', + ], + 'PHP 5.6 native token, polyfilled: T_POW' => [ + 'tokenCode' => T_POW, + 'expected' => 'T_POW', + ], + 'PHP 5.6 native token, polyfilled: T_POW_EQUAL' => [ + 'tokenCode' => T_POW_EQUAL, + 'expected' => 'T_POW_EQUAL', + ], + + 'PHP 7.0 native token, polyfilled: T_SPACESHIP' => [ + 'tokenCode' => T_SPACESHIP, + 'expected' => 'T_SPACESHIP', + ], + 'PHP 7.0 native token, polyfilled: T_COALESCE' => [ + 'tokenCode' => T_COALESCE, + 'expected' => 'T_COALESCE', + ], + 'PHP 7.0 native token, polyfilled: T_YIELD_FROM' => [ + 'tokenCode' => T_YIELD_FROM, + 'expected' => 'T_YIELD_FROM', + ], + + 'PHP 7.4 native token, polyfilled: T_COALESCE_EQUAL' => [ + 'tokenCode' => T_COALESCE_EQUAL, + 'expected' => 'T_COALESCE_EQUAL', + ], + 'PHP 7.4 native token, polyfilled: T_BAD_CHARACTER' => [ + 'tokenCode' => T_BAD_CHARACTER, + 'expected' => 'T_BAD_CHARACTER', + ], + 'PHP 7.4 native token, polyfilled: T_FN' => [ + 'tokenCode' => T_FN, + 'expected' => 'T_FN', + ], + + 'PHP 8.0 native token, polyfilled: T_NULLSAFE_OBJECT_OPERATOR' => [ + 'tokenCode' => T_NULLSAFE_OBJECT_OPERATOR, + 'expected' => 'T_NULLSAFE_OBJECT_OPERATOR', + ], + 'PHP 8.0 native token, polyfilled: T_NAME_QUALIFIED' => [ + 'tokenCode' => T_NAME_QUALIFIED, + 'expected' => 'T_NAME_QUALIFIED', + ], + 'PHP 8.0 native token, polyfilled: T_NAME_FULLY_QUALIFIED' => [ + 'tokenCode' => T_NAME_FULLY_QUALIFIED, + 'expected' => 'T_NAME_FULLY_QUALIFIED', + ], + 'PHP 8.0 native token, polyfilled: T_NAME_RELATIVE' => [ + 'tokenCode' => T_NAME_RELATIVE, + 'expected' => 'T_NAME_RELATIVE', + ], + 'PHP 8.0 native token, polyfilled: T_MATCH' => [ + 'tokenCode' => T_MATCH, + 'expected' => 'T_MATCH', + ], + 'PHP 8.0 native token, polyfilled: T_ATTRIBUTE' => [ + 'tokenCode' => T_ATTRIBUTE, + 'expected' => 'T_ATTRIBUTE', + ], + + 'PHP 8.1 native token, polyfilled: T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG' => [ + 'tokenCode' => T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG, + 'expected' => 'T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG', + ], + 'PHP 8.1 native token, polyfilled: T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG' => [ + 'tokenCode' => T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG, + 'expected' => 'T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG', + ], + 'PHP 8.1 native token, polyfilled: T_READONLY' => [ + 'tokenCode' => T_READONLY, + 'expected' => 'T_READONLY', + ], + 'PHP 8.1 native token, polyfilled: T_ENUM' => [ + 'tokenCode' => T_ENUM, + 'expected' => 'T_ENUM', + ], + ]; + + }//end dataPolyfilledPHPNativeTokens() + + }//end class