CallableLikeTest.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. <?php declare(strict_types=1);
  2. namespace PhpParser\Node\Expr;
  3. use PhpParser\Node\Arg;
  4. use PhpParser\Node\Name;
  5. use PhpParser\Node\Scalar\LNumber;
  6. use PhpParser\Node\VariadicPlaceholder;
  7. class CallableLikeTest extends \PHPUnit\Framework\TestCase {
  8. /**
  9. * @dataProvider provideTestIsFirstClassCallable
  10. */
  11. public function testIsFirstClassCallable(CallLike $node, bool $isFirstClassCallable) {
  12. $this->assertSame($isFirstClassCallable, $node->isFirstClassCallable());
  13. if (!$isFirstClassCallable) {
  14. $this->assertSame($node->getRawArgs(), $node->getArgs());
  15. }
  16. }
  17. public function provideTestIsFirstClassCallable() {
  18. $normalArgs = [new Arg(new LNumber(1))];
  19. $callableArgs = [new VariadicPlaceholder()];
  20. return [
  21. [new FuncCall(new Name('test'), $normalArgs), false],
  22. [new FuncCall(new Name('test'), $callableArgs), true],
  23. [new MethodCall(new Variable('this'), 'test', $normalArgs), false],
  24. [new MethodCall(new Variable('this'), 'test', $callableArgs), true],
  25. [new StaticCall(new Name('Test'), 'test', $normalArgs), false],
  26. [new StaticCall(new Name('Test'), 'test', $callableArgs), true],
  27. [new New_(new Name('Test'), $normalArgs), false],
  28. [new NullsafeMethodCall(new Variable('this'), 'test', $normalArgs), false],
  29. // This is not legal code, but accepted by the parser.
  30. [new New_(new Name('Test'), $callableArgs), true],
  31. [new NullsafeMethodCall(new Variable('this'), 'test', $callableArgs), true],
  32. ];
  33. }
  34. }