Skip to content

Commit 4d15227

Browse files
committed
BackfillFnTokenTest: use data providers when appropriate
These two tests were testing multiple test cases, but not using a data provider, which means that if one of the test cases would fail, the ones after the failing test case wouldn't even be tested. By using a data provider, that issue is avoided. It also allows for simplifying some of the test code for the `testKeywordReturnTypes()` test which duplicated the logic for the `scopePositionTestHelper()` just to allow for custom error messages mentioning the test marker. This is no longer needed when each marker is tested individually via the data provider.
1 parent af96e4f commit 4d15227

File tree

1 file changed

+66
-34
lines changed

1 file changed

+66
-34
lines changed

tests/Core/Tokenizer/BackfillFnTokenTest.php

Lines changed: 66 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,43 @@ final class BackfillFnTokenTest extends AbstractTokenizerTestCase
1616
/**
1717
* Test simple arrow functions.
1818
*
19-
* @covers PHP_CodeSniffer\Tokenizers\PHP::processAdditional
19+
* @param string $testMarker The comment prefacing the target token.
20+
*
21+
* @dataProvider dataSimple
22+
* @covers PHP_CodeSniffer\Tokenizers\PHP::processAdditional
2023
*
2124
* @return void
2225
*/
23-
public function testSimple()
26+
public function testSimple($testMarker)
2427
{
25-
foreach (['/* testStandard */', '/* testMixedCase */'] as $comment) {
26-
$token = $this->getTargetToken($comment, T_FN);
27-
$this->backfillHelper($token);
28-
$this->scopePositionTestHelper($token, 5, 12);
29-
}
28+
$token = $this->getTargetToken($testMarker, T_FN);
29+
$this->backfillHelper($token);
30+
$this->scopePositionTestHelper($token, 5, 12);
3031

3132
}//end testSimple()
3233

3334

35+
/**
36+
* Data provider.
37+
*
38+
* @see testSimple()
39+
*
40+
* @return array<string, array<string, string>>
41+
*/
42+
public static function dataSimple()
43+
{
44+
return [
45+
'standard' => [
46+
'testMarker' => '/* testStandard */',
47+
],
48+
'mixed case' => [
49+
'testMarker' => '/* testMixedCase */',
50+
],
51+
];
52+
53+
}//end dataSimple()
54+
55+
3456
/**
3557
* Test whitespace inside arrow function definitions.
3658
*
@@ -426,44 +448,54 @@ public function testNamespaceOperatorInTypes()
426448

427449

428450
/**
429-
* Test arrow functions that use self/parent/callable/array/static return types.
451+
* Test arrow functions that use keyword return types.
430452
*
431-
* @covers PHP_CodeSniffer\Tokenizers\PHP::processAdditional
453+
* @param string $testMarker The comment prefacing the target token.
454+
*
455+
* @dataProvider dataKeywordReturnTypes
456+
* @covers PHP_CodeSniffer\Tokenizers\PHP::processAdditional
432457
*
433458
* @return void
434459
*/
435-
public function testKeywordReturnTypes()
460+
public function testKeywordReturnTypes($testMarker)
436461
{
437462
$tokens = $this->phpcsFile->getTokens();
438463

439-
$testMarkers = [
440-
'Self',
441-
'Parent',
442-
'Callable',
443-
'Array',
444-
'Static',
445-
];
446-
447-
foreach ($testMarkers as $marker) {
448-
$token = $this->getTargetToken('/* test'.$marker.'ReturnType */', T_FN);
449-
$this->backfillHelper($token);
450-
451-
$expectedScopeOpener = ($token + 11);
452-
$expectedScopeCloser = ($token + 14);
464+
$token = $this->getTargetToken($testMarker, T_FN);
465+
$this->backfillHelper($token);
466+
$this->scopePositionTestHelper($token, 11, 14);
453467

454-
$this->assertSame($expectedScopeOpener, $tokens[$token]['scope_opener'], "Scope opener is not the arrow token (for $marker)");
455-
$this->assertSame($expectedScopeCloser, $tokens[$token]['scope_closer'], "Scope closer is not the semicolon token(for $marker)");
468+
}//end testKeywordReturnTypes()
456469

457-
$opener = $tokens[$token]['scope_opener'];
458-
$this->assertSame($expectedScopeOpener, $tokens[$opener]['scope_opener'], "Opener scope opener is not the arrow token(for $marker)");
459-
$this->assertSame($expectedScopeCloser, $tokens[$opener]['scope_closer'], "Opener scope closer is not the semicolon token(for $marker)");
460470

461-
$closer = $tokens[$token]['scope_closer'];
462-
$this->assertSame($expectedScopeOpener, $tokens[$closer]['scope_opener'], "Closer scope opener is not the arrow token(for $marker)");
463-
$this->assertSame($expectedScopeCloser, $tokens[$closer]['scope_closer'], "Closer scope closer is not the semicolon token(for $marker)");
464-
}
471+
/**
472+
* Data provider.
473+
*
474+
* @see testKeywordReturnTypes()
475+
*
476+
* @return array<string, array<string, string>>
477+
*/
478+
public static function dataKeywordReturnTypes()
479+
{
480+
return [
481+
'self' => [
482+
'testMarker' => '/* testSelfReturnType */',
483+
],
484+
'parent' => [
485+
'testMarker' => '/* testParentReturnType */',
486+
],
487+
'callable' => [
488+
'testMarker' => '/* testCallableReturnType */',
489+
],
490+
'array' => [
491+
'testMarker' => '/* testArrayReturnType */',
492+
],
493+
'static' => [
494+
'testMarker' => '/* testStaticReturnType */',
495+
],
496+
];
465497

466-
}//end testKeywordReturnTypes()
498+
}//end dataKeywordReturnTypes()
467499

468500

469501
/**

0 commit comments

Comments
 (0)