3 namespace PhpParser\Lexer;
5 use PhpParser\LexerTest;
6 use PhpParser\Parser\Tokens;
8 require_once __DIR__ . '/../LexerTest.php';
10 class EmulativeTest extends LexerTest
12 protected function getLexer(array $options = array()) {
13 return new Emulative($options);
17 * @dataProvider provideTestReplaceKeywords
19 public function testReplaceKeywords($keyword, $expectedToken) {
20 $lexer = $this->getLexer();
21 $lexer->startLexing('<?php ' . $keyword);
23 $this->assertSame($expectedToken, $lexer->getNextToken());
24 $this->assertSame(0, $lexer->getNextToken());
28 * @dataProvider provideTestReplaceKeywords
30 public function testNoReplaceKeywordsAfterObjectOperator($keyword) {
31 $lexer = $this->getLexer();
32 $lexer->startLexing('<?php ->' . $keyword);
34 $this->assertSame(Tokens::T_OBJECT_OPERATOR, $lexer->getNextToken());
35 $this->assertSame(Tokens::T_STRING, $lexer->getNextToken());
36 $this->assertSame(0, $lexer->getNextToken());
39 public function provideTestReplaceKeywords() {
42 array('finally', Tokens::T_FINALLY),
43 array('yield', Tokens::T_YIELD),
46 array('callable', Tokens::T_CALLABLE),
47 array('insteadof', Tokens::T_INSTEADOF),
48 array('trait', Tokens::T_TRAIT),
49 array('__TRAIT__', Tokens::T_TRAIT_C),
52 array('__DIR__', Tokens::T_DIR),
53 array('goto', Tokens::T_GOTO),
54 array('namespace', Tokens::T_NAMESPACE),
55 array('__NAMESPACE__', Tokens::T_NS_C),
60 * @dataProvider provideTestLexNewFeatures
62 public function testLexNewFeatures($code, array $expectedTokens) {
63 $lexer = $this->getLexer();
64 $lexer->startLexing('<?php ' . $code);
66 foreach ($expectedTokens as $expectedToken) {
67 list($expectedTokenType, $expectedTokenText) = $expectedToken;
68 $this->assertSame($expectedTokenType, $lexer->getNextToken($text));
69 $this->assertSame($expectedTokenText, $text);
71 $this->assertSame(0, $lexer->getNextToken());
75 * @dataProvider provideTestLexNewFeatures
77 public function testLeaveStuffAloneInStrings($code) {
78 $stringifiedToken = '"' . addcslashes($code, '"\\') . '"';
80 $lexer = $this->getLexer();
81 $lexer->startLexing('<?php ' . $stringifiedToken);
83 $this->assertSame(Tokens::T_CONSTANT_ENCAPSED_STRING, $lexer->getNextToken($text));
84 $this->assertSame($stringifiedToken, $text);
85 $this->assertSame(0, $lexer->getNextToken());
88 public function provideTestLexNewFeatures() {
90 array('yield from', array(
91 array(Tokens::T_YIELD_FROM, 'yield from'),
93 array("yield\r\nfrom", array(
94 array(Tokens::T_YIELD_FROM, "yield\r\nfrom"),
97 array(Tokens::T_ELLIPSIS, '...'),
100 array(Tokens::T_POW, '**'),
103 array(Tokens::T_POW_EQUAL, '**='),
106 array(Tokens::T_COALESCE, '??'),
109 array(Tokens::T_SPACESHIP, '<=>'),
111 array('0b1010110', array(
112 array(Tokens::T_LNUMBER, '0b1010110'),
114 array('0b1011010101001010110101010010101011010101010101101011001110111100', array(
115 array(Tokens::T_DNUMBER, '0b1011010101001010110101010010101011010101010101101011001110111100'),
118 array(Tokens::T_NS_SEPARATOR, '\\'),
120 array("<<<'NOWDOC'\nNOWDOC;\n", array(
121 array(Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"),
122 array(Tokens::T_END_HEREDOC, 'NOWDOC'),
123 array(ord(';'), ';'),
125 array("<<<'NOWDOC'\nFoobar\nNOWDOC;\n", array(
126 array(Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"),
127 array(Tokens::T_ENCAPSED_AND_WHITESPACE, "Foobar\n"),
128 array(Tokens::T_END_HEREDOC, 'NOWDOC'),
129 array(ord(';'), ';'),