|  | 
| 10 | 10 | use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprStringNode; | 
| 11 | 11 | use PHPStan\PhpDocParser\Ast\ConstExpr\ConstFetchNode; | 
| 12 | 12 | use PHPStan\PhpDocParser\Ast\Node; | 
|  | 13 | +use PHPStan\PhpDocParser\Ast\NodeTraverser; | 
| 13 | 14 | use PHPStan\PhpDocParser\Ast\PhpDoc\AssertTagMethodValueNode; | 
| 14 | 15 | use PHPStan\PhpDocParser\Ast\PhpDoc\AssertTagPropertyValueNode; | 
| 15 | 16 | use PHPStan\PhpDocParser\Ast\PhpDoc\AssertTagValueNode; | 
|  | 
| 53 | 54 | use PHPStan\PhpDocParser\Lexer\Lexer; | 
| 54 | 55 | use PHPUnit\Framework\TestCase; | 
| 55 | 56 | use function count; | 
|  | 57 | +use function sprintf; | 
| 56 | 58 | use const PHP_EOL; | 
| 57 | 59 | 
 | 
| 58 | 60 | class PhpDocParserTest extends TestCase | 
| @@ -5709,4 +5711,49 @@ public function testReturnTypeLinesAndIndexes(string $phpDoc, array $lines): voi | 
| 5709 | 5711 | 		$this->assertSame($lines[3], $type->getAttribute(Attribute::END_INDEX)); | 
| 5710 | 5712 | 	} | 
| 5711 | 5713 | 
 | 
|  | 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 | + | 
| 5712 | 5759 | } | 
0 commit comments