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