de8f4ce63f6261da91bb4c6fe50738172fa85c83
[yaffs-website] / vendor / nikic / php-parser / test / PhpParser / Builder / PropertyTest.php
1 <?php
2
3 namespace PhpParser\Builder;
4
5 use PhpParser\Comment;
6 use PhpParser\Node\Expr;
7 use PhpParser\Node\Name;
8 use PhpParser\Node\Scalar;
9 use PhpParser\Node\Stmt;
10
11 class PropertyTest extends \PHPUnit_Framework_TestCase
12 {
13     public function createPropertyBuilder($name) {
14         return new Property($name);
15     }
16
17     public function testModifiers() {
18         $node = $this->createPropertyBuilder('test')
19             ->makePrivate()
20             ->makeStatic()
21             ->getNode()
22         ;
23
24         $this->assertEquals(
25             new Stmt\Property(
26                 Stmt\Class_::MODIFIER_PRIVATE
27               | Stmt\Class_::MODIFIER_STATIC,
28                 array(
29                     new Stmt\PropertyProperty('test')
30                 )
31             ),
32             $node
33         );
34
35         $node = $this->createPropertyBuilder('test')
36             ->makeProtected()
37             ->getNode()
38         ;
39
40         $this->assertEquals(
41             new Stmt\Property(
42                 Stmt\Class_::MODIFIER_PROTECTED,
43                 array(
44                     new Stmt\PropertyProperty('test')
45                 )
46             ),
47             $node
48         );
49
50         $node = $this->createPropertyBuilder('test')
51             ->makePublic()
52             ->getNode()
53         ;
54
55         $this->assertEquals(
56             new Stmt\Property(
57                 Stmt\Class_::MODIFIER_PUBLIC,
58                 array(
59                     new Stmt\PropertyProperty('test')
60                 )
61             ),
62             $node
63         );
64     }
65
66     public function testDocComment() {
67         $node = $this->createPropertyBuilder('test')
68             ->setDocComment('/** Test */')
69             ->getNode();
70
71         $this->assertEquals(new Stmt\Property(
72             Stmt\Class_::MODIFIER_PUBLIC,
73             array(
74                 new Stmt\PropertyProperty('test')
75             ),
76             array(
77                 'comments' => array(new Comment\Doc('/** Test */'))
78             )
79         ), $node);
80     }
81
82     /**
83      * @dataProvider provideTestDefaultValues
84      */
85     public function testDefaultValues($value, $expectedValueNode) {
86         $node = $this->createPropertyBuilder('test')
87             ->setDefault($value)
88             ->getNode()
89         ;
90
91         $this->assertEquals($expectedValueNode, $node->props[0]->default);
92     }
93
94     public function provideTestDefaultValues() {
95         return array(
96             array(
97                 null,
98                 new Expr\ConstFetch(new Name('null'))
99             ),
100             array(
101                 true,
102                 new Expr\ConstFetch(new Name('true'))
103             ),
104             array(
105                 false,
106                 new Expr\ConstFetch(new Name('false'))
107             ),
108             array(
109                 31415,
110                 new Scalar\LNumber(31415)
111             ),
112             array(
113                 3.1415,
114                 new Scalar\DNumber(3.1415)
115             ),
116             array(
117                 'Hallo World',
118                 new Scalar\String_('Hallo World')
119             ),
120             array(
121                 array(1, 2, 3),
122                 new Expr\Array_(array(
123                     new Expr\ArrayItem(new Scalar\LNumber(1)),
124                     new Expr\ArrayItem(new Scalar\LNumber(2)),
125                     new Expr\ArrayItem(new Scalar\LNumber(3)),
126                 ))
127             ),
128             array(
129                 array('foo' => 'bar', 'bar' => 'foo'),
130                 new Expr\Array_(array(
131                     new Expr\ArrayItem(
132                         new Scalar\String_('bar'),
133                         new Scalar\String_('foo')
134                     ),
135                     new Expr\ArrayItem(
136                         new Scalar\String_('foo'),
137                         new Scalar\String_('bar')
138                     ),
139                 ))
140             ),
141             array(
142                 new Scalar\MagicConst\Dir,
143                 new Scalar\MagicConst\Dir
144             )
145         );
146     }
147 }