annotate vendor/nikic/php-parser/test/PhpParser/NodeDumperTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
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 }