annotate vendor/nikic/php-parser/test/PhpParser/Builder/MethodTest.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 MethodTest extends TestCase
Chris@0 14 {
Chris@0 15 public function createMethodBuilder($name) {
Chris@0 16 return new Method($name);
Chris@0 17 }
Chris@0 18
Chris@0 19 public function testModifiers() {
Chris@0 20 $node = $this->createMethodBuilder('test')
Chris@0 21 ->makePublic()
Chris@0 22 ->makeAbstract()
Chris@0 23 ->makeStatic()
Chris@0 24 ->getNode()
Chris@0 25 ;
Chris@0 26
Chris@0 27 $this->assertEquals(
Chris@13 28 new Stmt\ClassMethod('test', [
Chris@0 29 'flags' => Stmt\Class_::MODIFIER_PUBLIC
Chris@0 30 | Stmt\Class_::MODIFIER_ABSTRACT
Chris@0 31 | Stmt\Class_::MODIFIER_STATIC,
Chris@0 32 'stmts' => null,
Chris@13 33 ]),
Chris@0 34 $node
Chris@0 35 );
Chris@0 36
Chris@0 37 $node = $this->createMethodBuilder('test')
Chris@0 38 ->makeProtected()
Chris@0 39 ->makeFinal()
Chris@0 40 ->getNode()
Chris@0 41 ;
Chris@0 42
Chris@0 43 $this->assertEquals(
Chris@13 44 new Stmt\ClassMethod('test', [
Chris@0 45 'flags' => Stmt\Class_::MODIFIER_PROTECTED
Chris@0 46 | Stmt\Class_::MODIFIER_FINAL
Chris@13 47 ]),
Chris@0 48 $node
Chris@0 49 );
Chris@0 50
Chris@0 51 $node = $this->createMethodBuilder('test')
Chris@0 52 ->makePrivate()
Chris@0 53 ->getNode()
Chris@0 54 ;
Chris@0 55
Chris@0 56 $this->assertEquals(
Chris@13 57 new Stmt\ClassMethod('test', [
Chris@0 58 'type' => Stmt\Class_::MODIFIER_PRIVATE
Chris@13 59 ]),
Chris@0 60 $node
Chris@0 61 );
Chris@0 62 }
Chris@0 63
Chris@0 64 public function testReturnByRef() {
Chris@0 65 $node = $this->createMethodBuilder('test')
Chris@0 66 ->makeReturnByRef()
Chris@0 67 ->getNode()
Chris@0 68 ;
Chris@0 69
Chris@0 70 $this->assertEquals(
Chris@13 71 new Stmt\ClassMethod('test', [
Chris@0 72 'byRef' => true
Chris@13 73 ]),
Chris@0 74 $node
Chris@0 75 );
Chris@0 76 }
Chris@0 77
Chris@0 78 public function testParams() {
Chris@13 79 $param1 = new Node\Param(new Variable('test1'));
Chris@13 80 $param2 = new Node\Param(new Variable('test2'));
Chris@13 81 $param3 = new Node\Param(new Variable('test3'));
Chris@0 82
Chris@0 83 $node = $this->createMethodBuilder('test')
Chris@0 84 ->addParam($param1)
Chris@13 85 ->addParams([$param2, $param3])
Chris@0 86 ->getNode()
Chris@0 87 ;
Chris@0 88
Chris@0 89 $this->assertEquals(
Chris@13 90 new Stmt\ClassMethod('test', [
Chris@13 91 'params' => [$param1, $param2, $param3]
Chris@13 92 ]),
Chris@0 93 $node
Chris@0 94 );
Chris@0 95 }
Chris@0 96
Chris@0 97 public function testStmts() {
Chris@0 98 $stmt1 = new Print_(new String_('test1'));
Chris@0 99 $stmt2 = new Print_(new String_('test2'));
Chris@0 100 $stmt3 = new Print_(new String_('test3'));
Chris@0 101
Chris@0 102 $node = $this->createMethodBuilder('test')
Chris@0 103 ->addStmt($stmt1)
Chris@13 104 ->addStmts([$stmt2, $stmt3])
Chris@0 105 ->getNode()
Chris@0 106 ;
Chris@0 107
Chris@0 108 $this->assertEquals(
Chris@13 109 new Stmt\ClassMethod('test', [
Chris@13 110 'stmts' => [
Chris@13 111 new Stmt\Expression($stmt1),
Chris@13 112 new Stmt\Expression($stmt2),
Chris@13 113 new Stmt\Expression($stmt3),
Chris@13 114 ]
Chris@13 115 ]),
Chris@0 116 $node
Chris@0 117 );
Chris@0 118 }
Chris@0 119 public function testDocComment() {
Chris@0 120 $node = $this->createMethodBuilder('test')
Chris@0 121 ->setDocComment('/** Test */')
Chris@0 122 ->getNode();
Chris@0 123
Chris@13 124 $this->assertEquals(new Stmt\ClassMethod('test', [], [
Chris@13 125 'comments' => [new Comment\Doc('/** Test */')]
Chris@13 126 ]), $node);
Chris@0 127 }
Chris@0 128
Chris@0 129 public function testReturnType() {
Chris@0 130 $node = $this->createMethodBuilder('test')
Chris@0 131 ->setReturnType('bool')
Chris@0 132 ->getNode();
Chris@13 133 $this->assertEquals(new Stmt\ClassMethod('test', [
Chris@0 134 'returnType' => 'bool'
Chris@13 135 ], []), $node);
Chris@0 136 }
Chris@0 137
Chris@0 138 /**
Chris@0 139 * @expectedException \LogicException
Chris@0 140 * @expectedExceptionMessage Cannot add statements to an abstract method
Chris@0 141 */
Chris@0 142 public function testAddStmtToAbstractMethodError() {
Chris@0 143 $this->createMethodBuilder('test')
Chris@0 144 ->makeAbstract()
Chris@0 145 ->addStmt(new Print_(new String_('test')))
Chris@0 146 ;
Chris@0 147 }
Chris@0 148
Chris@0 149 /**
Chris@0 150 * @expectedException \LogicException
Chris@0 151 * @expectedExceptionMessage Cannot make method with statements abstract
Chris@0 152 */
Chris@0 153 public function testMakeMethodWithStmtsAbstractError() {
Chris@0 154 $this->createMethodBuilder('test')
Chris@0 155 ->addStmt(new Print_(new String_('test')))
Chris@0 156 ->makeAbstract()
Chris@0 157 ;
Chris@0 158 }
Chris@0 159
Chris@0 160 /**
Chris@0 161 * @expectedException \LogicException
Chris@0 162 * @expectedExceptionMessage Expected parameter node, got "Name"
Chris@0 163 */
Chris@0 164 public function testInvalidParamError() {
Chris@0 165 $this->createMethodBuilder('test')
Chris@0 166 ->addParam(new Node\Name('foo'))
Chris@0 167 ;
Chris@0 168 }
Chris@0 169 }