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 FunctionTest extends \PHPUnit_Framework_TestCase
|
Chris@0
|
12 {
|
Chris@0
|
13 public function createFunctionBuilder($name) {
|
Chris@0
|
14 return new Function_($name);
|
Chris@0
|
15 }
|
Chris@0
|
16
|
Chris@0
|
17 public function testReturnByRef() {
|
Chris@0
|
18 $node = $this->createFunctionBuilder('test')
|
Chris@0
|
19 ->makeReturnByRef()
|
Chris@0
|
20 ->getNode()
|
Chris@0
|
21 ;
|
Chris@0
|
22
|
Chris@0
|
23 $this->assertEquals(
|
Chris@0
|
24 new Stmt\Function_('test', array(
|
Chris@0
|
25 'byRef' => true
|
Chris@0
|
26 )),
|
Chris@0
|
27 $node
|
Chris@0
|
28 );
|
Chris@0
|
29 }
|
Chris@0
|
30
|
Chris@0
|
31 public function testParams() {
|
Chris@0
|
32 $param1 = new Node\Param('test1');
|
Chris@0
|
33 $param2 = new Node\Param('test2');
|
Chris@0
|
34 $param3 = new Node\Param('test3');
|
Chris@0
|
35
|
Chris@0
|
36 $node = $this->createFunctionBuilder('test')
|
Chris@0
|
37 ->addParam($param1)
|
Chris@0
|
38 ->addParams(array($param2, $param3))
|
Chris@0
|
39 ->getNode()
|
Chris@0
|
40 ;
|
Chris@0
|
41
|
Chris@0
|
42 $this->assertEquals(
|
Chris@0
|
43 new Stmt\Function_('test', array(
|
Chris@0
|
44 'params' => array($param1, $param2, $param3)
|
Chris@0
|
45 )),
|
Chris@0
|
46 $node
|
Chris@0
|
47 );
|
Chris@0
|
48 }
|
Chris@0
|
49
|
Chris@0
|
50 public function testStmts() {
|
Chris@0
|
51 $stmt1 = new Print_(new String_('test1'));
|
Chris@0
|
52 $stmt2 = new Print_(new String_('test2'));
|
Chris@0
|
53 $stmt3 = new Print_(new String_('test3'));
|
Chris@0
|
54
|
Chris@0
|
55 $node = $this->createFunctionBuilder('test')
|
Chris@0
|
56 ->addStmt($stmt1)
|
Chris@0
|
57 ->addStmts(array($stmt2, $stmt3))
|
Chris@0
|
58 ->getNode()
|
Chris@0
|
59 ;
|
Chris@0
|
60
|
Chris@0
|
61 $this->assertEquals(
|
Chris@0
|
62 new Stmt\Function_('test', array(
|
Chris@0
|
63 'stmts' => array($stmt1, $stmt2, $stmt3)
|
Chris@0
|
64 )),
|
Chris@0
|
65 $node
|
Chris@0
|
66 );
|
Chris@0
|
67 }
|
Chris@0
|
68
|
Chris@0
|
69 public function testDocComment() {
|
Chris@0
|
70 $node = $this->createFunctionBuilder('test')
|
Chris@0
|
71 ->setDocComment('/** Test */')
|
Chris@0
|
72 ->getNode();
|
Chris@0
|
73
|
Chris@0
|
74 $this->assertEquals(new Stmt\Function_('test', array(), array(
|
Chris@0
|
75 'comments' => array(new Comment\Doc('/** Test */'))
|
Chris@0
|
76 )), $node);
|
Chris@0
|
77 }
|
Chris@0
|
78
|
Chris@0
|
79 public function testReturnType() {
|
Chris@0
|
80 $node = $this->createFunctionBuilder('test')
|
Chris@0
|
81 ->setReturnType('void')
|
Chris@0
|
82 ->getNode();
|
Chris@0
|
83
|
Chris@0
|
84 $this->assertEquals(new Stmt\Function_('test', array(
|
Chris@0
|
85 'returnType' => 'void'
|
Chris@0
|
86 ), array()), $node);
|
Chris@0
|
87 }
|
Chris@0
|
88
|
Chris@0
|
89 /**
|
Chris@0
|
90 * @expectedException \LogicException
|
Chris@0
|
91 * @expectedExceptionMessage void type cannot be nullable
|
Chris@0
|
92 */
|
Chris@0
|
93 public function testInvalidNullableVoidType() {
|
Chris@0
|
94 $this->createFunctionBuilder('test')->setReturnType('?void');
|
Chris@0
|
95 }
|
Chris@0
|
96
|
Chris@0
|
97 /**
|
Chris@0
|
98 * @expectedException \LogicException
|
Chris@0
|
99 * @expectedExceptionMessage Expected parameter node, got "Name"
|
Chris@0
|
100 */
|
Chris@0
|
101 public function testInvalidParamError() {
|
Chris@0
|
102 $this->createFunctionBuilder('test')
|
Chris@0
|
103 ->addParam(new Node\Name('foo'))
|
Chris@0
|
104 ;
|
Chris@0
|
105 }
|
Chris@0
|
106 }
|