Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / nikic / php-parser / test / PhpParser / ParserTest.php
index 0dabba216dd899d1887bcf43d194157165eb011b..9c4412dc19b29568ac82ac7bdd736af13c480efe 100644 (file)
@@ -1,13 +1,14 @@
-<?php
+<?php declare(strict_types=1);
 
 namespace PhpParser;
 
-use PhpParser\Comment;
 use PhpParser\Node\Expr;
 use PhpParser\Node\Scalar;
 use PhpParser\Node\Scalar\String_;
+use PhpParser\Node\Stmt;
+use PHPUnit\Framework\TestCase;
 
-abstract class ParserTest extends \PHPUnit_Framework_TestCase
+abstract class ParserTest extends TestCase
 {
     /** @returns Parser */
     abstract protected function getParser(Lexer $lexer);
@@ -40,12 +41,12 @@ abstract class ParserTest extends \PHPUnit_Framework_TestCase
     }
 
     public function testAttributeAssignment() {
-        $lexer = new Lexer(array(
-            'usedAttributes' => array(
+        $lexer = new Lexer([
+            'usedAttributes' => [
                 'comments', 'startLine', 'endLine',
                 'startTokenPos', 'endTokenPos',
-            )
-        ));
+            ]
+        ]);
 
         $code = <<<'EOC'
 <?php
@@ -61,51 +62,51 @@ EOC;
         $parser = $this->getParser($lexer);
         $stmts = $parser->parse($code);
 
-        /** @var \PhpParser\Node\Stmt\Function_ $fn */
+        /** @var Stmt\Function_ $fn */
         $fn = $stmts[0];
-        $this->assertInstanceOf('PhpParser\Node\Stmt\Function_', $fn);
-        $this->assertEquals(array(
-            'comments' => array(
-                new Comment\Doc('/** Doc comment */', 2, 6),
-            ),
+        $this->assertInstanceOf(Stmt\Function_::class, $fn);
+        $this->assertEquals([
+            'comments' => [
+                new Comment\Doc('/** Doc comment */', 2, 6, 1),
+            ],
             'startLine' => 3,
             'endLine' => 7,
             'startTokenPos' => 3,
             'endTokenPos' => 21,
-        ), $fn->getAttributes());
+        ], $fn->getAttributes());
 
         $param = $fn->params[0];
-        $this->assertInstanceOf('PhpParser\Node\Param', $param);
-        $this->assertEquals(array(
+        $this->assertInstanceOf(Node\Param::class, $param);
+        $this->assertEquals([
             'startLine' => 3,
             'endLine' => 3,
             'startTokenPos' => 7,
             'endTokenPos' => 7,
-        ), $param->getAttributes());
+        ], $param->getAttributes());
 
-        /** @var \PhpParser\Node\Stmt\Echo_ $echo */
+        /** @var Stmt\Echo_ $echo */
         $echo = $fn->stmts[0];
-        $this->assertInstanceOf('PhpParser\Node\Stmt\Echo_', $echo);
-        $this->assertEquals(array(
-            'comments' => array(
-                new Comment("// Line\n", 4, 49),
-                new Comment("// Comments\n", 5, 61),
-            ),
+        $this->assertInstanceOf(Stmt\Echo_::class, $echo);
+        $this->assertEquals([
+            'comments' => [
+                new Comment("// Line\n", 4, 49, 12),
+                new Comment("// Comments\n", 5, 61, 14),
+            ],
             'startLine' => 6,
             'endLine' => 6,
             'startTokenPos' => 16,
             'endTokenPos' => 19,
-        ), $echo->getAttributes());
+        ], $echo->getAttributes());
 
         /** @var \PhpParser\Node\Expr\Variable $var */
         $var = $echo->exprs[0];
-        $this->assertInstanceOf('PhpParser\Node\Expr\Variable', $var);
-        $this->assertEquals(array(
+        $this->assertInstanceOf(Expr\Variable::class, $var);
+        $this->assertEquals([
             'startLine' => 6,
             'endLine' => 6,
             'startTokenPos' => 18,
             'endTokenPos' => 18,
-        ), $var->getAttributes());
+        ], $var->getAttributes());
     }
 
     /**
@@ -124,60 +125,60 @@ EOC;
     public function testExtraAttributes($code, $expectedAttributes) {
         $parser = $this->getParser(new Lexer);
         $stmts = $parser->parse("<?php $code;");
-        $attributes = $stmts[0]->getAttributes();
+        $node = $stmts[0] instanceof Stmt\Expression ? $stmts[0]->expr : $stmts[0];
+        $attributes = $node->getAttributes();
         foreach ($expectedAttributes as $name => $value) {
             $this->assertSame($value, $attributes[$name]);
         }
     }
 
     public function provideTestExtraAttributes() {
-        return array(
-            array('0', ['kind' => Scalar\LNumber::KIND_DEC]),
-            array('9', ['kind' => Scalar\LNumber::KIND_DEC]),
-            array('07', ['kind' => Scalar\LNumber::KIND_OCT]),
-            array('0xf', ['kind' => Scalar\LNumber::KIND_HEX]),
-            array('0XF', ['kind' => Scalar\LNumber::KIND_HEX]),
-            array('0b1', ['kind' => Scalar\LNumber::KIND_BIN]),
-            array('0B1', ['kind' => Scalar\LNumber::KIND_BIN]),
-            array('[]', ['kind' => Expr\Array_::KIND_SHORT]),
-            array('array()', ['kind' => Expr\Array_::KIND_LONG]),
-            array("'foo'", ['kind' => String_::KIND_SINGLE_QUOTED]),
-            array("b'foo'", ['kind' => String_::KIND_SINGLE_QUOTED]),
-            array("B'foo'", ['kind' => String_::KIND_SINGLE_QUOTED]),
-            array('"foo"', ['kind' => String_::KIND_DOUBLE_QUOTED]),
-            array('b"foo"', ['kind' => String_::KIND_DOUBLE_QUOTED]),
-            array('B"foo"', ['kind' => String_::KIND_DOUBLE_QUOTED]),
-            array('"foo$bar"', ['kind' => String_::KIND_DOUBLE_QUOTED]),
-            array('b"foo$bar"', ['kind' => String_::KIND_DOUBLE_QUOTED]),
-            array('B"foo$bar"', ['kind' => String_::KIND_DOUBLE_QUOTED]),
-            array("<<<'STR'\nSTR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR']),
-            array("<<<STR\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR']),
-            array("<<<\"STR\"\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR']),
-            array("b<<<'STR'\nSTR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR']),
-            array("B<<<'STR'\nSTR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR']),
-            array("<<< \t 'STR'\nSTR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR']),
-            // HHVM doesn't support this due to a lexer bug
-            // (https://github.com/facebook/hhvm/issues/6970)
-            // array("<<<'\xff'\n\xff\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => "\xff"]),
-            array("<<<\"STR\"\n\$a\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR']),
-            array("b<<<\"STR\"\n\$a\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR']),
-            array("B<<<\"STR\"\n\$a\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR']),
-            array("<<< \t \"STR\"\n\$a\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR']),
-            array("die", ['kind' => Expr\Exit_::KIND_DIE]),
-            array("die('done')", ['kind' => Expr\Exit_::KIND_DIE]),
-            array("exit", ['kind' => Expr\Exit_::KIND_EXIT]),
-            array("exit(1)", ['kind' => Expr\Exit_::KIND_EXIT]),
-            array("?>Foo", ['hasLeadingNewline' => false]),
-            array("?>\nFoo", ['hasLeadingNewline' => true]),
-            array("namespace Foo;", ['kind' => Node\Stmt\Namespace_::KIND_SEMICOLON]),
-            array("namespace Foo {}", ['kind' => Node\Stmt\Namespace_::KIND_BRACED]),
-            array("namespace {}", ['kind' => Node\Stmt\Namespace_::KIND_BRACED]),
-        );
+        return [
+            ['0', ['kind' => Scalar\LNumber::KIND_DEC]],
+            ['9', ['kind' => Scalar\LNumber::KIND_DEC]],
+            ['07', ['kind' => Scalar\LNumber::KIND_OCT]],
+            ['0xf', ['kind' => Scalar\LNumber::KIND_HEX]],
+            ['0XF', ['kind' => Scalar\LNumber::KIND_HEX]],
+            ['0b1', ['kind' => Scalar\LNumber::KIND_BIN]],
+            ['0B1', ['kind' => Scalar\LNumber::KIND_BIN]],
+            ['[]', ['kind' => Expr\Array_::KIND_SHORT]],
+            ['array()', ['kind' => Expr\Array_::KIND_LONG]],
+            ["'foo'", ['kind' => String_::KIND_SINGLE_QUOTED]],
+            ["b'foo'", ['kind' => String_::KIND_SINGLE_QUOTED]],
+            ["B'foo'", ['kind' => String_::KIND_SINGLE_QUOTED]],
+            ['"foo"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
+            ['b"foo"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
+            ['B"foo"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
+            ['"foo$bar"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
+            ['b"foo$bar"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
+            ['B"foo$bar"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
+            ["<<<'STR'\nSTR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR']],
+            ["<<<STR\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR']],
+            ["<<<\"STR\"\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR']],
+            ["b<<<'STR'\nSTR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR']],
+            ["B<<<'STR'\nSTR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR']],
+            ["<<< \t 'STR'\nSTR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR']],
+            ["<<<'\xff'\n\xff\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => "\xff"]],
+            ["<<<\"STR\"\n\$a\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR']],
+            ["b<<<\"STR\"\n\$a\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR']],
+            ["B<<<\"STR\"\n\$a\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR']],
+            ["<<< \t \"STR\"\n\$a\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR']],
+            ["die", ['kind' => Expr\Exit_::KIND_DIE]],
+            ["die('done')", ['kind' => Expr\Exit_::KIND_DIE]],
+            ["exit", ['kind' => Expr\Exit_::KIND_EXIT]],
+            ["exit(1)", ['kind' => Expr\Exit_::KIND_EXIT]],
+            ["?>Foo", ['hasLeadingNewline' => false]],
+            ["?>\nFoo", ['hasLeadingNewline' => true]],
+            ["namespace Foo;", ['kind' => Stmt\Namespace_::KIND_SEMICOLON]],
+            ["namespace Foo {}", ['kind' => Stmt\Namespace_::KIND_BRACED]],
+            ["namespace {}", ['kind' => Stmt\Namespace_::KIND_BRACED]],
+        ];
     }
 }
 
-class InvalidTokenLexer extends Lexer {
-    public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) {
+class InvalidTokenLexer extends Lexer
+{
+    public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) : int {
         $value = 'foobar';
         return 999;
     }