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