NodeFinderTest.php 2.4 KB

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