Chris@13
|
1 <?php declare(strict_types=1);
|
Chris@0
|
2
|
Chris@0
|
3 namespace PhpParser;
|
Chris@0
|
4
|
Chris@17
|
5 class NodeDumperTest extends \PHPUnit\Framework\TestCase
|
Chris@0
|
6 {
|
Chris@0
|
7 private function canonicalize($string) {
|
Chris@0
|
8 return str_replace("\r\n", "\n", $string);
|
Chris@0
|
9 }
|
Chris@0
|
10
|
Chris@0
|
11 /**
|
Chris@0
|
12 * @dataProvider provideTestDump
|
Chris@0
|
13 */
|
Chris@0
|
14 public function testDump($node, $dump) {
|
Chris@0
|
15 $dumper = new NodeDumper;
|
Chris@0
|
16
|
Chris@0
|
17 $this->assertSame($this->canonicalize($dump), $this->canonicalize($dumper->dump($node)));
|
Chris@0
|
18 }
|
Chris@0
|
19
|
Chris@0
|
20 public function provideTestDump() {
|
Chris@13
|
21 return [
|
Chris@13
|
22 [
|
Chris@13
|
23 [],
|
Chris@0
|
24 'array(
|
Chris@0
|
25 )'
|
Chris@13
|
26 ],
|
Chris@13
|
27 [
|
Chris@13
|
28 ['Foo', 'Bar', 'Key' => 'FooBar'],
|
Chris@0
|
29 'array(
|
Chris@0
|
30 0: Foo
|
Chris@0
|
31 1: Bar
|
Chris@0
|
32 Key: FooBar
|
Chris@0
|
33 )'
|
Chris@13
|
34 ],
|
Chris@13
|
35 [
|
Chris@13
|
36 new Node\Name(['Hallo', 'World']),
|
Chris@0
|
37 'Name(
|
Chris@0
|
38 parts: array(
|
Chris@0
|
39 0: Hallo
|
Chris@0
|
40 1: World
|
Chris@0
|
41 )
|
Chris@0
|
42 )'
|
Chris@13
|
43 ],
|
Chris@13
|
44 [
|
Chris@13
|
45 new Node\Expr\Array_([
|
Chris@0
|
46 new Node\Expr\ArrayItem(new Node\Scalar\String_('Foo'))
|
Chris@13
|
47 ]),
|
Chris@0
|
48 'Expr_Array(
|
Chris@0
|
49 items: array(
|
Chris@0
|
50 0: Expr_ArrayItem(
|
Chris@0
|
51 key: null
|
Chris@0
|
52 value: Scalar_String(
|
Chris@0
|
53 value: Foo
|
Chris@0
|
54 )
|
Chris@0
|
55 byRef: false
|
Chris@0
|
56 )
|
Chris@0
|
57 )
|
Chris@0
|
58 )'
|
Chris@13
|
59 ],
|
Chris@13
|
60 ];
|
Chris@0
|
61 }
|
Chris@0
|
62
|
Chris@0
|
63 public function testDumpWithPositions() {
|
Chris@0
|
64 $parser = (new ParserFactory)->create(
|
Chris@0
|
65 ParserFactory::ONLY_PHP7,
|
Chris@0
|
66 new Lexer(['usedAttributes' => ['startLine', 'endLine', 'startFilePos', 'endFilePos']])
|
Chris@0
|
67 );
|
Chris@0
|
68 $dumper = new NodeDumper(['dumpPositions' => true]);
|
Chris@0
|
69
|
Chris@0
|
70 $code = "<?php\n\$a = 1;\necho \$a;";
|
Chris@0
|
71 $expected = <<<'OUT'
|
Chris@0
|
72 array(
|
Chris@13
|
73 0: Stmt_Expression[2:1 - 2:7](
|
Chris@13
|
74 expr: Expr_Assign[2:1 - 2:6](
|
Chris@13
|
75 var: Expr_Variable[2:1 - 2:2](
|
Chris@13
|
76 name: a
|
Chris@13
|
77 )
|
Chris@13
|
78 expr: Scalar_LNumber[2:6 - 2:6](
|
Chris@13
|
79 value: 1
|
Chris@13
|
80 )
|
Chris@0
|
81 )
|
Chris@0
|
82 )
|
Chris@0
|
83 1: Stmt_Echo[3:1 - 3:8](
|
Chris@0
|
84 exprs: array(
|
Chris@0
|
85 0: Expr_Variable[3:6 - 3:7](
|
Chris@0
|
86 name: a
|
Chris@0
|
87 )
|
Chris@0
|
88 )
|
Chris@0
|
89 )
|
Chris@0
|
90 )
|
Chris@0
|
91 OUT;
|
Chris@0
|
92
|
Chris@0
|
93 $stmts = $parser->parse($code);
|
Chris@0
|
94 $dump = $dumper->dump($stmts, $code);
|
Chris@0
|
95
|
Chris@0
|
96 $this->assertSame($this->canonicalize($expected), $this->canonicalize($dump));
|
Chris@0
|
97 }
|
Chris@0
|
98
|
Chris@0
|
99 public function testError() {
|
Chris@17
|
100 $this->expectException(\InvalidArgumentException::class);
|
Chris@17
|
101 $this->expectExceptionMessage('Can only dump nodes and arrays.');
|
Chris@0
|
102 $dumper = new NodeDumper;
|
Chris@0
|
103 $dumper->dump(new \stdClass);
|
Chris@0
|
104 }
|
Chris@0
|
105 }
|