You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The scope closers weren't being tested properly as the local `$closer` variable was looking for the wrong array index.
Once that was enabled, it exposed another issue in the tests: nested arrow functions with a scope closer being shared with the "outer" arrow function did not have the correct expectations set.
Fixed now by:
* Selectively skipping the 'scope_condition' check for the scope closer in the `backfillHelper()` method.
* Checking that the `scope_opener` for such shared `scope_closer`s actually points to the "outer" arrow function.
$this->assertSame($tokens[$token]['scope_opener'], ($token + 5), 'Scope opener is not the arrow token');
175
175
$this->assertSame($tokens[$token]['scope_closer'], ($token + 16), 'Scope closer is not the semicolon token');
@@ -178,8 +178,8 @@ public function testNestedInner()
178
178
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 5), 'Opener scope opener is not the arrow token');
179
179
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 16), 'Opener scope closer is not the semicolon token');
180
180
181
-
$closer = $tokens[$token]['scope_opener'];
182
-
$this->assertSame($tokens[$closer]['scope_opener'], ($token+ 5), 'Closer scope opener is not the arrow token');
181
+
$closer = $tokens[$token]['scope_closer'];
182
+
$this->assertSame($tokens[$closer]['scope_opener'], ($token- 4), 'Closer scope opener is not the arrow token of the "outer" arrow function (shared scope closer)');
183
183
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 16), 'Closer scope closer is not the semicolon token');
184
184
185
185
}//end testNestedInner()
@@ -206,7 +206,7 @@ public function testFunctionCall()
206
206
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 5), 'Opener scope opener is not the arrow token');
207
207
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 17), 'Opener scope closer is not the semicolon token');
208
208
209
-
$closer = $tokens[$token]['scope_opener'];
209
+
$closer = $tokens[$token]['scope_closer'];
210
210
$this->assertSame($tokens[$closer]['scope_opener'], ($token + 5), 'Closer scope opener is not the arrow token');
211
211
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 17), 'Closer scope closer is not the semicolon token');
212
212
@@ -234,7 +234,7 @@ public function testChainedFunctionCall()
234
234
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 5), 'Opener scope opener is not the arrow token');
235
235
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 12), 'Opener scope closer is not the bracket token');
236
236
237
-
$closer = $tokens[$token]['scope_opener'];
237
+
$closer = $tokens[$token]['scope_closer'];
238
238
$this->assertSame($tokens[$closer]['scope_opener'], ($token + 5), 'Closer scope opener is not the arrow token');
239
239
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 12), 'Closer scope closer is not the bracket token');
240
240
@@ -262,7 +262,7 @@ public function testFunctionArgument()
262
262
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 8), 'Opener scope opener is not the arrow token');
263
263
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 15), 'Opener scope closer is not the comma token');
264
264
265
-
$closer = $tokens[$token]['scope_opener'];
265
+
$closer = $tokens[$token]['scope_closer'];
266
266
$this->assertSame($tokens[$closer]['scope_opener'], ($token + 8), 'Closer scope opener is not the arrow token');
267
267
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 15), 'Closer scope closer is not the comma token');
268
268
@@ -290,7 +290,7 @@ public function testClosure()
290
290
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 5), 'Opener scope opener is not the arrow token');
291
291
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 60), 'Opener scope closer is not the comma token');
292
292
293
-
$closer = $tokens[$token]['scope_opener'];
293
+
$closer = $tokens[$token]['scope_closer'];
294
294
$this->assertSame($tokens[$closer]['scope_opener'], ($token + 5), 'Closer scope opener is not the arrow token');
295
295
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 60), 'Closer scope closer is not the comma token');
296
296
@@ -318,7 +318,7 @@ public function testReturnType()
318
318
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 11), 'Opener scope opener is not the arrow token');
319
319
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 18), 'Opener scope closer is not the comma token');
320
320
321
-
$closer = $tokens[$token]['scope_opener'];
321
+
$closer = $tokens[$token]['scope_closer'];
322
322
$this->assertSame($tokens[$closer]['scope_opener'], ($token + 11), 'Closer scope opener is not the arrow token');
323
323
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 18), 'Closer scope closer is not the comma token');
324
324
@@ -346,7 +346,7 @@ public function testReference()
346
346
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 6), 'Opener scope opener is not the arrow token');
347
347
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 9), 'Opener scope closer is not the semicolon token');
348
348
349
-
$closer = $tokens[$token]['scope_opener'];
349
+
$closer = $tokens[$token]['scope_closer'];
350
350
$this->assertSame($tokens[$closer]['scope_opener'], ($token + 6), 'Closer scope opener is not the arrow token');
351
351
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 9), 'Closer scope closer is not the semicolon token');
352
352
@@ -374,7 +374,7 @@ public function testGrouped()
374
374
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 5), 'Opener scope opener is not the arrow token');
375
375
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 8), 'Opener scope closer is not the semicolon token');
376
376
377
-
$closer = $tokens[$token]['scope_opener'];
377
+
$closer = $tokens[$token]['scope_closer'];
378
378
$this->assertSame($tokens[$closer]['scope_opener'], ($token + 5), 'Closer scope opener is not the arrow token');
379
379
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 8), 'Closer scope closer is not the semicolon token');
380
380
@@ -402,7 +402,7 @@ public function testArrayValue()
402
402
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 4), 'Opener scope opener is not the arrow token');
403
403
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 9), 'Opener scope closer is not the comma token');
404
404
405
-
$closer = $tokens[$token]['scope_opener'];
405
+
$closer = $tokens[$token]['scope_closer'];
406
406
$this->assertSame($tokens[$closer]['scope_opener'], ($token + 4), 'Closer scope opener is not the arrow token');
407
407
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 9), 'Closer scope closer is not the comma token');
408
408
@@ -430,7 +430,7 @@ public function testYield()
430
430
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 5), 'Opener scope opener is not the arrow token');
431
431
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 14), 'Opener scope closer is not the semicolon token');
432
432
433
-
$closer = $tokens[$token]['scope_opener'];
433
+
$closer = $tokens[$token]['scope_closer'];
434
434
$this->assertSame($tokens[$closer]['scope_opener'], ($token + 5), 'Closer scope opener is not the arrow token');
435
435
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 14), 'Closer scope closer is not the semicolon token');
436
436
@@ -458,7 +458,7 @@ public function testNullableNamespace()
458
458
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 15), 'Opener scope opener is not the arrow token');
459
459
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 18), 'Opener scope closer is not the semicolon token');
460
460
461
-
$closer = $tokens[$token]['scope_opener'];
461
+
$closer = $tokens[$token]['scope_closer'];
462
462
$this->assertSame($tokens[$closer]['scope_opener'], ($token + 15), 'Closer scope opener is not the arrow token');
463
463
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 18), 'Closer scope closer is not the semicolon token');
464
464
@@ -495,7 +495,7 @@ public function testKeywordReturnTypes()
495
495
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 11), "Opener scope opener is not the arrow token(for $marker)");
496
496
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 14), "Opener scope closer is not the semicolon token(for $marker)");
497
497
498
-
$closer = $tokens[$token]['scope_opener'];
498
+
$closer = $tokens[$token]['scope_closer'];
499
499
$this->assertSame($tokens[$closer]['scope_opener'], ($token + 11), "Closer scope opener is not the arrow token(for $marker)");
500
500
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 14), "Closer scope closer is not the semicolon token(for $marker)");
501
501
}
@@ -524,7 +524,7 @@ public function testTernary()
524
524
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 5), 'Opener scope opener is not the arrow token');
525
525
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 40), 'Opener scope closer is not the semicolon token');
526
526
527
-
$closer = $tokens[$token]['scope_opener'];
527
+
$closer = $tokens[$token]['scope_closer'];
528
528
$this->assertSame($tokens[$closer]['scope_opener'], ($token + 5), 'Closer scope opener is not the arrow token');
529
529
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 40), 'Closer scope closer is not the semicolon token');
530
530
@@ -538,12 +538,12 @@ public function testTernary()
538
538
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 8), 'Opener scope opener for THEN is not the arrow token');
539
539
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 12), 'Opener scope closer for THEN is not the semicolon token');
540
540
541
-
$closer = $tokens[$token]['scope_opener'];
541
+
$closer = $tokens[$token]['scope_closer'];
542
542
$this->assertSame($tokens[$closer]['scope_opener'], ($token + 8), 'Closer scope opener for THEN is not the arrow token');
543
543
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 12), 'Closer scope closer for THEN is not the semicolon token');
$this->assertSame($tokens[$token]['scope_opener'], ($token + 8), 'Scope opener for ELSE is not the arrow token');
549
549
$this->assertSame($tokens[$token]['scope_closer'], ($token + 11), 'Scope closer for ELSE is not the semicolon token');
@@ -552,8 +552,8 @@ public function testTernary()
552
552
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 8), 'Opener scope opener for ELSE is not the arrow token');
553
553
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 11), 'Opener scope closer for ELSE is not the semicolon token');
554
554
555
-
$closer = $tokens[$token]['scope_opener'];
556
-
$this->assertSame($tokens[$closer]['scope_opener'], ($token+ 8), 'Closer scope opener for ELSE is not the arrow token');
555
+
$closer = $tokens[$token]['scope_closer'];
556
+
$this->assertSame($tokens[$closer]['scope_opener'], ($token- 24), 'Closer scope opener for ELSE is not the arrow token of the "outer" arrow function (shared scope closer)');
557
557
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 11), 'Closer scope closer for ELSE is not the semicolon token');
558
558
559
559
}//end testTernary()
@@ -580,7 +580,7 @@ public function testNestedInMethod()
580
580
$this->assertSame($tokens[$opener]['scope_opener'], ($token + 5), 'Opener scope opener is not the arrow token');
581
581
$this->assertSame($tokens[$opener]['scope_closer'], ($token + 17), 'Opener scope closer is not the semicolon token');
582
582
583
-
$closer = $tokens[$token]['scope_opener'];
583
+
$closer = $tokens[$token]['scope_closer'];
584
584
$this->assertSame($tokens[$closer]['scope_opener'], ($token + 5), 'Closer scope opener is not the arrow token');
585
585
$this->assertSame($tokens[$closer]['scope_closer'], ($token + 17), 'Closer scope closer is not the semicolon token');
586
586
@@ -671,11 +671,16 @@ public function dataNotAnArrowFunction()
671
671
/**
672
672
* Helper function to check that all token keys are correctly set for T_FN tokens.
673
673
*
674
-
* @param string $token The T_FN token to check.
674
+
* @param string $token The T_FN token to check.
675
+
* @param bool $skipScopeCloserCheck Whether to skip the scope closer check.
676
+
* This should be set to "true" when testing nested arrow functions,
677
+
* where the "inner" arrow function shares a scope closer with the
678
+
* "outer" arrow function, as the 'scope_condition' for the scope closer
679
+
* of the "inner" arrow function will point to the "outer" arrow function.
0 commit comments