radarrplexorganizrnginxsonarrdashboardsabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepage
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							133 lines
						
					
					
						
							4.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							133 lines
						
					
					
						
							4.5 KiB
						
					
					
				
								<?php
							 | 
						|
								
							 | 
						|
								namespace PhpParser\Lexer;
							 | 
						|
								
							 | 
						|
								use PhpParser\LexerTest;
							 | 
						|
								use PhpParser\Parser\Tokens;
							 | 
						|
								
							 | 
						|
								require_once __DIR__ . '/../LexerTest.php';
							 | 
						|
								
							 | 
						|
								class EmulativeTest extends LexerTest
							 | 
						|
								{
							 | 
						|
								    protected function getLexer(array $options = array()) {
							 | 
						|
								        return new Emulative($options);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider provideTestReplaceKeywords
							 | 
						|
								     */
							 | 
						|
								    public function testReplaceKeywords($keyword, $expectedToken) {
							 | 
						|
								        $lexer = $this->getLexer();
							 | 
						|
								        $lexer->startLexing('<?php ' . $keyword);
							 | 
						|
								
							 | 
						|
								        $this->assertSame($expectedToken, $lexer->getNextToken());
							 | 
						|
								        $this->assertSame(0, $lexer->getNextToken());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider provideTestReplaceKeywords
							 | 
						|
								     */
							 | 
						|
								    public function testNoReplaceKeywordsAfterObjectOperator($keyword) {
							 | 
						|
								        $lexer = $this->getLexer();
							 | 
						|
								        $lexer->startLexing('<?php ->' . $keyword);
							 | 
						|
								
							 | 
						|
								        $this->assertSame(Tokens::T_OBJECT_OPERATOR, $lexer->getNextToken());
							 | 
						|
								        $this->assertSame(Tokens::T_STRING, $lexer->getNextToken());
							 | 
						|
								        $this->assertSame(0, $lexer->getNextToken());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function provideTestReplaceKeywords() {
							 | 
						|
								        return array(
							 | 
						|
								            // PHP 5.5
							 | 
						|
								            array('finally',       Tokens::T_FINALLY),
							 | 
						|
								            array('yield',         Tokens::T_YIELD),
							 | 
						|
								
							 | 
						|
								            // PHP 5.4
							 | 
						|
								            array('callable',      Tokens::T_CALLABLE),
							 | 
						|
								            array('insteadof',     Tokens::T_INSTEADOF),
							 | 
						|
								            array('trait',         Tokens::T_TRAIT),
							 | 
						|
								            array('__TRAIT__',     Tokens::T_TRAIT_C),
							 | 
						|
								
							 | 
						|
								            // PHP 5.3
							 | 
						|
								            array('__DIR__',       Tokens::T_DIR),
							 | 
						|
								            array('goto',          Tokens::T_GOTO),
							 | 
						|
								            array('namespace',     Tokens::T_NAMESPACE),
							 | 
						|
								            array('__NAMESPACE__', Tokens::T_NS_C),
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider provideTestLexNewFeatures
							 | 
						|
								     */
							 | 
						|
								    public function testLexNewFeatures($code, array $expectedTokens) {
							 | 
						|
								        $lexer = $this->getLexer();
							 | 
						|
								        $lexer->startLexing('<?php ' . $code);
							 | 
						|
								
							 | 
						|
								        foreach ($expectedTokens as $expectedToken) {
							 | 
						|
								            list($expectedTokenType, $expectedTokenText) = $expectedToken;
							 | 
						|
								            $this->assertSame($expectedTokenType, $lexer->getNextToken($text));
							 | 
						|
								            $this->assertSame($expectedTokenText, $text);
							 | 
						|
								        }
							 | 
						|
								        $this->assertSame(0, $lexer->getNextToken());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider provideTestLexNewFeatures
							 | 
						|
								     */
							 | 
						|
								    public function testLeaveStuffAloneInStrings($code) {
							 | 
						|
								        $stringifiedToken = '"' . addcslashes($code, '"\\') . '"';
							 | 
						|
								
							 | 
						|
								        $lexer = $this->getLexer();
							 | 
						|
								        $lexer->startLexing('<?php ' . $stringifiedToken);
							 | 
						|
								
							 | 
						|
								        $this->assertSame(Tokens::T_CONSTANT_ENCAPSED_STRING, $lexer->getNextToken($text));
							 | 
						|
								        $this->assertSame($stringifiedToken, $text);
							 | 
						|
								        $this->assertSame(0, $lexer->getNextToken());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function provideTestLexNewFeatures() {
							 | 
						|
								        return array(
							 | 
						|
								            array('yield from', array(
							 | 
						|
								                array(Tokens::T_YIELD_FROM, 'yield from'),
							 | 
						|
								            )),
							 | 
						|
								            array("yield\r\nfrom", array(
							 | 
						|
								                array(Tokens::T_YIELD_FROM, "yield\r\nfrom"),
							 | 
						|
								            )),
							 | 
						|
								            array('...', array(
							 | 
						|
								                array(Tokens::T_ELLIPSIS, '...'),
							 | 
						|
								            )),
							 | 
						|
								            array('**', array(
							 | 
						|
								                array(Tokens::T_POW, '**'),
							 | 
						|
								            )),
							 | 
						|
								            array('**=', array(
							 | 
						|
								                array(Tokens::T_POW_EQUAL, '**='),
							 | 
						|
								            )),
							 | 
						|
								            array('??', array(
							 | 
						|
								                array(Tokens::T_COALESCE, '??'),
							 | 
						|
								            )),
							 | 
						|
								            array('<=>', array(
							 | 
						|
								                array(Tokens::T_SPACESHIP, '<=>'),
							 | 
						|
								            )),
							 | 
						|
								            array('0b1010110', array(
							 | 
						|
								                array(Tokens::T_LNUMBER, '0b1010110'),
							 | 
						|
								            )),
							 | 
						|
								            array('0b1011010101001010110101010010101011010101010101101011001110111100', array(
							 | 
						|
								                array(Tokens::T_DNUMBER, '0b1011010101001010110101010010101011010101010101101011001110111100'),
							 | 
						|
								            )),
							 | 
						|
								            array('\\', array(
							 | 
						|
								                array(Tokens::T_NS_SEPARATOR, '\\'),
							 | 
						|
								            )),
							 | 
						|
								            array("<<<'NOWDOC'\nNOWDOC;\n", array(
							 | 
						|
								                array(Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"),
							 | 
						|
								                array(Tokens::T_END_HEREDOC, 'NOWDOC'),
							 | 
						|
								                array(ord(';'), ';'),
							 | 
						|
								            )),
							 | 
						|
								            array("<<<'NOWDOC'\nFoobar\nNOWDOC;\n", array(
							 | 
						|
								                array(Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"),
							 | 
						|
								                array(Tokens::T_ENCAPSED_AND_WHITESPACE, "Foobar\n"),
							 | 
						|
								                array(Tokens::T_END_HEREDOC, 'NOWDOC'),
							 | 
						|
								                array(ord(';'), ';'),
							 | 
						|
								            )),
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |