annotate vendor/nikic/php-parser/test/PhpParser/Serializer/XMLTest.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children
rev   line source
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 }