annotate vendor/nikic/php-parser/test/PhpParser/NodeDumperTest.php @ 13:5fb285c0d0e3

Update Drupal core to 8.4.7 via Composer. Security update; I *think* we've been lucky to get away with this so far, as we don't support self-registration which seems to be used by the so-called "drupalgeddon 2" attack that 8.4.5 was vulnerable to.
author Chris Cannam
date Mon, 23 Apr 2018 09:33:26 +0100
parents 4c8ae668cc8c
children 129ea1e6d783
rev   line source
Chris@13 1 <?php declare(strict_types=1);
Chris@0 2
Chris@0 3 namespace PhpParser;
Chris@0 4
Chris@13 5 use PHPUnit\Framework\TestCase;
Chris@13 6
Chris@13 7 class NodeDumperTest extends TestCase
Chris@0 8 {
Chris@0 9 private function canonicalize($string) {
Chris@0 10 return str_replace("\r\n", "\n", $string);
Chris@0 11 }
Chris@0 12
Chris@0 13 /**
Chris@0 14 * @dataProvider provideTestDump
Chris@0 15 */
Chris@0 16 public function testDump($node, $dump) {
Chris@0 17 $dumper = new NodeDumper;
Chris@0 18
Chris@0 19 $this->assertSame($this->canonicalize($dump), $this->canonicalize($dumper->dump($node)));
Chris@0 20 }
Chris@0 21
Chris@0 22 public function provideTestDump() {
Chris@13 23 return [
Chris@13 24 [
Chris@13 25 [],
Chris@0 26 'array(
Chris@0 27 )'
Chris@13 28 ],
Chris@13 29 [
Chris@13 30 ['Foo', 'Bar', 'Key' => 'FooBar'],
Chris@0 31 'array(
Chris@0 32 0: Foo
Chris@0 33 1: Bar
Chris@0 34 Key: FooBar
Chris@0 35 )'
Chris@13 36 ],
Chris@13 37 [
Chris@13 38 new Node\Name(['Hallo', 'World']),
Chris@0 39 'Name(
Chris@0 40 parts: array(
Chris@0 41 0: Hallo
Chris@0 42 1: World
Chris@0 43 )
Chris@0 44 )'
Chris@13 45 ],
Chris@13 46 [
Chris@13 47 new Node\Expr\Array_([
Chris@0 48 new Node\Expr\ArrayItem(new Node\Scalar\String_('Foo'))
Chris@13 49 ]),
Chris@0 50 'Expr_Array(
Chris@0 51 items: array(
Chris@0 52 0: Expr_ArrayItem(
Chris@0 53 key: null
Chris@0 54 value: Scalar_String(
Chris@0 55 value: Foo
Chris@0 56 )
Chris@0 57 byRef: false
Chris@0 58 )
Chris@0 59 )
Chris@0 60 )'
Chris@13 61 ],
Chris@13 62 ];
Chris@0 63 }
Chris@0 64
Chris@0 65 public function testDumpWithPositions() {
Chris@0 66 $parser = (new ParserFactory)->create(
Chris@0 67 ParserFactory::ONLY_PHP7,
Chris@0 68 new Lexer(['usedAttributes' => ['startLine', 'endLine', 'startFilePos', 'endFilePos']])
Chris@0 69 );
Chris@0 70 $dumper = new NodeDumper(['dumpPositions' => true]);
Chris@0 71
Chris@0 72 $code = "<?php\n\$a = 1;\necho \$a;";
Chris@0 73 $expected = <<<'OUT'
Chris@0 74 array(
Chris@13 75 0: Stmt_Expression[2:1 - 2:7](
Chris@13 76 expr: Expr_Assign[2:1 - 2:6](
Chris@13 77 var: Expr_Variable[2:1 - 2:2](
Chris@13 78 name: a
Chris@13 79 )
Chris@13 80 expr: Scalar_LNumber[2:6 - 2:6](
Chris@13 81 value: 1
Chris@13 82 )
Chris@0 83 )
Chris@0 84 )
Chris@0 85 1: Stmt_Echo[3:1 - 3:8](
Chris@0 86 exprs: array(
Chris@0 87 0: Expr_Variable[3:6 - 3:7](
Chris@0 88 name: a
Chris@0 89 )
Chris@0 90 )
Chris@0 91 )
Chris@0 92 )
Chris@0 93 OUT;
Chris@0 94
Chris@0 95 $stmts = $parser->parse($code);
Chris@0 96 $dump = $dumper->dump($stmts, $code);
Chris@0 97
Chris@0 98 $this->assertSame($this->canonicalize($expected), $this->canonicalize($dump));
Chris@0 99 }
Chris@0 100
Chris@0 101 /**
Chris@0 102 * @expectedException \InvalidArgumentException
Chris@0 103 * @expectedExceptionMessage Can only dump nodes and arrays.
Chris@0 104 */
Chris@0 105 public function testError() {
Chris@0 106 $dumper = new NodeDumper;
Chris@0 107 $dumper->dump(new \stdClass);
Chris@0 108 }
Chris@0 109 }