NodeFinderTest.php 2.3 KB

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