Skip to content

Commit 5157a81

Browse files
committed
Unit tests for #2712
1 parent 979d006 commit 5157a81

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

tests/Core/Tokenizer/BackfillFnTokenTest.inc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,12 @@ $a = fn($x) => yield 'k' => $x;
5757

5858
/* testNullableNamespace */
5959
$a = fn(?\DateTime $x) : ?\DateTime => $x;
60+
61+
/* testSelfReturnType */
62+
fn(self $a) : self => $a;
63+
64+
/* testParentReturnType */
65+
fn(parent $a) : parent => $a;
66+
67+
/* testCallableReturnType */
68+
fn(callable $a) : callable => $a;

tests/Core/Tokenizer/BackfillFnTokenTest.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,42 @@ public function testNullableNamespace()
459459
}//end testNullableNamespace()
460460

461461

462+
/**
463+
* Test arrow functions that use self/parent/callable return types.
464+
*
465+
* @covers PHP_CodeSniffer\Tokenizers\PHP::processAdditional
466+
*
467+
* @return void
468+
*/
469+
public function testKeywordReturnTypes()
470+
{
471+
$tokens = self::$phpcsFile->getTokens();
472+
473+
$testMarkers = [
474+
'Self',
475+
'Parent',
476+
'Callable',
477+
];
478+
479+
foreach ($testMarkers as $marker) {
480+
$token = $this->getTargetToken('/* test'.$marker.'ReturnType */', T_FN);
481+
$this->backfillHelper($token);
482+
483+
$this->assertSame($tokens[$token]['scope_opener'], ($token + 11), "Scope opener is not the arrow token (for $marker)");
484+
$this->assertSame($tokens[$token]['scope_closer'], ($token + 14), "Scope closer is not the semicolon token(for $marker)");
485+
486+
$opener = $tokens[$token]['scope_opener'];
487+
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 11), "Opener scope opener is not the arrow token(for $marker)");
488+
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 14), "Opener scope closer is not the semicolon token(for $marker)");
489+
490+
$closer = $tokens[$token]['scope_opener'];
491+
$this->assertSame($tokens[$closer]['scope_opener'], ($token + 11), "Closer scope opener is not the arrow token(for $marker)");
492+
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 14), "Closer scope closer is not the semicolon token(for $marker)");
493+
}
494+
495+
}//end testKeywordReturnTypes()
496+
497+
462498
/**
463499
* Test that anonymous class tokens without parenthesis do not get assigned a parenthesis owner.
464500
*

0 commit comments

Comments
 (0)