annotate vendor/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php @ 16:c2387f117808

Routine composer update
author Chris Cannam
date Tue, 10 Jul 2018 15:07:59 +0100
parents 5fb285c0d0e3
children 129ea1e6d783
rev   line source
Chris@13 1 <?php declare(strict_types=1);
Chris@0 2
Chris@0 3 namespace PhpParser\Lexer;
Chris@0 4
Chris@0 5 use PhpParser\LexerTest;
Chris@0 6 use PhpParser\Parser\Tokens;
Chris@0 7
Chris@0 8 require_once __DIR__ . '/../LexerTest.php';
Chris@0 9
Chris@0 10 class EmulativeTest extends LexerTest
Chris@0 11 {
Chris@13 12 protected function getLexer(array $options = []) {
Chris@0 13 return new Emulative($options);
Chris@0 14 }
Chris@0 15
Chris@0 16 /**
Chris@0 17 * @dataProvider provideTestReplaceKeywords
Chris@0 18 */
Chris@0 19 public function testReplaceKeywords($keyword, $expectedToken) {
Chris@0 20 $lexer = $this->getLexer();
Chris@0 21 $lexer->startLexing('<?php ' . $keyword);
Chris@0 22
Chris@0 23 $this->assertSame($expectedToken, $lexer->getNextToken());
Chris@0 24 $this->assertSame(0, $lexer->getNextToken());
Chris@0 25 }
Chris@0 26
Chris@0 27 /**
Chris@0 28 * @dataProvider provideTestReplaceKeywords
Chris@0 29 */
Chris@0 30 public function testNoReplaceKeywordsAfterObjectOperator($keyword) {
Chris@0 31 $lexer = $this->getLexer();
Chris@0 32 $lexer->startLexing('<?php ->' . $keyword);
Chris@0 33
Chris@0 34 $this->assertSame(Tokens::T_OBJECT_OPERATOR, $lexer->getNextToken());
Chris@0 35 $this->assertSame(Tokens::T_STRING, $lexer->getNextToken());
Chris@0 36 $this->assertSame(0, $lexer->getNextToken());
Chris@0 37 }
Chris@0 38
Chris@0 39 public function provideTestReplaceKeywords() {
Chris@13 40 return [
Chris@0 41 // PHP 5.5
Chris@13 42 ['finally', Tokens::T_FINALLY],
Chris@13 43 ['yield', Tokens::T_YIELD],
Chris@0 44
Chris@0 45 // PHP 5.4
Chris@13 46 ['callable', Tokens::T_CALLABLE],
Chris@13 47 ['insteadof', Tokens::T_INSTEADOF],
Chris@13 48 ['trait', Tokens::T_TRAIT],
Chris@13 49 ['__TRAIT__', Tokens::T_TRAIT_C],
Chris@0 50
Chris@0 51 // PHP 5.3
Chris@13 52 ['__DIR__', Tokens::T_DIR],
Chris@13 53 ['goto', Tokens::T_GOTO],
Chris@13 54 ['namespace', Tokens::T_NAMESPACE],
Chris@13 55 ['__NAMESPACE__', Tokens::T_NS_C],
Chris@13 56 ];
Chris@0 57 }
Chris@0 58
Chris@0 59 /**
Chris@0 60 * @dataProvider provideTestLexNewFeatures
Chris@0 61 */
Chris@0 62 public function testLexNewFeatures($code, array $expectedTokens) {
Chris@0 63 $lexer = $this->getLexer();
Chris@0 64 $lexer->startLexing('<?php ' . $code);
Chris@0 65
Chris@0 66 foreach ($expectedTokens as $expectedToken) {
Chris@0 67 list($expectedTokenType, $expectedTokenText) = $expectedToken;
Chris@0 68 $this->assertSame($expectedTokenType, $lexer->getNextToken($text));
Chris@0 69 $this->assertSame($expectedTokenText, $text);
Chris@0 70 }
Chris@0 71 $this->assertSame(0, $lexer->getNextToken());
Chris@0 72 }
Chris@0 73
Chris@0 74 /**
Chris@0 75 * @dataProvider provideTestLexNewFeatures
Chris@0 76 */
Chris@0 77 public function testLeaveStuffAloneInStrings($code) {
Chris@0 78 $stringifiedToken = '"' . addcslashes($code, '"\\') . '"';
Chris@0 79
Chris@0 80 $lexer = $this->getLexer();
Chris@0 81 $lexer->startLexing('<?php ' . $stringifiedToken);
Chris@0 82
Chris@0 83 $this->assertSame(Tokens::T_CONSTANT_ENCAPSED_STRING, $lexer->getNextToken($text));
Chris@0 84 $this->assertSame($stringifiedToken, $text);
Chris@0 85 $this->assertSame(0, $lexer->getNextToken());
Chris@0 86 }
Chris@0 87
Chris@0 88 public function provideTestLexNewFeatures() {
Chris@13 89 return [
Chris@13 90 ['yield from', [
Chris@13 91 [Tokens::T_YIELD_FROM, 'yield from'],
Chris@13 92 ]],
Chris@13 93 ["yield\r\nfrom", [
Chris@13 94 [Tokens::T_YIELD_FROM, "yield\r\nfrom"],
Chris@13 95 ]],
Chris@13 96 ['...', [
Chris@13 97 [Tokens::T_ELLIPSIS, '...'],
Chris@13 98 ]],
Chris@13 99 ['**', [
Chris@13 100 [Tokens::T_POW, '**'],
Chris@13 101 ]],
Chris@13 102 ['**=', [
Chris@13 103 [Tokens::T_POW_EQUAL, '**='],
Chris@13 104 ]],
Chris@13 105 ['??', [
Chris@13 106 [Tokens::T_COALESCE, '??'],
Chris@13 107 ]],
Chris@13 108 ['<=>', [
Chris@13 109 [Tokens::T_SPACESHIP, '<=>'],
Chris@13 110 ]],
Chris@13 111 ['0b1010110', [
Chris@13 112 [Tokens::T_LNUMBER, '0b1010110'],
Chris@13 113 ]],
Chris@13 114 ['0b1011010101001010110101010010101011010101010101101011001110111100', [
Chris@13 115 [Tokens::T_DNUMBER, '0b1011010101001010110101010010101011010101010101101011001110111100'],
Chris@13 116 ]],
Chris@13 117 ['\\', [
Chris@13 118 [Tokens::T_NS_SEPARATOR, '\\'],
Chris@13 119 ]],
Chris@13 120 ["<<<'NOWDOC'\nNOWDOC;\n", [
Chris@13 121 [Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"],
Chris@13 122 [Tokens::T_END_HEREDOC, 'NOWDOC'],
Chris@13 123 [ord(';'), ';'],
Chris@13 124 ]],
Chris@13 125 ["<<<'NOWDOC'\nFoobar\nNOWDOC;\n", [
Chris@13 126 [Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"],
Chris@13 127 [Tokens::T_ENCAPSED_AND_WHITESPACE, "Foobar\n"],
Chris@13 128 [Tokens::T_END_HEREDOC, 'NOWDOC'],
Chris@13 129 [ord(';'), ';'],
Chris@13 130 ]],
Chris@13 131 ];
Chris@0 132 }
Chris@0 133 }