152 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
class PHPParser_Tests_Serializer_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:comments>
 | 
						|
    <scalar:array>
 | 
						|
     <comment isDocComment="false" line="2">// comment
 | 
						|
</comment>
 | 
						|
     <comment isDocComment="true" line="3">/** doc comment */</comment>
 | 
						|
    </scalar:array>
 | 
						|
   </attribute:comments>
 | 
						|
   <attribute:startLine>
 | 
						|
    <scalar:int>4</scalar:int>
 | 
						|
   </attribute:startLine>
 | 
						|
   <attribute:endLine>
 | 
						|
    <scalar:int>6</scalar:int>
 | 
						|
   </attribute:endLine>
 | 
						|
   <subNode:byRef>
 | 
						|
    <scalar:false/>
 | 
						|
   </subNode:byRef>
 | 
						|
   <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: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>
 | 
						|
        <subNode:value>
 | 
						|
         <scalar:int>0</scalar:int>
 | 
						|
        </subNode:value>
 | 
						|
       </node:Scalar_LNumber>
 | 
						|
      </subNode:default>
 | 
						|
      <subNode:type>
 | 
						|
       <scalar:null/>
 | 
						|
      </subNode:type>
 | 
						|
      <subNode:byRef>
 | 
						|
       <scalar:true/>
 | 
						|
      </subNode:byRef>
 | 
						|
     </node:Param>
 | 
						|
     <node:Param>
 | 
						|
      <attribute:startLine>
 | 
						|
       <scalar:int>4</scalar:int>
 | 
						|
      </attribute:startLine>
 | 
						|
      <attribute:endLine>
 | 
						|
       <scalar:int>4</scalar:int>
 | 
						|
      </attribute:endLine>
 | 
						|
      <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>
 | 
						|
      <subNode:type>
 | 
						|
       <scalar:null/>
 | 
						|
      </subNode:type>
 | 
						|
      <subNode:byRef>
 | 
						|
       <scalar:false/>
 | 
						|
      </subNode:byRef>
 | 
						|
     </node:Param>
 | 
						|
    </scalar:array>
 | 
						|
   </subNode:params>
 | 
						|
   <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>
 | 
						|
         <subNode:value>
 | 
						|
          <scalar:string>Foo</scalar:string>
 | 
						|
         </subNode:value>
 | 
						|
        </node:Scalar_String>
 | 
						|
       </scalar:array>
 | 
						|
      </subNode:exprs>
 | 
						|
     </node:Stmt_Echo>
 | 
						|
    </scalar:array>
 | 
						|
   </subNode:stmts>
 | 
						|
   <subNode:name>
 | 
						|
    <scalar:string>functionName</scalar:string>
 | 
						|
   </subNode:name>
 | 
						|
  </node:Stmt_Function>
 | 
						|
 </scalar:array>
 | 
						|
</AST>
 | 
						|
XML;
 | 
						|
 | 
						|
        $parser     = new PHPParser_Parser(new PHPParser_Lexer);
 | 
						|
        $serializer = new PHPParser_Serializer_XML;
 | 
						|
 | 
						|
        $stmts = $parser->parse($code);
 | 
						|
        $this->assertXmlStringEqualsXmlString($xml, $serializer->serialize($stmts));
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @expectedException        InvalidArgumentException
 | 
						|
     * @expectedExceptionMessage Unexpected node type
 | 
						|
     */
 | 
						|
    public function testError() {
 | 
						|
        $serializer = new PHPParser_Serializer_XML;
 | 
						|
        $serializer->serialize(array(new stdClass));
 | 
						|
    }
 | 
						|
} |