Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace PhpParser\Serializer;
|
Chris@0
|
4
|
Chris@0
|
5 use PhpParser;
|
Chris@0
|
6
|
Chris@0
|
7 class XMLTest extends \PHPUnit_Framework_TestCase
|
Chris@0
|
8 {
|
Chris@0
|
9 /**
|
Chris@0
|
10 * @covers PhpParser\Serializer\XML<extended>
|
Chris@0
|
11 */
|
Chris@0
|
12 public function testSerialize() {
|
Chris@0
|
13 $code = <<<CODE
|
Chris@0
|
14 <?php
|
Chris@0
|
15 // comment
|
Chris@0
|
16 /** doc comment */
|
Chris@0
|
17 function functionName(&\$a = 0, \$b = 1.0) {
|
Chris@0
|
18 echo 'Foo';
|
Chris@0
|
19 }
|
Chris@0
|
20 CODE;
|
Chris@0
|
21 $xml = <<<XML
|
Chris@0
|
22 <?xml version="1.0" encoding="UTF-8"?>
|
Chris@0
|
23 <AST xmlns:node="http://nikic.github.com/PHPParser/XML/node" xmlns:subNode="http://nikic.github.com/PHPParser/XML/subNode" xmlns:attribute="http://nikic.github.com/PHPParser/XML/attribute" xmlns:scalar="http://nikic.github.com/PHPParser/XML/scalar">
|
Chris@0
|
24 <scalar:array>
|
Chris@0
|
25 <node:Stmt_Function>
|
Chris@0
|
26 <attribute:startLine>
|
Chris@0
|
27 <scalar:int>4</scalar:int>
|
Chris@0
|
28 </attribute:startLine>
|
Chris@0
|
29 <attribute:comments>
|
Chris@0
|
30 <scalar:array>
|
Chris@0
|
31 <comment isDocComment="false" line="2">// comment
|
Chris@0
|
32 </comment>
|
Chris@0
|
33 <comment isDocComment="true" line="3">/** doc comment */</comment>
|
Chris@0
|
34 </scalar:array>
|
Chris@0
|
35 </attribute:comments>
|
Chris@0
|
36 <attribute:endLine>
|
Chris@0
|
37 <scalar:int>6</scalar:int>
|
Chris@0
|
38 </attribute:endLine>
|
Chris@0
|
39 <subNode:byRef>
|
Chris@0
|
40 <scalar:false/>
|
Chris@0
|
41 </subNode:byRef>
|
Chris@0
|
42 <subNode:name>
|
Chris@0
|
43 <scalar:string>functionName</scalar:string>
|
Chris@0
|
44 </subNode:name>
|
Chris@0
|
45 <subNode:params>
|
Chris@0
|
46 <scalar:array>
|
Chris@0
|
47 <node:Param>
|
Chris@0
|
48 <attribute:startLine>
|
Chris@0
|
49 <scalar:int>4</scalar:int>
|
Chris@0
|
50 </attribute:startLine>
|
Chris@0
|
51 <attribute:endLine>
|
Chris@0
|
52 <scalar:int>4</scalar:int>
|
Chris@0
|
53 </attribute:endLine>
|
Chris@0
|
54 <subNode:type>
|
Chris@0
|
55 <scalar:null/>
|
Chris@0
|
56 </subNode:type>
|
Chris@0
|
57 <subNode:byRef>
|
Chris@0
|
58 <scalar:true/>
|
Chris@0
|
59 </subNode:byRef>
|
Chris@0
|
60 <subNode:variadic>
|
Chris@0
|
61 <scalar:false/>
|
Chris@0
|
62 </subNode:variadic>
|
Chris@0
|
63 <subNode:name>
|
Chris@0
|
64 <scalar:string>a</scalar:string>
|
Chris@0
|
65 </subNode:name>
|
Chris@0
|
66 <subNode:default>
|
Chris@0
|
67 <node:Scalar_LNumber>
|
Chris@0
|
68 <attribute:startLine>
|
Chris@0
|
69 <scalar:int>4</scalar:int>
|
Chris@0
|
70 </attribute:startLine>
|
Chris@0
|
71 <attribute:endLine>
|
Chris@0
|
72 <scalar:int>4</scalar:int>
|
Chris@0
|
73 </attribute:endLine>
|
Chris@0
|
74 <attribute:kind>
|
Chris@0
|
75 <scalar:int>10</scalar:int>
|
Chris@0
|
76 </attribute:kind>
|
Chris@0
|
77 <subNode:value>
|
Chris@0
|
78 <scalar:int>0</scalar:int>
|
Chris@0
|
79 </subNode:value>
|
Chris@0
|
80 </node:Scalar_LNumber>
|
Chris@0
|
81 </subNode:default>
|
Chris@0
|
82 </node:Param>
|
Chris@0
|
83 <node:Param>
|
Chris@0
|
84 <attribute:startLine>
|
Chris@0
|
85 <scalar:int>4</scalar:int>
|
Chris@0
|
86 </attribute:startLine>
|
Chris@0
|
87 <attribute:endLine>
|
Chris@0
|
88 <scalar:int>4</scalar:int>
|
Chris@0
|
89 </attribute:endLine>
|
Chris@0
|
90 <subNode:type>
|
Chris@0
|
91 <scalar:null/>
|
Chris@0
|
92 </subNode:type>
|
Chris@0
|
93 <subNode:byRef>
|
Chris@0
|
94 <scalar:false/>
|
Chris@0
|
95 </subNode:byRef>
|
Chris@0
|
96 <subNode:variadic>
|
Chris@0
|
97 <scalar:false/>
|
Chris@0
|
98 </subNode:variadic>
|
Chris@0
|
99 <subNode:name>
|
Chris@0
|
100 <scalar:string>b</scalar:string>
|
Chris@0
|
101 </subNode:name>
|
Chris@0
|
102 <subNode:default>
|
Chris@0
|
103 <node:Scalar_DNumber>
|
Chris@0
|
104 <attribute:startLine>
|
Chris@0
|
105 <scalar:int>4</scalar:int>
|
Chris@0
|
106 </attribute:startLine>
|
Chris@0
|
107 <attribute:endLine>
|
Chris@0
|
108 <scalar:int>4</scalar:int>
|
Chris@0
|
109 </attribute:endLine>
|
Chris@0
|
110 <subNode:value>
|
Chris@0
|
111 <scalar:float>1</scalar:float>
|
Chris@0
|
112 </subNode:value>
|
Chris@0
|
113 </node:Scalar_DNumber>
|
Chris@0
|
114 </subNode:default>
|
Chris@0
|
115 </node:Param>
|
Chris@0
|
116 </scalar:array>
|
Chris@0
|
117 </subNode:params>
|
Chris@0
|
118 <subNode:returnType>
|
Chris@0
|
119 <scalar:null/>
|
Chris@0
|
120 </subNode:returnType>
|
Chris@0
|
121 <subNode:stmts>
|
Chris@0
|
122 <scalar:array>
|
Chris@0
|
123 <node:Stmt_Echo>
|
Chris@0
|
124 <attribute:startLine>
|
Chris@0
|
125 <scalar:int>5</scalar:int>
|
Chris@0
|
126 </attribute:startLine>
|
Chris@0
|
127 <attribute:endLine>
|
Chris@0
|
128 <scalar:int>5</scalar:int>
|
Chris@0
|
129 </attribute:endLine>
|
Chris@0
|
130 <subNode:exprs>
|
Chris@0
|
131 <scalar:array>
|
Chris@0
|
132 <node:Scalar_String>
|
Chris@0
|
133 <attribute:startLine>
|
Chris@0
|
134 <scalar:int>5</scalar:int>
|
Chris@0
|
135 </attribute:startLine>
|
Chris@0
|
136 <attribute:endLine>
|
Chris@0
|
137 <scalar:int>5</scalar:int>
|
Chris@0
|
138 </attribute:endLine>
|
Chris@0
|
139 <attribute:kind>
|
Chris@0
|
140 <scalar:int>1</scalar:int>
|
Chris@0
|
141 </attribute:kind>
|
Chris@0
|
142 <subNode:value>
|
Chris@0
|
143 <scalar:string>Foo</scalar:string>
|
Chris@0
|
144 </subNode:value>
|
Chris@0
|
145 </node:Scalar_String>
|
Chris@0
|
146 </scalar:array>
|
Chris@0
|
147 </subNode:exprs>
|
Chris@0
|
148 </node:Stmt_Echo>
|
Chris@0
|
149 </scalar:array>
|
Chris@0
|
150 </subNode:stmts>
|
Chris@0
|
151 </node:Stmt_Function>
|
Chris@0
|
152 </scalar:array>
|
Chris@0
|
153 </AST>
|
Chris@0
|
154 XML;
|
Chris@0
|
155
|
Chris@0
|
156 $parser = new PhpParser\Parser\Php7(new PhpParser\Lexer);
|
Chris@0
|
157 $serializer = new XML;
|
Chris@0
|
158
|
Chris@0
|
159 $code = str_replace("\r\n", "\n", $code);
|
Chris@0
|
160 $stmts = $parser->parse($code);
|
Chris@0
|
161 $this->assertXmlStringEqualsXmlString($xml, $serializer->serialize($stmts));
|
Chris@0
|
162 }
|
Chris@0
|
163
|
Chris@0
|
164 /**
|
Chris@0
|
165 * @expectedException \InvalidArgumentException
|
Chris@0
|
166 * @expectedExceptionMessage Unexpected node type
|
Chris@0
|
167 */
|
Chris@0
|
168 public function testError() {
|
Chris@0
|
169 $serializer = new XML;
|
Chris@0
|
170 $serializer->serialize(array(new \stdClass));
|
Chris@0
|
171 }
|
Chris@0
|
172 }
|