Chris@0: getLexer(); Chris@0: $lexer->startLexing('assertSame($expectedToken, $lexer->getNextToken()); Chris@0: $this->assertSame(0, $lexer->getNextToken()); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @dataProvider provideTestReplaceKeywords Chris@0: */ Chris@0: public function testNoReplaceKeywordsAfterObjectOperator($keyword) { Chris@0: $lexer = $this->getLexer(); Chris@0: $lexer->startLexing('' . $keyword); Chris@0: Chris@0: $this->assertSame(Tokens::T_OBJECT_OPERATOR, $lexer->getNextToken()); Chris@0: $this->assertSame(Tokens::T_STRING, $lexer->getNextToken()); Chris@0: $this->assertSame(0, $lexer->getNextToken()); Chris@0: } Chris@0: Chris@0: public function provideTestReplaceKeywords() { Chris@0: return array( Chris@0: // PHP 5.5 Chris@0: array('finally', Tokens::T_FINALLY), Chris@0: array('yield', Tokens::T_YIELD), Chris@0: Chris@0: // PHP 5.4 Chris@0: array('callable', Tokens::T_CALLABLE), Chris@0: array('insteadof', Tokens::T_INSTEADOF), Chris@0: array('trait', Tokens::T_TRAIT), Chris@0: array('__TRAIT__', Tokens::T_TRAIT_C), Chris@0: Chris@0: // PHP 5.3 Chris@0: array('__DIR__', Tokens::T_DIR), Chris@0: array('goto', Tokens::T_GOTO), Chris@0: array('namespace', Tokens::T_NAMESPACE), Chris@0: array('__NAMESPACE__', Tokens::T_NS_C), Chris@0: ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @dataProvider provideTestLexNewFeatures Chris@0: */ Chris@0: public function testLexNewFeatures($code, array $expectedTokens) { Chris@0: $lexer = $this->getLexer(); Chris@0: $lexer->startLexing('assertSame($expectedTokenType, $lexer->getNextToken($text)); Chris@0: $this->assertSame($expectedTokenText, $text); Chris@0: } Chris@0: $this->assertSame(0, $lexer->getNextToken()); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @dataProvider provideTestLexNewFeatures Chris@0: */ Chris@0: public function testLeaveStuffAloneInStrings($code) { Chris@0: $stringifiedToken = '"' . addcslashes($code, '"\\') . '"'; Chris@0: Chris@0: $lexer = $this->getLexer(); Chris@0: $lexer->startLexing('assertSame(Tokens::T_CONSTANT_ENCAPSED_STRING, $lexer->getNextToken($text)); Chris@0: $this->assertSame($stringifiedToken, $text); Chris@0: $this->assertSame(0, $lexer->getNextToken()); Chris@0: } Chris@0: Chris@0: public function provideTestLexNewFeatures() { Chris@0: return array( Chris@0: array('yield from', array( Chris@0: array(Tokens::T_YIELD_FROM, 'yield from'), Chris@0: )), Chris@0: array("yield\r\nfrom", array( Chris@0: array(Tokens::T_YIELD_FROM, "yield\r\nfrom"), Chris@0: )), Chris@0: array('...', array( Chris@0: array(Tokens::T_ELLIPSIS, '...'), Chris@0: )), Chris@0: array('**', array( Chris@0: array(Tokens::T_POW, '**'), Chris@0: )), Chris@0: array('**=', array( Chris@0: array(Tokens::T_POW_EQUAL, '**='), Chris@0: )), Chris@0: array('??', array( Chris@0: array(Tokens::T_COALESCE, '??'), Chris@0: )), Chris@0: array('<=>', array( Chris@0: array(Tokens::T_SPACESHIP, '<=>'), Chris@0: )), Chris@0: array('0b1010110', array( Chris@0: array(Tokens::T_LNUMBER, '0b1010110'), Chris@0: )), Chris@0: array('0b1011010101001010110101010010101011010101010101101011001110111100', array( Chris@0: array(Tokens::T_DNUMBER, '0b1011010101001010110101010010101011010101010101101011001110111100'), Chris@0: )), Chris@0: array('\\', array( Chris@0: array(Tokens::T_NS_SEPARATOR, '\\'), Chris@0: )), Chris@0: array("<<<'NOWDOC'\nNOWDOC;\n", array( Chris@0: array(Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"), Chris@0: array(Tokens::T_END_HEREDOC, 'NOWDOC'), Chris@0: array(ord(';'), ';'), Chris@0: )), Chris@0: array("<<<'NOWDOC'\nFoobar\nNOWDOC;\n", array( Chris@0: array(Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"), Chris@0: array(Tokens::T_ENCAPSED_AND_WHITESPACE, "Foobar\n"), Chris@0: array(Tokens::T_END_HEREDOC, 'NOWDOC'), Chris@0: array(ord(';'), ';'), Chris@0: )), Chris@0: ); Chris@0: } Chris@0: }