1 <?php declare(strict_types=1);
5 use PhpParser\Node\Expr;
6 use PHPUnit\Framework\TestCase;
8 class NodeFinderTest extends TestCase
10 private function getStmtsAndVars() {
11 $assign = new Expr\Assign(new Expr\Variable('a'), new Expr\BinaryOp\Concat(
12 new Expr\Variable('b'), new Expr\Variable('c')
14 $stmts = [new Node\Stmt\Expression($assign)];
15 $vars = [$assign->var, $assign->expr->left, $assign->expr->right];
16 return [$stmts, $vars];
19 public function testFind() {
20 $finder = new NodeFinder;
21 list($stmts, $vars) = $this->getStmtsAndVars();
22 $varFilter = function(Node $node) {
23 return $node instanceof Expr\Variable;
25 $this->assertSame($vars, $finder->find($stmts, $varFilter));
26 $this->assertSame($vars, $finder->find($stmts[0], $varFilter));
28 $noneFilter = function () { return false; };
29 $this->assertSame([], $finder->find($stmts, $noneFilter));
32 public function testFindInstanceOf() {
33 $finder = new NodeFinder;
34 list($stmts, $vars) = $this->getStmtsAndVars();
35 $this->assertSame($vars, $finder->findInstanceOf($stmts, Expr\Variable::class));
36 $this->assertSame($vars, $finder->findInstanceOf($stmts[0], Expr\Variable::class));
37 $this->assertSame([], $finder->findInstanceOf($stmts, Expr\BinaryOp\Mul::class));
40 public function testFindFirst() {
41 $finder = new NodeFinder;
42 list($stmts, $vars) = $this->getStmtsAndVars();
43 $varFilter = function(Node $node) {
44 return $node instanceof Expr\Variable;
46 $this->assertSame($vars[0], $finder->findFirst($stmts, $varFilter));
47 $this->assertSame($vars[0], $finder->findFirst($stmts[0], $varFilter));
49 $noneFilter = function () { return false; };
50 $this->assertNull($finder->findFirst($stmts, $noneFilter));
53 public function testFindFirstInstanceOf() {
54 $finder = new NodeFinder;
55 list($stmts, $vars) = $this->getStmtsAndVars();
56 $this->assertSame($vars[0], $finder->findFirstInstanceOf($stmts, Expr\Variable::class));
57 $this->assertSame($vars[0], $finder->findFirstInstanceOf($stmts[0], Expr\Variable::class));
58 $this->assertNull($finder->findFirstInstanceOf($stmts, Expr\BinaryOp\Mul::class));