php-parser/test/PhpParser/NodeDumperTest.php

110 lines
2.4 KiB
PHP
Raw Normal View History

2011-07-13 23:07:05 +02:00
<?php
namespace PhpParser;
2017-04-27 18:14:07 +02:00
use PHPUnit\Framework\TestCase;
class NodeDumperTest extends TestCase
2011-07-13 23:07:05 +02:00
{
private function canonicalize($string) {
return str_replace("\r\n", "\n", $string);
}
2011-07-13 23:07:05 +02:00
/**
* @dataProvider provideTestDump
*/
public function testDump($node, $dump) {
$dumper = new NodeDumper;
2011-07-13 23:07:05 +02:00
$this->assertSame($this->canonicalize($dump), $this->canonicalize($dumper->dump($node)));
2011-07-13 23:07:05 +02:00
}
public function provideTestDump() {
2017-08-13 14:35:03 +02:00
return [
[
[],
2011-07-13 23:07:05 +02:00
'array(
)'
2017-08-13 14:35:03 +02:00
],
[
['Foo', 'Bar', 'Key' => 'FooBar'],
2011-07-13 23:07:05 +02:00
'array(
0: Foo
1: Bar
Key: FooBar
)'
2017-08-13 14:35:03 +02:00
],
[
new Node\Name(['Hallo', 'World']),
2011-07-13 23:07:05 +02:00
'Name(
parts: array(
0: Hallo
1: World
)
)'
2017-08-13 14:35:03 +02:00
],
[
new Node\Expr\Array_([
new Node\Expr\ArrayItem(new Node\Scalar\String_('Foo'))
2017-08-13 14:35:03 +02:00
]),
2011-07-13 23:07:05 +02:00
'Expr_Array(
items: array(
0: Expr_ArrayItem(
key: null
value: Scalar_String(
value: Foo
)
2011-07-13 23:07:05 +02:00
byRef: false
)
)
)'
2017-08-13 14:35:03 +02:00
],
];
2011-07-13 23:07:05 +02:00
}
2011-11-27 21:43:27 +01:00
public function testDumpWithPositions() {
$parser = (new ParserFactory)->create(
ParserFactory::ONLY_PHP7,
new Lexer(['usedAttributes' => ['startLine', 'endLine', 'startFilePos', 'endFilePos']])
);
$dumper = new NodeDumper(['dumpPositions' => true]);
$code = "<?php\n\$a = 1;\necho \$a;";
$expected = <<<'OUT'
array(
0: Stmt_Expression[2:1 - 2:7](
expr: Expr_Assign[2:1 - 2:6](
var: Expr_Variable[2:1 - 2:2](
name: a
)
expr: Scalar_LNumber[2:6 - 2:6](
value: 1
)
)
)
1: Stmt_Echo[3:1 - 3:8](
exprs: array(
0: Expr_Variable[3:6 - 3:7](
name: a
)
)
)
)
OUT;
$stmts = $parser->parse($code);
$dump = $dumper->dump($stmts, $code);
$this->assertSame($this->canonicalize($expected), $this->canonicalize($dump));
}
2011-11-27 21:43:27 +01:00
/**
* @expectedException \InvalidArgumentException
2011-11-27 21:43:27 +01:00
* @expectedExceptionMessage Can only dump nodes and arrays.
*/
public function testError() {
$dumper = new NodeDumper;
$dumper->dump(new \stdClass);
2011-11-27 21:43:27 +01:00
}
}