123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- <?php
- namespace PhpParser\Serializer;
- use PhpParser;
- class XMLTest extends \PHPUnit_Framework_TestCase
- {
- /**
- * @covers PhpParser\Serializer\XML<extended>
- */
- public function testSerialize() {
- $code = <<<CODE
- <?php
- // comment
- /** doc comment */
- function functionName(&\$a = 0, \$b = 1.0) {
- echo 'Foo';
- }
- CODE;
- $xml = <<<XML
- <?xml version="1.0" encoding="UTF-8"?>
- <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">
- <scalar:array>
- <node:Stmt_Function>
- <attribute:startLine>
- <scalar:int>4</scalar:int>
- </attribute:startLine>
- <attribute:comments>
- <scalar:array>
- <comment isDocComment="false" line="2">// comment
- </comment>
- <comment isDocComment="true" line="3">/** doc comment */</comment>
- </scalar:array>
- </attribute:comments>
- <attribute:endLine>
- <scalar:int>6</scalar:int>
- </attribute:endLine>
- <subNode:byRef>
- <scalar:false/>
- </subNode:byRef>
- <subNode:name>
- <scalar:string>functionName</scalar:string>
- </subNode:name>
- <subNode:params>
- <scalar:array>
- <node:Param>
- <attribute:startLine>
- <scalar:int>4</scalar:int>
- </attribute:startLine>
- <attribute:endLine>
- <scalar:int>4</scalar:int>
- </attribute:endLine>
- <subNode:type>
- <scalar:null/>
- </subNode:type>
- <subNode:byRef>
- <scalar:true/>
- </subNode:byRef>
- <subNode:variadic>
- <scalar:false/>
- </subNode:variadic>
- <subNode:name>
- <scalar:string>a</scalar:string>
- </subNode:name>
- <subNode:default>
- <node:Scalar_LNumber>
- <attribute:startLine>
- <scalar:int>4</scalar:int>
- </attribute:startLine>
- <attribute:endLine>
- <scalar:int>4</scalar:int>
- </attribute:endLine>
- <attribute:kind>
- <scalar:int>10</scalar:int>
- </attribute:kind>
- <subNode:value>
- <scalar:int>0</scalar:int>
- </subNode:value>
- </node:Scalar_LNumber>
- </subNode:default>
- </node:Param>
- <node:Param>
- <attribute:startLine>
- <scalar:int>4</scalar:int>
- </attribute:startLine>
- <attribute:endLine>
- <scalar:int>4</scalar:int>
- </attribute:endLine>
- <subNode:type>
- <scalar:null/>
- </subNode:type>
- <subNode:byRef>
- <scalar:false/>
- </subNode:byRef>
- <subNode:variadic>
- <scalar:false/>
- </subNode:variadic>
- <subNode:name>
- <scalar:string>b</scalar:string>
- </subNode:name>
- <subNode:default>
- <node:Scalar_DNumber>
- <attribute:startLine>
- <scalar:int>4</scalar:int>
- </attribute:startLine>
- <attribute:endLine>
- <scalar:int>4</scalar:int>
- </attribute:endLine>
- <subNode:value>
- <scalar:float>1</scalar:float>
- </subNode:value>
- </node:Scalar_DNumber>
- </subNode:default>
- </node:Param>
- </scalar:array>
- </subNode:params>
- <subNode:returnType>
- <scalar:null/>
- </subNode:returnType>
- <subNode:stmts>
- <scalar:array>
- <node:Stmt_Echo>
- <attribute:startLine>
- <scalar:int>5</scalar:int>
- </attribute:startLine>
- <attribute:endLine>
- <scalar:int>5</scalar:int>
- </attribute:endLine>
- <subNode:exprs>
- <scalar:array>
- <node:Scalar_String>
- <attribute:startLine>
- <scalar:int>5</scalar:int>
- </attribute:startLine>
- <attribute:endLine>
- <scalar:int>5</scalar:int>
- </attribute:endLine>
- <attribute:kind>
- <scalar:int>1</scalar:int>
- </attribute:kind>
- <subNode:value>
- <scalar:string>Foo</scalar:string>
- </subNode:value>
- </node:Scalar_String>
- </scalar:array>
- </subNode:exprs>
- </node:Stmt_Echo>
- </scalar:array>
- </subNode:stmts>
- </node:Stmt_Function>
- </scalar:array>
- </AST>
- XML;
- $parser = new PhpParser\Parser\Php7(new PhpParser\Lexer);
- $serializer = new XML;
- $code = str_replace("\r\n", "\n", $code);
- $stmts = $parser->parse($code);
- $this->assertXmlStringEqualsXmlString($xml, $serializer->serialize($stmts));
- }
- /**
- * @expectedException \InvalidArgumentException
- * @expectedExceptionMessage Unexpected node type
- */
- public function testError() {
- $serializer = new XML;
- $serializer->serialize(array(new \stdClass));
- }
- }
|