public function testThrowsExceptionIfSettingInvalidPattern()
 {
     $invalidPattern = 'foo';
     $this->expectException(InvalidPattern::class);
     $this->expectExceptionMessage(sprintf('The supplied pattern "%s" does not appear to be a valid regular expression', $invalidPattern));
     DefaultTransition::usePattern($invalidPattern);
 }
 public function testThrowsExceptionWhenProvidingInvalidInputToState()
 {
     $this->expectException(InvalidInputForState::class);
     $this->expectExceptionMessage('Cannot CLOSE a CLOSED object');
     $transitionTable = new DefaultTransitionTable(DefaultTransition::new('CLOSED + OPEN = OPENED'));
     try {
         $transitionTable->resolve(FlyweightState::named('CLOSED'), FlyweightInput::named('CLOSE'));
     } catch (InvalidInputForState $exception) {
         $this->assertSame(FlyweightInput::named('CLOSE'), $exception->getInput());
         $this->assertSame(FlyweightState::named('CLOSED'), $exception->getState());
         throw $exception;
     }
 }
 public function __construct()
 {
     $this->wrappedTransitionTable = new DefaultTransitionTable(DefaultTransition::new('WHITES_TURN + WHITE_MOVES = BLACKS_TURN'), DefaultTransition::new('BLACKS_TURN + BLACK_MOVES = WHITES_TURN'), DefaultTransition::new('WHITES_TURN + CHECKMATE = WHITE_WINS'), DefaultTransition::new('BLACKS_TURN + CHECKMATE = BLACK_WINS'), DefaultTransition::new('WHITES_TURN + STALEMATE = DRAW'), DefaultTransition::new('BLACKS_TURN + STALEMATE = DRAW'));
 }