FindingVisitorTest.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. {
  8. public function testFindVariables() {
  9. $traverser = new NodeTraverser();
  10. $visitor = new FindingVisitor(function(Node $node) {
  11. return $node instanceof Node\Expr\Variable;
  12. });
  13. $traverser->addVisitor($visitor);
  14. $assign = new Expr\Assign(new Expr\Variable('a'), new Expr\BinaryOp\Concat(
  15. new Expr\Variable('b'), new Expr\Variable('c')
  16. ));
  17. $stmts = [new Node\Stmt\Expression($assign)];
  18. $traverser->traverse($stmts);
  19. $this->assertSame([
  20. $assign->var,
  21. $assign->expr->left,
  22. $assign->expr->right,
  23. ], $visitor->getFoundNodes());
  24. }
  25. public function testFindAll() {
  26. $traverser = new NodeTraverser();
  27. $visitor = new FindingVisitor(function(Node $node) {
  28. return true; // All nodes
  29. });
  30. $traverser->addVisitor($visitor);
  31. $assign = new Expr\Assign(new Expr\Variable('a'), new Expr\BinaryOp\Concat(
  32. new Expr\Variable('b'), new Expr\Variable('c')
  33. ));
  34. $stmts = [new Node\Stmt\Expression($assign)];
  35. $traverser->traverse($stmts);
  36. $this->assertSame([
  37. $stmts[0],
  38. $assign,
  39. $assign->var,
  40. $assign->expr,
  41. $assign->expr->left,
  42. $assign->expr->right,
  43. ], $visitor->getFoundNodes());
  44. }
  45. }