mirror of
https://github.com/phabelio/PHP-Parser.git
synced 2024-12-04 02:17:56 +01:00
588e6a4d4c
Scalar\String_ and Scalar\Encapsed now have an additional "kind" attribute, which may be one of: * String_::KIND_SINGLE_QUOTED * String_::KIND_DOUBLE_QUOTED * String_::KIND_NOWDOC * String_::KIND_HEREDOC Additionally, if the string kind is one of the latter two, an attribute "docLabel" is provided, which contains the doc string label (STR in <<<STR) that was originally used. The pretty printer will try to take the original kind of the string, as well as the used doc string label into account.
173 lines
4.6 KiB
PHP
173 lines
4.6 KiB
PHP
<?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));
|
|
}
|
|
}
|