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