2017-11-02 18:56:01 +01:00
|
|
|
<?php declare(strict_types=1);
|
2011-07-13 23:07:05 +02:00
|
|
|
|
2014-02-06 14:44:16 +01:00
|
|
|
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
|
|
|
{
|
2015-03-20 21:47:20 +01: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) {
|
2014-02-06 14:44:16 +01:00
|
|
|
$dumper = new NodeDumper;
|
2011-07-13 23:07:05 +02:00
|
|
|
|
2015-03-20 21:47:20 +01: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_([
|
2015-03-20 21:47:20 +01:00
|
|
|
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(
|
2011-08-11 08:13:01 +02:00
|
|
|
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
|
|
|
|
2016-11-23 22:25:17 +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(
|
2017-01-19 21:15:26 +01:00
|
|
|
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
|
|
|
|
)
|
2016-11-23 22:25:17 +01:00
|
|
|
)
|
|
|
|
)
|
|
|
|
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
|
|
|
public function testError() {
|
2018-09-22 10:43:54 +02:00
|
|
|
$this->expectException(\InvalidArgumentException::class);
|
|
|
|
$this->expectExceptionMessage('Can only dump nodes and arrays.');
|
2014-02-06 14:44:16 +01:00
|
|
|
$dumper = new NodeDumper;
|
|
|
|
$dumper->dump(new \stdClass);
|
2011-11-27 21:43:27 +01:00
|
|
|
}
|
2015-03-20 21:47:20 +01:00
|
|
|
}
|