103 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| class PHPParser_Tests_Lexer_EmulativeTest extends PHPUnit_Framework_TestCase
 | |
| {
 | |
|     /** @var PHPParser_Lexer_Emulative */
 | |
|     protected $lexer;
 | |
| 
 | |
|     protected function setUp() {
 | |
|         $this->lexer = new PHPParser_Lexer_Emulative;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @dataProvider provideTestReplaceKeywords
 | |
|      */
 | |
|     public function testReplaceKeywords($keyword, $expectedToken) {
 | |
|         $this->lexer->startLexing('<?php ' . $keyword);
 | |
| 
 | |
|         $this->assertEquals($expectedToken, $this->lexer->getNextToken());
 | |
|         $this->assertEquals(0, $this->lexer->getNextToken());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @dataProvider provideTestReplaceKeywords
 | |
|      */
 | |
|     public function testNoReplaceKeywordsAfterObjectOperator($keyword) {
 | |
|         $this->lexer->startLexing('<?php ->' . $keyword);
 | |
| 
 | |
|         $this->assertEquals(PHPParser_Parser::T_OBJECT_OPERATOR, $this->lexer->getNextToken());
 | |
|         $this->assertEquals(PHPParser_Parser::T_STRING, $this->lexer->getNextToken());
 | |
|         $this->assertEquals(0, $this->lexer->getNextToken());
 | |
|     }
 | |
| 
 | |
|     public function provideTestReplaceKeywords() {
 | |
|         return array(
 | |
|             // PHP 5.5
 | |
|             array('finally',       PHPParser_Parser::T_FINALLY),
 | |
|             array('yield',         PHPParser_Parser::T_YIELD),
 | |
| 
 | |
|             // PHP 5.4
 | |
|             array('callable',      PHPParser_Parser::T_CALLABLE),
 | |
|             array('insteadof',     PHPParser_Parser::T_INSTEADOF),
 | |
|             array('trait',         PHPParser_Parser::T_TRAIT),
 | |
|             array('__TRAIT__',     PHPParser_Parser::T_TRAIT_C),
 | |
| 
 | |
|             // PHP 5.3
 | |
|             array('__DIR__',       PHPParser_Parser::T_DIR),
 | |
|             array('goto',          PHPParser_Parser::T_GOTO),
 | |
|             array('namespace',     PHPParser_Parser::T_NAMESPACE),
 | |
|             array('__NAMESPACE__', PHPParser_Parser::T_NS_C),
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @dataProvider provideTestLexNewFeatures
 | |
|      */
 | |
|     public function testLexNewFeatures($code, array $expectedTokens) {
 | |
|         $this->lexer->startLexing('<?php ' . $code);
 | |
| 
 | |
|         foreach ($expectedTokens as $expectedToken) {
 | |
|             list($expectedTokenType, $expectedTokenText) = $expectedToken;
 | |
|             $this->assertEquals($expectedTokenType, $this->lexer->getNextToken($text));
 | |
|             $this->assertEquals($expectedTokenText, $text);
 | |
|         }
 | |
|         $this->assertEquals(0, $this->lexer->getNextToken());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @dataProvider provideTestLexNewFeatures
 | |
|      */
 | |
|     public function testLeaveStuffAloneInStrings($code) {
 | |
|         $stringifiedToken = '"' . addcslashes($code, '"\\') . '"';
 | |
|         $this->lexer->startLexing('<?php ' . $stringifiedToken);
 | |
| 
 | |
|         $this->assertEquals(PHPParser_Parser::T_CONSTANT_ENCAPSED_STRING, $this->lexer->getNextToken($text));
 | |
|         $this->assertEquals($stringifiedToken, $text);
 | |
|         $this->assertEquals(0, $this->lexer->getNextToken());
 | |
|     }
 | |
| 
 | |
|     public function provideTestLexNewFeatures() {
 | |
|         return array(
 | |
|             array('0b1010110', array(
 | |
|                 array(PHPParser_Parser::T_LNUMBER, '0b1010110'),
 | |
|             )),
 | |
|             array('0b1011010101001010110101010010101011010101010101101011001110111100', array(
 | |
|                 array(PHPParser_Parser::T_DNUMBER, '0b1011010101001010110101010010101011010101010101101011001110111100'),
 | |
|             )),
 | |
|             array('\\', array(
 | |
|                 array(PHPParser_Parser::T_NS_SEPARATOR, '\\'),
 | |
|             )),
 | |
|             array("<<<'NOWDOC'\nNOWDOC;\n", array(
 | |
|                 array(PHPParser_Parser::T_START_HEREDOC, "<<<'NOWDOC'\n"),
 | |
|                 array(PHPParser_Parser::T_END_HEREDOC, 'NOWDOC'),
 | |
|                 array(ord(';'), ';'),
 | |
|             )),
 | |
|             array("<<<'NOWDOC'\nFoobar\nNOWDOC;\n", array(
 | |
|                 array(PHPParser_Parser::T_START_HEREDOC, "<<<'NOWDOC'\n"),
 | |
|                 array(PHPParser_Parser::T_ENCAPSED_AND_WHITESPACE, "Foobar\n"),
 | |
|                 array(PHPParser_Parser::T_END_HEREDOC, 'NOWDOC'),
 | |
|                 array(ord(';'), ';'),
 | |
|             )),
 | |
|         );
 | |
|     }
 | |
| } |