Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / nikic / php-parser / test / PhpParser / Lexer / EmulativeTest.php
1 <?php declare(strict_types=1);
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 = []) {
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 [
41             // PHP 5.5
42             ['finally',       Tokens::T_FINALLY],
43             ['yield',         Tokens::T_YIELD],
44
45             // PHP 5.4
46             ['callable',      Tokens::T_CALLABLE],
47             ['insteadof',     Tokens::T_INSTEADOF],
48             ['trait',         Tokens::T_TRAIT],
49             ['__TRAIT__',     Tokens::T_TRAIT_C],
50
51             // PHP 5.3
52             ['__DIR__',       Tokens::T_DIR],
53             ['goto',          Tokens::T_GOTO],
54             ['namespace',     Tokens::T_NAMESPACE],
55             ['__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 [
90             ['yield from', [
91                 [Tokens::T_YIELD_FROM, 'yield from'],
92             ]],
93             ["yield\r\nfrom", [
94                 [Tokens::T_YIELD_FROM, "yield\r\nfrom"],
95             ]],
96             ['...', [
97                 [Tokens::T_ELLIPSIS, '...'],
98             ]],
99             ['**', [
100                 [Tokens::T_POW, '**'],
101             ]],
102             ['**=', [
103                 [Tokens::T_POW_EQUAL, '**='],
104             ]],
105             ['??', [
106                 [Tokens::T_COALESCE, '??'],
107             ]],
108             ['<=>', [
109                 [Tokens::T_SPACESHIP, '<=>'],
110             ]],
111             ['0b1010110', [
112                 [Tokens::T_LNUMBER, '0b1010110'],
113             ]],
114             ['0b1011010101001010110101010010101011010101010101101011001110111100', [
115                 [Tokens::T_DNUMBER, '0b1011010101001010110101010010101011010101010101101011001110111100'],
116             ]],
117             ['\\', [
118                 [Tokens::T_NS_SEPARATOR, '\\'],
119             ]],
120             ["<<<'NOWDOC'\nNOWDOC;\n", [
121                 [Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"],
122                 [Tokens::T_END_HEREDOC, 'NOWDOC'],
123                 [ord(';'), ';'],
124             ]],
125             ["<<<'NOWDOC'\nFoobar\nNOWDOC;\n", [
126                 [Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"],
127                 [Tokens::T_ENCAPSED_AND_WHITESPACE, "Foobar\n"],
128                 [Tokens::T_END_HEREDOC, 'NOWDOC'],
129                 [ord(';'), ';'],
130             ]],
131         ];
132     }
133 }