Skip to content

Commit 69432fa

Browse files
committed
PhpDocParserTest - verify all nodes have attributes
1 parent ffaba4f commit 69432fa

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

tests/PHPStan/Parser/PhpDocParserTest.php

+47
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprStringNode;
1111
use PHPStan\PhpDocParser\Ast\ConstExpr\ConstFetchNode;
1212
use PHPStan\PhpDocParser\Ast\Node;
13+
use PHPStan\PhpDocParser\Ast\NodeTraverser;
1314
use PHPStan\PhpDocParser\Ast\PhpDoc\AssertTagMethodValueNode;
1415
use PHPStan\PhpDocParser\Ast\PhpDoc\AssertTagPropertyValueNode;
1516
use PHPStan\PhpDocParser\Ast\PhpDoc\AssertTagValueNode;
@@ -53,6 +54,7 @@
5354
use PHPStan\PhpDocParser\Lexer\Lexer;
5455
use PHPUnit\Framework\TestCase;
5556
use function count;
57+
use function sprintf;
5658
use const PHP_EOL;
5759

5860
class PhpDocParserTest extends TestCase
@@ -5709,4 +5711,49 @@ public function testReturnTypeLinesAndIndexes(string $phpDoc, array $lines): voi
57095711
$this->assertSame($lines[3], $type->getAttribute(Attribute::END_INDEX));
57105712
}
57115713

5714+
/**
5715+
* @dataProvider provideTagsWithNumbers
5716+
* @dataProvider provideSpecializedTags
5717+
* @dataProvider provideParamTagsData
5718+
* @dataProvider provideTypelessParamTagsData
5719+
* @dataProvider provideVarTagsData
5720+
* @dataProvider provideReturnTagsData
5721+
* @dataProvider provideThrowsTagsData
5722+
* @dataProvider provideMixinTagsData
5723+
* @dataProvider provideDeprecatedTagsData
5724+
* @dataProvider providePropertyTagsData
5725+
* @dataProvider provideMethodTagsData
5726+
* @dataProvider provideSingleLinePhpDocData
5727+
* @dataProvider provideMultiLinePhpDocData
5728+
* @dataProvider provideTemplateTagsData
5729+
* @dataProvider provideExtendsTagsData
5730+
* @dataProvider provideTypeAliasTagsData
5731+
* @dataProvider provideTypeAliasImportTagsData
5732+
* @dataProvider provideAssertTagsData
5733+
* @dataProvider provideRealWorldExampleData
5734+
* @dataProvider provideDescriptionWithOrWithoutHtml
5735+
* @dataProvider provideTagsWithBackslash
5736+
* @dataProvider provideSelfOutTagsData
5737+
* @dataProvider provideParamOutTagsData
5738+
*/
5739+
public function testVerifyAttributes(string $label, string $input): void
5740+
{
5741+
$usedAttributes = ['lines' => true, 'indexes' => true];
5742+
$constExprParser = new ConstExprParser(true, true, $usedAttributes);
5743+
$typeParser = new TypeParser($constExprParser, true, $usedAttributes);
5744+
$phpDocParser = new PhpDocParser($typeParser, $constExprParser, true, true, $usedAttributes);
5745+
$tokens = new TokenIterator($this->lexer->tokenize($input));
5746+
5747+
$visitor = new NodeCollectingVisitor();
5748+
$traverser = new NodeTraverser([$visitor]);
5749+
$traverser->traverse([$phpDocParser->parse($tokens)]);
5750+
5751+
foreach ($visitor->nodes as $node) {
5752+
$this->assertNotNull($node->getAttribute(Attribute::START_LINE), sprintf('%s: %s', $label, $node));
5753+
$this->assertNotNull($node->getAttribute(Attribute::END_LINE), sprintf('%s: %s', $label, $node));
5754+
$this->assertNotNull($node->getAttribute(Attribute::START_INDEX), sprintf('%s: %s', $label, $node));
5755+
$this->assertNotNull($node->getAttribute(Attribute::END_INDEX), sprintf('%s: %s', $label, $node));
5756+
}
5757+
}
5758+
57125759
}

0 commit comments

Comments
 (0)