annotate vendor/nikic/php-parser/test/PhpParser/Builder/FunctionTest.php @ 14:1fec387a4317

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