1<?php declare(strict_types=1); 2 3namespace PhpParser\NodeVisitor; 4 5use PhpParser\Node\Stmt\ClassMethod; 6use PhpParser\NodeFinder; 7use PhpParser\NodeTraverser; 8use PhpParser\ParserFactory; 9 10final class ParentConnectingVisitorTest extends \PHPUnit\Framework\TestCase { 11 public function testConnectsChildNodeToParentNode(): void { 12 $ast = (new ParserFactory())->createForNewestSupportedVersion()->parse( 13 '<?php class C { public function m() {} }' 14 ); 15 16 $traverser = new NodeTraverser(); 17 18 $traverser->addVisitor(new ParentConnectingVisitor()); 19 20 $ast = $traverser->traverse($ast); 21 22 $node = (new NodeFinder())->findFirstInstanceof($ast, ClassMethod::class); 23 24 $this->assertSame('C', $node->getAttribute('parent')->name->toString()); 25 } 26 27 public function testWeakReferences(): void { 28 $ast = (new ParserFactory())->createForNewestSupportedVersion()->parse( 29 '<?php class C { public function m() {} }' 30 ); 31 32 $traverser = new NodeTraverser(); 33 34 $traverser->addVisitor(new ParentConnectingVisitor(true)); 35 36 $ast = $traverser->traverse($ast); 37 38 $node = (new NodeFinder())->findFirstInstanceof($ast, ClassMethod::class); 39 40 $weakReference = $node->getAttribute('weak_parent'); 41 $this->assertInstanceOf(\WeakReference::class, $weakReference); 42 $this->assertSame('C', $weakReference->get()->name->toString()); 43 } 44} 45