Example #1
0
 /**
  * @param \Khaos\FSM\State\State $initialState
  * @param \Khaos\FSM\Stateful $context
  * @param \Khaos\FSM\Transition\Transition $t1
  * @param \Khaos\FSM\Transition\Transition $t2
  * @param \Khaos\FSM\State\State $s1
  * @param \Khaos\FSM\State\State $s2
  */
 function let($initialState, $context, $t1, $t2, $s1, $s2)
 {
     $context->setCurrentState($initialState)->willReturn();
     $context->getCurrentState()->willReturn($initialState);
     $this->beConstructedWith($initialState, $context);
     $t1->can('t1', $context, $this->getWrappedObject())->willReturn(true);
     $t1->can(Argument::any(), $context, $this->getWrappedObject())->willReturn(false);
     $t1->apply('t1', $context, $this->getWrappedObject())->willReturn('S1');
     $t1->getTo()->willReturn($s1);
     $t2->can('t2', $context, $this->getWrappedObject())->willReturn(true);
     $t2->can(Argument::any(), $context, $this->getWrappedObject())->willReturn(false);
     $t2->apply('t2', $context, $this->getWrappedObject())->willReturn('S2');
     $t2->getTo()->willReturn($s2);
     $initialState->getTransitions()->willReturn([$t1, $t2]);
 }
Example #2
0
 /**
  * Apply Transition
  *
  * @param mixed    $input
  * @param Stateful $context
  * @param Runner   $runner
  *
  * @return mixed
  */
 public function apply($input, Stateful $context, Runner $runner)
 {
     $context->setCurrentState($this->to);
     if ($this->action !== null && is_callable($this->action)) {
         return call_user_func($this->action, $input, $context, $runner, $this);
     }
     if ($input instanceof InputSequence) {
         $input->pop();
     }
     return $this->action ?: (string) $this->to;
 }
 /**
  * @inheritDoc
  *
  * @var InputSequence $input
  * @var UsageParserContext       $context
  * @var BacktrackingRunner       $runner
  */
 public function apply($input, Stateful $context, Runner $runner)
 {
     $context->setCurrentState($this->to);
     return new Argument($this->argument, $input->pop());
 }
Example #4
0
 /**
  * @inheritDoc
  *
  * @var InputSequence      $input
  * @var UsageParserContext $context
  * @var BacktrackingRunner $runner
  */
 public function apply($input, Stateful $context, Runner $runner)
 {
     $context->setCurrentState($this->to);
     return null;
 }
Example #5
0
 /**
  * Step Runner
  *
  * A basic machine runner where each call to input correlates to a single
  * transition in the machine.
  *
  * @param State     $initialState
  * @param Stateful  $context
  */
 public function __construct(State $initialState, Stateful $context = null)
 {
     $this->context = $context ?: new Context();
     $this->context->setCurrentState($initialState);
 }
Example #6
0
 /**
  * @inheritDoc
  *
  * @var InputSequence $input
  * @var UsageParserContext       $context
  * @var BacktrackingRunner       $runner
  */
 public function apply($input, Stateful $context, Runner $runner)
 {
     $context->setCurrentState($this->to);
     return $input->getOption($this->optionDefinition);
 }