Skip to content

Commit b38847b

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 30b3148 commit b38847b

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
*
@@ -370,44 +392,54 @@ public function testNamespaceOperatorInTypes()
370392

371393

372394
/**
373-
* Test arrow functions that use self/parent/callable/array/static return types.
395+
* Test arrow functions that use keyword return types.
374396
*
375-
* @covers PHP_CodeSniffer\Tokenizers\PHP::processAdditional
397+
* @param string $testMarker The comment prefacing the target token.
398+
*
399+
* @dataProvider dataKeywordReturnTypes
400+
* @covers PHP_CodeSniffer\Tokenizers\PHP::processAdditional
376401
*
377402
* @return void
378403
*/
379-
public function testKeywordReturnTypes()
404+
public function testKeywordReturnTypes($testMarker)
380405
{
381406
$tokens = $this->phpcsFile->getTokens();
382407

383-
$testMarkers = [
384-
'Self',
385-
'Parent',
386-
'Callable',
387-
'Array',
388-
'Static',
389-
];
390-
391-
foreach ($testMarkers as $marker) {
392-
$token = $this->getTargetToken('/* test'.$marker.'ReturnType */', T_FN);
393-
$this->backfillHelper($token);
394-
395-
$expectedScopeOpener = ($token + 11);
396-
$expectedScopeCloser = ($token + 14);
408+
$token = $this->getTargetToken($testMarker, T_FN);
409+
$this->backfillHelper($token);
410+
$this->scopePositionTestHelper($token, 11, 14);
397411

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

401-
$opener = $tokens[$token]['scope_opener'];
402-
$this->assertSame($expectedScopeOpener, $tokens[$opener]['scope_opener'], "Opener scope opener is not the arrow token(for $marker)");
403-
$this->assertSame($expectedScopeCloser, $tokens[$opener]['scope_closer'], "Opener scope closer is not the semicolon token(for $marker)");
404414

405-
$closer = $tokens[$token]['scope_closer'];
406-
$this->assertSame($expectedScopeOpener, $tokens[$closer]['scope_opener'], "Closer scope opener is not the arrow token(for $marker)");
407-
$this->assertSame($expectedScopeCloser, $tokens[$closer]['scope_closer'], "Closer scope closer is not the semicolon token(for $marker)");
408-
}
415+
/**
416+
* Data provider.
417+
*
418+
* @see testKeywordReturnTypes()
419+
*
420+
* @return array<string, array<string, string>>
421+
*/
422+
public static function dataKeywordReturnTypes()
423+
{
424+
return [
425+
'self' => [
426+
'testMarker' => '/* testSelfReturnType */',
427+
],
428+
'parent' => [
429+
'testMarker' => '/* testParentReturnType */',
430+
],
431+
'callable' => [
432+
'testMarker' => '/* testCallableReturnType */',
433+
],
434+
'array' => [
435+
'testMarker' => '/* testArrayReturnType */',
436+
],
437+
'static' => [
438+
'testMarker' => '/* testStaticReturnType */',
439+
],
440+
];
409441

410-
}//end testKeywordReturnTypes()
442+
}//end dataKeywordReturnTypes()
411443

412444

413445
/**

0 commit comments

Comments
 (0)