1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
<?php
/**
* Tests the conversion of square bracket tokens to short array tokens.
*
* @author Juliette Reinders Folmer <phpcs_nospam@adviesenzo.nl>
* @copyright 2020 Squiz Pty Ltd (ABN 77 084 670 600)
* @license https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
*/
namespace PHP_CodeSniffer\Tests\Core\Tokenizers\PHP;
use PHP_CodeSniffer\Tests\Core\Tokenizers\AbstractTokenizerTestCase;
final class ShortArrayTest extends AbstractTokenizerTestCase
{
/**
* Test that real square brackets are still tokenized as square brackets.
*
* @param string $testMarker The comment which prefaces the target token in the test file.
*
* @dataProvider dataSquareBrackets
* @covers PHP_CodeSniffer\Tokenizers\PHP::processAdditional
*
* @return void
*/
public function testSquareBrackets($testMarker)
{
$tokens = $this->phpcsFile->getTokens();
$opener = $this->getTargetToken($testMarker, [T_OPEN_SQUARE_BRACKET, T_OPEN_SHORT_ARRAY]);
$tokenArray = $tokens[$opener];
$this->assertSame(T_OPEN_SQUARE_BRACKET, $tokenArray['code'], 'Token tokenized as '.$tokenArray['type'].', not T_OPEN_SQUARE_BRACKET (code)');
$this->assertSame('T_OPEN_SQUARE_BRACKET', $tokenArray['type'], 'Token tokenized as '.$tokenArray['type'].', not T_OPEN_SQUARE_BRACKET (type)');
if (isset($tokens[$opener]['bracket_closer']) === true) {
$closer = $tokens[$opener]['bracket_closer'];
$tokenArray = $tokens[$closer];
$this->assertSame(T_CLOSE_SQUARE_BRACKET, $tokenArray['code'], 'Token tokenized as '.$tokenArray['type'].', not T_CLOSE_SQUARE_BRACKET (code)');
$this->assertSame('T_CLOSE_SQUARE_BRACKET', $tokenArray['type'], 'Token tokenized as '.$tokenArray['type'].', not T_CLOSE_SQUARE_BRACKET (type)');
}
}//end testSquareBrackets()
/**
* Data provider.
*
* @see testSquareBrackets()
*
* @return array<string, array<string>>
*/
public static function dataSquareBrackets()
{
return [
'array access 1' => ['/* testArrayAccess1 */'],
'array access 2' => ['/* testArrayAccess2 */'],
'array assignment' => ['/* testArrayAssignment */'],
'function call dereferencing' => ['/* testFunctionCallDereferencing */'],
'method call dereferencing' => ['/* testMethodCallDereferencing */'],
'static method call dereferencing' => ['/* testStaticMethodCallDereferencing */'],
'property dereferencing' => ['/* testPropertyDereferencing */'],
'property dereferencing with inaccessable name' => ['/* testPropertyDereferencingWithInaccessibleName */'],
'static property dereferencing' => ['/* testStaticPropertyDereferencing */'],
'string dereferencing single quotes' => ['/* testStringDereferencing */'],
'string dereferencing double quotes' => ['/* testStringDereferencingDoubleQuoted */'],
'global constant dereferencing' => ['/* testConstantDereferencing */'],
'class constant dereferencing' => ['/* testClassConstantDereferencing */'],
'magic constant dereferencing' => ['/* testMagicConstantDereferencing */'],
'array access with curly braces' => ['/* testArrayAccessCurlyBraces */'],
'array literal dereferencing' => ['/* testArrayLiteralDereferencing */'],
'short array literal dereferencing' => ['/* testShortArrayLiteralDereferencing */'],
'class member dereferencing on instantiation 1' => ['/* testClassMemberDereferencingOnInstantiation1 */'],
'class member dereferencing on instantiation 2' => ['/* testClassMemberDereferencingOnInstantiation2 */'],
'class member dereferencing on clone' => ['/* testClassMemberDereferencingOnClone */'],
'nullsafe method call dereferencing' => ['/* testNullsafeMethodCallDereferencing */'],
'interpolated string dereferencing' => ['/* testInterpolatedStringDereferencing */'],
'live coding' => ['/* testLiveCoding */'],
];
}//end dataSquareBrackets()
/**
* Test that short arrays and short lists are still tokenized as short arrays.
*
* @param string $testMarker The comment which prefaces the target token in the test file.
*
* @dataProvider dataShortArrays
* @covers PHP_CodeSniffer\Tokenizers\PHP::processAdditional
*
* @return void
*/
public function testShortArrays($testMarker)
{
$tokens = $this->phpcsFile->getTokens();
$opener = $this->getTargetToken($testMarker, [T_OPEN_SQUARE_BRACKET, T_OPEN_SHORT_ARRAY]);
$tokenArray = $tokens[$opener];
$this->assertSame(T_OPEN_SHORT_ARRAY, $tokenArray['code'], 'Token tokenized as '.$tokenArray['type'].', not T_OPEN_SHORT_ARRAY (code)');
$this->assertSame('T_OPEN_SHORT_ARRAY', $tokenArray['type'], 'Token tokenized as '.$tokenArray['type'].', not T_OPEN_SHORT_ARRAY (type)');
if (isset($tokens[$opener]['bracket_closer']) === true) {
$closer = $tokens[$opener]['bracket_closer'];
$tokenArray = $tokens[$closer];
$this->assertSame(T_CLOSE_SHORT_ARRAY, $tokenArray['code'], 'Token tokenized as '.$tokenArray['type'].', not T_CLOSE_SHORT_ARRAY (code)');
$this->assertSame('T_CLOSE_SHORT_ARRAY', $tokenArray['type'], 'Token tokenized as '.$tokenArray['type'].', not T_CLOSE_SHORT_ARRAY (type)');
}
}//end testShortArrays()
/**
* Data provider.
*
* @see testShortArrays()
*
* @return array<string, array<string>>
*/
public static function dataShortArrays()
{
return [
'short array empty' => ['/* testShortArrayDeclarationEmpty */'],
'short array with value' => ['/* testShortArrayDeclarationWithOneValue */'],
'short array with values' => ['/* testShortArrayDeclarationWithMultipleValues */'],
'short array with dereferencing' => ['/* testShortArrayDeclarationWithDereferencing */'],
'short list' => ['/* testShortListDeclaration */'],
'short list nested' => ['/* testNestedListDeclaration */'],
'short array within function call' => ['/* testArrayWithinFunctionCall */'],
'short list after braced control structure' => ['/* testShortListDeclarationAfterBracedControlStructure */'],
'short list after non-braced control structure' => ['/* testShortListDeclarationAfterNonBracedControlStructure */'],
'short list after alternative control structure' => ['/* testShortListDeclarationAfterAlternativeControlStructure */'],
];
}//end dataShortArrays()
}//end class
|