FindingVisitorTest.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php declare(strict_types=1);
  2. namespace PhpParser\NodeVisitor;
  3. use PhpParser\Node;
  4. use PhpParser\Node\Expr;
  5. use PhpParser\NodeTraverser;
  6. class FindingVisitorTest extends \PHPUnit\Framework\TestCase {
  7. public function testFindVariables(): void {
  8. $traverser = new NodeTraverser();
  9. $visitor = new FindingVisitor(function (Node $node) {
  10. return $node instanceof Node\Expr\Variable;
  11. });
  12. $traverser->addVisitor($visitor);
  13. $assign = new Expr\Assign(new Expr\Variable('a'), new Expr\BinaryOp\Concat(
  14. new Expr\Variable('b'), new Expr\Variable('c')
  15. ));
  16. $stmts = [new Node\Stmt\Expression($assign)];
  17. $traverser->traverse($stmts);
  18. $this->assertSame([
  19. $assign->var,
  20. $assign->expr->left,
  21. $assign->expr->right,
  22. ], $visitor->getFoundNodes());
  23. }
  24. public function testFindAll(): void {
  25. $traverser = new NodeTraverser();
  26. $visitor = new FindingVisitor(function (Node $node) {
  27. return true; // All nodes
  28. });
  29. $traverser->addVisitor($visitor);
  30. $assign = new Expr\Assign(new Expr\Variable('a'), new Expr\BinaryOp\Concat(
  31. new Expr\Variable('b'), new Expr\Variable('c')
  32. ));
  33. $stmts = [new Node\Stmt\Expression($assign)];
  34. $traverser->traverse($stmts);
  35. $this->assertSame([
  36. $stmts[0],
  37. $assign,
  38. $assign->var,
  39. $assign->expr,
  40. $assign->expr->left,
  41. $assign->expr->right,
  42. ], $visitor->getFoundNodes());
  43. }
  44. }