예제 #1
0
 public function testCallGetNextStateWithAnInvalidTokenWillThrowAnException()
 {
     $tokenStore = m::mock(TokenStoreInterface::class);
     $tokenStore->shouldReceive('getTokens')->andReturn([]);
     $state = new State($tokenStore);
     $state->addStateTarget(Token::T_CONTENT, $state);
     static::assertSame($state, $state->getNextState(Token::T_CONTENT));
     static::expectException(RuntimeException::class);
     $state->getNextState(Token::T_ESCAPE);
 }
예제 #2
0
 /**
  * @param TokenStoreInterface $tokenStore
  *
  * @return State The default starting state
  */
 public function buildStates(TokenStoreInterface $tokenStore)
 {
     $initial = new State($tokenStore, State::S_INITIAL_TOKENS);
     $any = new State($tokenStore, State::S_ANY_TOKENS);
     $inQuote = new State($tokenStore, State::S_IN_QUOTE_TOKENS);
     $inEscape = new State($tokenStore, State::S_IN_ESCAPE_TOKENS);
     $inQuoteEscape = new State($tokenStore, State::S_IN_QUOTE_ESCAPE_TOKENS);
     $initial->addStateTarget(Token::T_ANY & ~Token::T_QUOTE & ~Token::T_ESCAPE, $any);
     $initial->addStateTarget(Token::T_QUOTE, $inQuote);
     $initial->addStateTarget(Token::T_ESCAPE, $inEscape);
     // generate state mapping
     $any->addStateTarget(Token::T_ANY & ~Token::T_QUOTE & ~Token::T_ESCAPE, $any);
     $any->addStateTarget(Token::T_QUOTE, $inQuote);
     $any->addStateTarget(Token::T_ESCAPE, $inEscape);
     $inQuote->addStateTarget(Token::T_CONTENT | Token::T_DOUBLE_QUOTE, $inQuote);
     $inQuote->addStateTarget(Token::T_QUOTE, $any);
     $inQuote->addStateTarget(Token::T_ESCAPE, $inQuoteEscape);
     $inEscape->addStateTarget(Token::T_CONTENT, $any);
     $inQuoteEscape->addStateTarget(Token::T_CONTENT, $inQuote);
     return $initial;
 }