@@ -495,6 +495,62 @@ public function testKeywordReturnTypes()
495
495
}//end testKeywordReturnTypes()
496
496
497
497
498
+ /**
499
+ * Test arrow functions used in ternary operators.
500
+ *
501
+ * @covers PHP_CodeSniffer\Tokenizers\PHP::processAdditional
502
+ *
503
+ * @return void
504
+ */
505
+ public function testTernary ()
506
+ {
507
+ $ tokens = self ::$ phpcsFile ->getTokens ();
508
+
509
+ $ token = $ this ->getTargetToken ('/* testTernary */ ' , T_FN );
510
+ $ this ->backfillHelper ($ token );
511
+
512
+ $ this ->assertSame ($ tokens [$ token ]['scope_opener ' ], ($ token + 5 ), 'Scope opener is not the arrow token ' );
513
+ $ this ->assertSame ($ tokens [$ token ]['scope_closer ' ], ($ token + 40 ), 'Scope closer is not the semicolon token ' );
514
+
515
+ $ opener = $ tokens [$ token ]['scope_opener ' ];
516
+ $ this ->assertSame ($ tokens [$ opener ]['scope_opener ' ], ($ token + 5 ), 'Opener scope opener is not the arrow token ' );
517
+ $ this ->assertSame ($ tokens [$ opener ]['scope_closer ' ], ($ token + 40 ), 'Opener scope closer is not the semicolon token ' );
518
+
519
+ $ closer = $ tokens [$ token ]['scope_opener ' ];
520
+ $ this ->assertSame ($ tokens [$ closer ]['scope_opener ' ], ($ token + 5 ), 'Closer scope opener is not the arrow token ' );
521
+ $ this ->assertSame ($ tokens [$ closer ]['scope_closer ' ], ($ token + 40 ), 'Closer scope closer is not the semicolon token ' );
522
+
523
+ $ token = $ this ->getTargetToken ('/* testTernaryThen */ ' , T_FN );
524
+ $ this ->backfillHelper ($ token );
525
+
526
+ $ this ->assertSame ($ tokens [$ token ]['scope_opener ' ], ($ token + 8 ), 'Scope opener for THEN is not the arrow token ' );
527
+ $ this ->assertSame ($ tokens [$ token ]['scope_closer ' ], ($ token + 12 ), 'Scope closer for THEN is not the semicolon token ' );
528
+
529
+ $ opener = $ tokens [$ token ]['scope_opener ' ];
530
+ $ this ->assertSame ($ tokens [$ opener ]['scope_opener ' ], ($ token + 8 ), 'Opener scope opener for THEN is not the arrow token ' );
531
+ $ this ->assertSame ($ tokens [$ opener ]['scope_closer ' ], ($ token + 12 ), 'Opener scope closer for THEN is not the semicolon token ' );
532
+
533
+ $ closer = $ tokens [$ token ]['scope_opener ' ];
534
+ $ this ->assertSame ($ tokens [$ closer ]['scope_opener ' ], ($ token + 8 ), 'Closer scope opener for THEN is not the arrow token ' );
535
+ $ this ->assertSame ($ tokens [$ closer ]['scope_closer ' ], ($ token + 12 ), 'Closer scope closer for THEN is not the semicolon token ' );
536
+
537
+ $ token = $ this ->getTargetToken ('/* testTernaryElse */ ' , T_FN );
538
+ $ this ->backfillHelper ($ token );
539
+
540
+ $ this ->assertSame ($ tokens [$ token ]['scope_opener ' ], ($ token + 8 ), 'Scope opener for ELSE is not the arrow token ' );
541
+ $ this ->assertSame ($ tokens [$ token ]['scope_closer ' ], ($ token + 11 ), 'Scope closer for ELSE is not the semicolon token ' );
542
+
543
+ $ opener = $ tokens [$ token ]['scope_opener ' ];
544
+ $ this ->assertSame ($ tokens [$ opener ]['scope_opener ' ], ($ token + 8 ), 'Opener scope opener for ELSE is not the arrow token ' );
545
+ $ this ->assertSame ($ tokens [$ opener ]['scope_closer ' ], ($ token + 11 ), 'Opener scope closer for ELSE is not the semicolon token ' );
546
+
547
+ $ closer = $ tokens [$ token ]['scope_opener ' ];
548
+ $ this ->assertSame ($ tokens [$ closer ]['scope_opener ' ], ($ token + 8 ), 'Closer scope opener for ELSE is not the arrow token ' );
549
+ $ this ->assertSame ($ tokens [$ closer ]['scope_closer ' ], ($ token + 11 ), 'Closer scope closer for ELSE is not the semicolon token ' );
550
+
551
+ }//end testTernary()
552
+
553
+
498
554
/**
499
555
* Test that anonymous class tokens without parenthesis do not get assigned a parenthesis owner.
500
556
*
0 commit comments