annotate vendor/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php @ 2:92f882872392

Trusted hosts, + remove migration modules
author Chris Cannam
date Tue, 05 Dec 2017 09:26:43 +0000
parents 4c8ae668cc8c
children 5fb285c0d0e3
rev   line source
Chris@0 1 <?php
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@0 12 protected function getLexer(array $options = array()) {
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@0 40 return array(
Chris@0 41 // PHP 5.5
Chris@0 42 array('finally', Tokens::T_FINALLY),
Chris@0 43 array('yield', Tokens::T_YIELD),
Chris@0 44
Chris@0 45 // PHP 5.4
Chris@0 46 array('callable', Tokens::T_CALLABLE),
Chris@0 47 array('insteadof', Tokens::T_INSTEADOF),
Chris@0 48 array('trait', Tokens::T_TRAIT),
Chris@0 49 array('__TRAIT__', Tokens::T_TRAIT_C),
Chris@0 50
Chris@0 51 // PHP 5.3
Chris@0 52 array('__DIR__', Tokens::T_DIR),
Chris@0 53 array('goto', Tokens::T_GOTO),
Chris@0 54 array('namespace', Tokens::T_NAMESPACE),
Chris@0 55 array('__NAMESPACE__', Tokens::T_NS_C),
Chris@0 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@0 89 return array(
Chris@0 90 array('yield from', array(
Chris@0 91 array(Tokens::T_YIELD_FROM, 'yield from'),
Chris@0 92 )),
Chris@0 93 array("yield\r\nfrom", array(
Chris@0 94 array(Tokens::T_YIELD_FROM, "yield\r\nfrom"),
Chris@0 95 )),
Chris@0 96 array('...', array(
Chris@0 97 array(Tokens::T_ELLIPSIS, '...'),
Chris@0 98 )),
Chris@0 99 array('**', array(
Chris@0 100 array(Tokens::T_POW, '**'),
Chris@0 101 )),
Chris@0 102 array('**=', array(
Chris@0 103 array(Tokens::T_POW_EQUAL, '**='),
Chris@0 104 )),
Chris@0 105 array('??', array(
Chris@0 106 array(Tokens::T_COALESCE, '??'),
Chris@0 107 )),
Chris@0 108 array('<=>', array(
Chris@0 109 array(Tokens::T_SPACESHIP, '<=>'),
Chris@0 110 )),
Chris@0 111 array('0b1010110', array(
Chris@0 112 array(Tokens::T_LNUMBER, '0b1010110'),
Chris@0 113 )),
Chris@0 114 array('0b1011010101001010110101010010101011010101010101101011001110111100', array(
Chris@0 115 array(Tokens::T_DNUMBER, '0b1011010101001010110101010010101011010101010101101011001110111100'),
Chris@0 116 )),
Chris@0 117 array('\\', array(
Chris@0 118 array(Tokens::T_NS_SEPARATOR, '\\'),
Chris@0 119 )),
Chris@0 120 array("<<<'NOWDOC'\nNOWDOC;\n", array(
Chris@0 121 array(Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"),
Chris@0 122 array(Tokens::T_END_HEREDOC, 'NOWDOC'),
Chris@0 123 array(ord(';'), ';'),
Chris@0 124 )),
Chris@0 125 array("<<<'NOWDOC'\nFoobar\nNOWDOC;\n", array(
Chris@0 126 array(Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"),
Chris@0 127 array(Tokens::T_ENCAPSED_AND_WHITESPACE, "Foobar\n"),
Chris@0 128 array(Tokens::T_END_HEREDOC, 'NOWDOC'),
Chris@0 129 array(ord(';'), ';'),
Chris@0 130 )),
Chris@0 131 );
Chris@0 132 }
Chris@0 133 }