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