comparison vendor/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 5fb285c0d0e3
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
1 <?php
2
3 namespace PhpParser\Lexer;
4
5 use PhpParser\LexerTest;
6 use PhpParser\Parser\Tokens;
7
8 require_once __DIR__ . '/../LexerTest.php';
9
10 class EmulativeTest extends LexerTest
11 {
12 protected function getLexer(array $options = array()) {
13 return new Emulative($options);
14 }
15
16 /**
17 * @dataProvider provideTestReplaceKeywords
18 */
19 public function testReplaceKeywords($keyword, $expectedToken) {
20 $lexer = $this->getLexer();
21 $lexer->startLexing('<?php ' . $keyword);
22
23 $this->assertSame($expectedToken, $lexer->getNextToken());
24 $this->assertSame(0, $lexer->getNextToken());
25 }
26
27 /**
28 * @dataProvider provideTestReplaceKeywords
29 */
30 public function testNoReplaceKeywordsAfterObjectOperator($keyword) {
31 $lexer = $this->getLexer();
32 $lexer->startLexing('<?php ->' . $keyword);
33
34 $this->assertSame(Tokens::T_OBJECT_OPERATOR, $lexer->getNextToken());
35 $this->assertSame(Tokens::T_STRING, $lexer->getNextToken());
36 $this->assertSame(0, $lexer->getNextToken());
37 }
38
39 public function provideTestReplaceKeywords() {
40 return array(
41 // PHP 5.5
42 array('finally', Tokens::T_FINALLY),
43 array('yield', Tokens::T_YIELD),
44
45 // PHP 5.4
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),
50
51 // PHP 5.3
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),
56 );
57 }
58
59 /**
60 * @dataProvider provideTestLexNewFeatures
61 */
62 public function testLexNewFeatures($code, array $expectedTokens) {
63 $lexer = $this->getLexer();
64 $lexer->startLexing('<?php ' . $code);
65
66 foreach ($expectedTokens as $expectedToken) {
67 list($expectedTokenType, $expectedTokenText) = $expectedToken;
68 $this->assertSame($expectedTokenType, $lexer->getNextToken($text));
69 $this->assertSame($expectedTokenText, $text);
70 }
71 $this->assertSame(0, $lexer->getNextToken());
72 }
73
74 /**
75 * @dataProvider provideTestLexNewFeatures
76 */
77 public function testLeaveStuffAloneInStrings($code) {
78 $stringifiedToken = '"' . addcslashes($code, '"\\') . '"';
79
80 $lexer = $this->getLexer();
81 $lexer->startLexing('<?php ' . $stringifiedToken);
82
83 $this->assertSame(Tokens::T_CONSTANT_ENCAPSED_STRING, $lexer->getNextToken($text));
84 $this->assertSame($stringifiedToken, $text);
85 $this->assertSame(0, $lexer->getNextToken());
86 }
87
88 public function provideTestLexNewFeatures() {
89 return array(
90 array('yield from', array(
91 array(Tokens::T_YIELD_FROM, 'yield from'),
92 )),
93 array("yield\r\nfrom", array(
94 array(Tokens::T_YIELD_FROM, "yield\r\nfrom"),
95 )),
96 array('...', array(
97 array(Tokens::T_ELLIPSIS, '...'),
98 )),
99 array('**', array(
100 array(Tokens::T_POW, '**'),
101 )),
102 array('**=', array(
103 array(Tokens::T_POW_EQUAL, '**='),
104 )),
105 array('??', array(
106 array(Tokens::T_COALESCE, '??'),
107 )),
108 array('<=>', array(
109 array(Tokens::T_SPACESHIP, '<=>'),
110 )),
111 array('0b1010110', array(
112 array(Tokens::T_LNUMBER, '0b1010110'),
113 )),
114 array('0b1011010101001010110101010010101011010101010101101011001110111100', array(
115 array(Tokens::T_DNUMBER, '0b1011010101001010110101010010101011010101010101101011001110111100'),
116 )),
117 array('\\', array(
118 array(Tokens::T_NS_SEPARATOR, '\\'),
119 )),
120 array("<<<'NOWDOC'\nNOWDOC;\n", array(
121 array(Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"),
122 array(Tokens::T_END_HEREDOC, 'NOWDOC'),
123 array(ord(';'), ';'),
124 )),
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(';'), ';'),
130 )),
131 );
132 }
133 }