Security update for Core, with self-updated composer
[yaffs-website] / vendor / nikic / php-parser / test / PhpParser / Lexer / EmulativeTest.php
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 }