Mercurial > hg > isophonics-drupal-site
diff vendor/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
| author | Chris Cannam |
|---|---|
| date | Thu, 28 Feb 2019 13:21:36 +0000 |
| parents | 5fb285c0d0e3 |
| children |
line wrap: on
line diff
--- a/vendor/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php Tue Jul 10 15:07:59 2018 +0100 +++ b/vendor/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php Thu Feb 28 13:21:36 2019 +0000 @@ -2,11 +2,10 @@ namespace PhpParser\Lexer; +use PhpParser\ErrorHandler; use PhpParser\LexerTest; use PhpParser\Parser\Tokens; -require_once __DIR__ . '/../LexerTest.php'; - class EmulativeTest extends LexerTest { protected function getLexer(array $options = []) { @@ -63,12 +62,11 @@ $lexer = $this->getLexer(); $lexer->startLexing('<?php ' . $code); - foreach ($expectedTokens as $expectedToken) { - list($expectedTokenType, $expectedTokenText) = $expectedToken; - $this->assertSame($expectedTokenType, $lexer->getNextToken($text)); - $this->assertSame($expectedTokenText, $text); + $tokens = []; + while (0 !== $token = $lexer->getNextToken($text)) { + $tokens[] = [$token, $text]; } - $this->assertSame(0, $lexer->getNextToken()); + $this->assertSame($expectedTokens, $tokens); } /** @@ -85,8 +83,35 @@ $this->assertSame(0, $lexer->getNextToken()); } + /** + * @dataProvider provideTestLexNewFeatures + */ + public function testErrorAfterEmulation($code) { + $errorHandler = new ErrorHandler\Collecting; + $lexer = $this->getLexer([]); + $lexer->startLexing('<?php ' . $code . "\0", $errorHandler); + + $errors = $errorHandler->getErrors(); + $this->assertCount(1, $errors); + + $error = $errors[0]; + $this->assertSame('Unexpected null byte', $error->getRawMessage()); + + $attrs = $error->getAttributes(); + $expPos = strlen('<?php ' . $code); + $expLine = 1 + substr_count('<?php ' . $code, "\n"); + $this->assertSame($expPos, $attrs['startFilePos']); + $this->assertSame($expPos, $attrs['endFilePos']); + $this->assertSame($expLine, $attrs['startLine']); + $this->assertSame($expLine, $attrs['endLine']); + } + public function provideTestLexNewFeatures() { return [ + // PHP 7.4 + ['??=', [ + [Tokens::T_COALESCE_EQUAL, '??='], + ]], ['yield from', [ [Tokens::T_YIELD_FROM, 'yield from'], ]], @@ -128,6 +153,43 @@ [Tokens::T_END_HEREDOC, 'NOWDOC'], [ord(';'), ';'], ]], + + // Flexible heredoc/nowdoc + ["<<<LABEL\nLABEL,", [ + [Tokens::T_START_HEREDOC, "<<<LABEL\n"], + [Tokens::T_END_HEREDOC, "LABEL"], + [ord(','), ','], + ]], + ["<<<LABEL\n LABEL,", [ + [Tokens::T_START_HEREDOC, "<<<LABEL\n"], + [Tokens::T_END_HEREDOC, " LABEL"], + [ord(','), ','], + ]], + ["<<<LABEL\n Foo\n LABEL;", [ + [Tokens::T_START_HEREDOC, "<<<LABEL\n"], + [Tokens::T_ENCAPSED_AND_WHITESPACE, " Foo\n"], + [Tokens::T_END_HEREDOC, " LABEL"], + [ord(';'), ';'], + ]], + ["<<<A\n A,<<<A\n A,", [ + [Tokens::T_START_HEREDOC, "<<<A\n"], + [Tokens::T_END_HEREDOC, " A"], + [ord(','), ','], + [Tokens::T_START_HEREDOC, "<<<A\n"], + [Tokens::T_END_HEREDOC, " A"], + [ord(','), ','], + ]], + ["<<<LABEL\nLABELNOPE\nLABEL\n", [ + [Tokens::T_START_HEREDOC, "<<<LABEL\n"], + [Tokens::T_ENCAPSED_AND_WHITESPACE, "LABELNOPE\n"], + [Tokens::T_END_HEREDOC, "LABEL"], + ]], + // Interpretation changed + ["<<<LABEL\n LABEL\nLABEL\n", [ + [Tokens::T_START_HEREDOC, "<<<LABEL\n"], + [Tokens::T_END_HEREDOC, " LABEL"], + [Tokens::T_STRING, "LABEL"], + ]], ]; } }
