annotate vendor/nikic/php-parser/test/PhpParser/Builder/FunctionTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@13 1 <?php declare(strict_types=1);
Chris@0 2
Chris@0 3 namespace PhpParser\Builder;
Chris@0 4
Chris@0 5 use PhpParser\Comment;
Chris@0 6 use PhpParser\Node;
Chris@0 7 use PhpParser\Node\Expr\Print_;
Chris@13 8 use PhpParser\Node\Expr\Variable;
Chris@0 9 use PhpParser\Node\Scalar\String_;
Chris@0 10 use PhpParser\Node\Stmt;
Chris@0 11
Chris@17 12 class FunctionTest extends \PHPUnit\Framework\TestCase
Chris@0 13 {
Chris@0 14 public function createFunctionBuilder($name) {
Chris@0 15 return new Function_($name);
Chris@0 16 }
Chris@0 17
Chris@0 18 public function testReturnByRef() {
Chris@0 19 $node = $this->createFunctionBuilder('test')
Chris@0 20 ->makeReturnByRef()
Chris@0 21 ->getNode()
Chris@0 22 ;
Chris@0 23
Chris@0 24 $this->assertEquals(
Chris@13 25 new Stmt\Function_('test', [
Chris@0 26 'byRef' => true
Chris@13 27 ]),
Chris@0 28 $node
Chris@0 29 );
Chris@0 30 }
Chris@0 31
Chris@0 32 public function testParams() {
Chris@13 33 $param1 = new Node\Param(new Variable('test1'));
Chris@13 34 $param2 = new Node\Param(new Variable('test2'));
Chris@13 35 $param3 = new Node\Param(new Variable('test3'));
Chris@0 36
Chris@0 37 $node = $this->createFunctionBuilder('test')
Chris@0 38 ->addParam($param1)
Chris@13 39 ->addParams([$param2, $param3])
Chris@0 40 ->getNode()
Chris@0 41 ;
Chris@0 42
Chris@0 43 $this->assertEquals(
Chris@13 44 new Stmt\Function_('test', [
Chris@13 45 'params' => [$param1, $param2, $param3]
Chris@13 46 ]),
Chris@0 47 $node
Chris@0 48 );
Chris@0 49 }
Chris@0 50
Chris@0 51 public function testStmts() {
Chris@0 52 $stmt1 = new Print_(new String_('test1'));
Chris@0 53 $stmt2 = new Print_(new String_('test2'));
Chris@0 54 $stmt3 = new Print_(new String_('test3'));
Chris@0 55
Chris@0 56 $node = $this->createFunctionBuilder('test')
Chris@0 57 ->addStmt($stmt1)
Chris@13 58 ->addStmts([$stmt2, $stmt3])
Chris@0 59 ->getNode()
Chris@0 60 ;
Chris@0 61
Chris@0 62 $this->assertEquals(
Chris@13 63 new Stmt\Function_('test', [
Chris@13 64 'stmts' => [
Chris@13 65 new Stmt\Expression($stmt1),
Chris@13 66 new Stmt\Expression($stmt2),
Chris@13 67 new Stmt\Expression($stmt3),
Chris@13 68 ]
Chris@13 69 ]),
Chris@0 70 $node
Chris@0 71 );
Chris@0 72 }
Chris@0 73
Chris@0 74 public function testDocComment() {
Chris@0 75 $node = $this->createFunctionBuilder('test')
Chris@0 76 ->setDocComment('/** Test */')
Chris@0 77 ->getNode();
Chris@0 78
Chris@13 79 $this->assertEquals(new Stmt\Function_('test', [], [
Chris@13 80 'comments' => [new Comment\Doc('/** Test */')]
Chris@13 81 ]), $node);
Chris@0 82 }
Chris@0 83
Chris@0 84 public function testReturnType() {
Chris@0 85 $node = $this->createFunctionBuilder('test')
Chris@0 86 ->setReturnType('void')
Chris@0 87 ->getNode();
Chris@0 88
Chris@13 89 $this->assertEquals(new Stmt\Function_('test', [
Chris@0 90 'returnType' => 'void'
Chris@13 91 ], []), $node);
Chris@0 92 }
Chris@0 93
Chris@0 94 public function testInvalidNullableVoidType() {
Chris@17 95 $this->expectException(\LogicException::class);
Chris@17 96 $this->expectExceptionMessage('void type cannot be nullable');
Chris@0 97 $this->createFunctionBuilder('test')->setReturnType('?void');
Chris@0 98 }
Chris@0 99
Chris@0 100 public function testInvalidParamError() {
Chris@17 101 $this->expectException(\LogicException::class);
Chris@17 102 $this->expectExceptionMessage('Expected parameter node, got "Name"');
Chris@0 103 $this->createFunctionBuilder('test')
Chris@0 104 ->addParam(new Node\Name('foo'))
Chris@0 105 ;
Chris@0 106 }
Chris@13 107
Chris@13 108 public function testAddNonStmt() {
Chris@17 109 $this->expectException(\LogicException::class);
Chris@17 110 $this->expectExceptionMessage('Expected statement or expression node');
Chris@13 111 $this->createFunctionBuilder('test')
Chris@13 112 ->addStmt(new Node\Name('Test'));
Chris@13 113 }
Chris@0 114 }