Mercurial > hg > isophonics-drupal-site
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 } |