markTestSkipped('HHVM does not throw warnings from token_get_all()'); } $lexer = $this->getLexer(['usedAttributes' => [ 'comments', 'startLine', 'endLine', 'startFilePos', 'endFilePos' ]]); $lexer->startLexing($code); $errors = $lexer->getErrors(); $this->assertSame(count($messages), count($errors)); for ($i = 0; $i < count($messages); $i++) { $this->assertSame($messages[$i], $errors[$i]->getMessageWithColumnInfo($code)); } } public function provideTestError() { return array( array("getLexer($options); $lexer->startLexing($code); while ($id = $lexer->getNextToken($value, $startAttributes, $endAttributes)) { $token = array_shift($tokens); $this->assertSame($token[0], $id); $this->assertSame($token[1], $value); $this->assertEquals($token[2], $startAttributes); $this->assertEquals($token[3], $endAttributes); } } public function provideTestLex() { return array( // tests conversion of closing PHP tag and drop of whitespace and opening tags array( 'plaintext', array(), array( array( Tokens::T_STRING, 'tokens', array('startLine' => 1), array('endLine' => 1) ), array( ord(';'), '?>', array('startLine' => 1), array('endLine' => 1) ), array( Tokens::T_INLINE_HTML, 'plaintext', array('startLine' => 1, 'hasLeadingNewline' => false), array('endLine' => 1) ), ) ), // tests line numbers array( ' 2), array('endLine' => 2) ), array( Tokens::T_STRING, 'token', array('startLine' => 2), array('endLine' => 2) ), array( ord('$'), '$', array( 'startLine' => 3, 'comments' => array( new Comment\Doc('/** doc' . "\n" . 'comment */', 2, 14), ) ), array('endLine' => 3) ), ) ), // tests comment extraction array( ' 2, 'comments' => array( new Comment('/* comment */', 1, 6), new Comment('// comment' . "\n", 1, 20), new Comment\Doc('/** docComment 1 */', 2, 31), new Comment\Doc('/** docComment 2 */', 2, 50), ), ), array('endLine' => 2) ), ) ), // tests differing start and end line array( ' 1), array('endLine' => 2) ), ) ), // tests exact file offsets array( ' array('startFilePos', 'endFilePos')), array( array( Tokens::T_CONSTANT_ENCAPSED_STRING, '"a"', array('startFilePos' => 6), array('endFilePos' => 8) ), array( ord(';'), ';', array('startFilePos' => 9), array('endFilePos' => 9) ), array( Tokens::T_CONSTANT_ENCAPSED_STRING, '"b"', array('startFilePos' => 18), array('endFilePos' => 20) ), array( ord(';'), ';', array('startFilePos' => 21), array('endFilePos' => 21) ), ) ), // tests token offsets array( ' array('startTokenPos', 'endTokenPos')), array( array( Tokens::T_CONSTANT_ENCAPSED_STRING, '"a"', array('startTokenPos' => 1), array('endTokenPos' => 1) ), array( ord(';'), ';', array('startTokenPos' => 2), array('endTokenPos' => 2) ), array( Tokens::T_CONSTANT_ENCAPSED_STRING, '"b"', array('startTokenPos' => 5), array('endTokenPos' => 5) ), array( ord(';'), ';', array('startTokenPos' => 6), array('endTokenPos' => 6) ), ) ), // tests all attributes being disabled array( ' array()), array( array( Tokens::T_VARIABLE, '$bar', array(), array() ), array( ord(';'), ';', array(), array() ) ) ) ); } /** * @dataProvider provideTestHaltCompiler */ public function testHandleHaltCompiler($code, $remaining) { $lexer = $this->getLexer(); $lexer->startLexing($code); while (Tokens::T_HALT_COMPILER !== $lexer->getNextToken()); $this->assertSame($remaining, $lexer->handleHaltCompiler()); $this->assertSame(0, $lexer->getNextToken()); } public function provideTestHaltCompiler() { return array( array('Remaining Text', 'Remaining Text'), //array('getLexer(); $lexer->startLexing('getNextToken()); $lexer->handleHaltCompiler(); } public function testGetTokens() { $code = 'getLexer(); $lexer->startLexing($code); $this->assertSame($expectedTokens, $lexer->getTokens()); } }