Exemple #1
0
 public function testPopToken_CustomTokens()
 {
     $parser = new \vc\Tokens\Parser(new \r8\Stream\In\String('<?php if(!$$v[0]=1<5){' . "\n" . '~1%1*1+1-1/1&1^1|1>0?:`w`.@a("$a",1);' . "\n" . '}?>'));
     $result = array(array(Token::T_OPEN_TAG, '<?php ', 1), array(Token::T_IF, 'if', 1), array(Token::T_PARENS_OPEN, '(', 1), array(Token::T_LOGICAL_NOT, '!', 1), array(Token::T_VAR_VARIABLE, '$', 1), array(Token::T_VARIABLE, '$v', 1), array(Token::T_BRACKET_OPEN, '[', 1), array(Token::T_LNUMBER, '0', 1), array(Token::T_BRACKET_CLOSE, ']', 1), array(Token::T_EQUALS, '=', 1), array(Token::T_LNUMBER, '1', 1), array(Token::T_LESS_THAN, '<', 1), array(Token::T_LNUMBER, '5', 1), array(Token::T_PARENS_CLOSE, ')', 1), array(Token::T_CURLY_OPEN, '{', 1), array(Token::T_WHITESPACE, "\n", 1), array(Token::T_BIT_NOT, '~', 2), array(Token::T_LNUMBER, '1', 2), array(Token::T_MODULO, '%', 2), array(Token::T_LNUMBER, '1', 2), array(Token::T_MULTIPLY, '*', 2), array(Token::T_LNUMBER, '1', 2), array(Token::T_ADD, '+', 2), array(Token::T_LNUMBER, '1', 2), array(Token::T_MINUS, '-', 2), array(Token::T_LNUMBER, '1', 2), array(Token::T_DIVIDE, '/', 2), array(Token::T_LNUMBER, '1', 2), array(Token::T_AMPERSAND, '&', 2), array(Token::T_LNUMBER, '1', 2), array(Token::T_BIT_XOR, '^', 2), array(Token::T_LNUMBER, '1', 2), array(Token::T_BIT_OR, '|', 2), array(Token::T_LNUMBER, '1', 2), array(Token::T_GREATER_THAN, '>', 2), array(Token::T_LNUMBER, '0', 2), array(Token::T_TERNARY, '?', 2), array(Token::T_TERNARY_ELSE, ':', 2), array(Token::T_BACKTICK, '`', 2), array(Token::T_ENCAPSED_AND_WHITESPACE, 'w', 2), array(Token::T_BACKTICK, '`', 2), array(Token::T_CONCAT, '.', 2), array(Token::T_SUPPRESS, '@', 2), array(Token::T_STRING, 'a', 2), array(Token::T_PARENS_OPEN, '(', 2), array(Token::T_QUOTE, '"', 2), array(Token::T_VARIABLE, '$a', 2), array(Token::T_QUOTE, '"', 2), array(Token::T_COMMA, ',', 2), array(Token::T_LNUMBER, '1', 2), array(Token::T_PARENS_CLOSE, ')', 2), array(Token::T_SEMICOLON, ';', 2), array(Token::T_WHITESPACE, "\n", 2), array(Token::T_CURLY_CLOSE, '}', 3), array(Token::T_CLOSE_TAG, '?>', 3));
     foreach ($result as $offset => $token) {
         $this->assertTrue($parser->hasToken(), "Ran out of tokens at offset #{$offset}");
         $this->assertEquals(Token::fromArray($token), $parser->popToken(), "Token mismatch at offset #{$offset}");
     }
     $this->assertEndOfTokens($parser);
 }
Exemple #2
0
 public function testFromArray()
 {
     $this->assertEquals(new Token(Token::T_ECHO, "echo", 1), Token::fromArray(array(Token::T_ECHO, "echo", 1)));
 }
Exemple #3
0
 /**
  * Builds a token from a mixed input
  *
  * @param Mixed $input
  * @return \vc\Tokens\Token
  */
 private function buildToken($input)
 {
     // In most cases, token_get_all represents a token as an array
     if (is_array($input)) {
         return \vc\Tokens\Token::fromArray($input);
     }
     // When a token is reinstated, its object gets shifted onto this list
     if ($input instanceof \vc\Tokens\Token) {
         return $input;
     }
     // For custom tokens, we need to derive the line number based on the
     // previous token. If the previous token contains a carriage return,
     // then we need to manually bump the value up
     $line = $this->current->getLine();
     if ($this->current->is(\vc\Tokens\Token::T_WHITESPACE)) {
         $content = $this->current->getContent();
         $line += substr_count($content, "\n") + substr_count($content, "\r");
     }
     return new \vc\Tokens\Token(self::lookupToken($input), $input, $line);
 }