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