Skip to content

Commit 292f3c5

Browse files
committed
Tests/NamedFunctionCallArgumentsTest: activate two test cases
These test cases already existed in the test case file, but were not being run as tests. Fixed now.
1 parent 34bdfaa commit 292f3c5

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

tests/Core/Tokenizer/NamedFunctionCallArgumentsTest.php

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -712,6 +712,71 @@ public function testParseErrorVariableLabel()
712712
}//end testParseErrorVariableLabel()
713713

714714

715+
/**
716+
* Verify whether the colons are tokenized correctly when a return type is used for an inline
717+
* closure/arrow function declaration in a ternary.
718+
*
719+
* @param string $testMarker The comment prefacing the target token.
720+
*
721+
* @dataProvider dataOtherColonsInTernary
722+
* @covers PHP_CodeSniffer\Tokenizers\PHP::tokenize
723+
*
724+
* @return void
725+
*/
726+
public function testOtherColonsInTernary($testMarker)
727+
{
728+
$tokens = self::$phpcsFile->getTokens();
729+
730+
$startOfStatement = $this->getTargetToken($testMarker, T_VARIABLE);
731+
732+
// Walk the statement and check the tokenization.
733+
// There should be no T_PARAM_NAME tokens.
734+
// First colon should be T_COLON for the return type.
735+
// Second colon should be T_INLINE_ELSE for the ternary.
736+
// Third colon should be T_COLON for the return type.
737+
$colonCount = 0;
738+
for ($i = ($startOfStatement + 1); $tokens[$i]['line'] === $tokens[$startOfStatement]['line']; $i++) {
739+
$this->assertNotEquals(T_PARAM_NAME, $tokens[$i]['code'], "Token $i is tokenized as parameter label");
740+
741+
if ($tokens[$i]['content'] === ':') {
742+
++$colonCount;
743+
744+
if ($colonCount === 1) {
745+
$this->assertSame(T_COLON, $tokens[$i]['code'], 'First colon is not tokenized as T_COLON');
746+
} else if ($colonCount === 2) {
747+
$this->assertSame(T_INLINE_ELSE, $tokens[$i]['code'], 'Second colon is not tokenized as T_INLINE_ELSE');
748+
} else if ($colonCount === 3) {
749+
$this->assertSame(T_COLON, $tokens[$i]['code'], 'Third colon is not tokenized as T_COLON');
750+
} else {
751+
$this->fail('Unexpected colon encountered in statement');
752+
}
753+
}
754+
}
755+
756+
}//end testOtherColonsInTernary()
757+
758+
759+
/**
760+
* Data provider.
761+
*
762+
* @see testOtherColonsInTernary()
763+
*
764+
* @return array<string, array<string, string>>
765+
*/
766+
public static function dataOtherColonsInTernary()
767+
{
768+
return [
769+
'closures with return types in ternary' => [
770+
'testMarker' => '/* testTernaryWithClosuresAndReturnTypes */',
771+
],
772+
'arrow functions with return types in ternary' => [
773+
'testMarker' => '/* testTernaryWithArrowFunctionsAndReturnTypes */',
774+
],
775+
];
776+
777+
}//end dataOtherColonsInTernary()
778+
779+
715780
/**
716781
* Verify that reserved keywords used as a parameter label are tokenized as T_PARAM_NAME
717782
* and that the colon after it is tokenized as a T_COLON.

0 commit comments

Comments
 (0)