Exemple #1
0
 private function newAccessor()
 {
     $fsm = new Fsm('my_fsm');
     $fsm->setStates(array(new State('s1', true, true), new State('s2'), new State('s3'), new State('s4', false, true), new State('s5', false, true)))->setTransitions(array(new Transition('t1', 's1', 's2'), new Transition('t2', 's1', 's3'), new Transition('t3', 's3', 's1'), new Transition('t4', 's2', 's4'), new Transition('t5', 's2', 's5')));
     $validator = new FsmValidator();
     $validator->addAssert(new Assert\NoDuplicateStatesAssert())->addAssert(new Assert\NoDuplicateTransitionNamesAssert())->addAssert(new Assert\NoTransitionWithUndefinedStatesAssert())->addAssert(new Assert\OneInitialStateAssert());
     $validator->validate($fsm);
     return new FsmAccessor($fsm, $validator, 'Document', 'myState');
 }
Exemple #2
0
 public function testReturnValue()
 {
     $fsm = $this->getNewInvalidFsm();
     $validator = new FsmValidator();
     $validator->validate($fsm);
     $fsm = $this->getNewValidFsm();
     $validator = new FsmValidator();
     $validator->validate($fsm);
     // build up the validator adding asserts
     $fsm = $this->getNewValidFsm();
     $validator = new FsmValidator();
     $validator->addAssert(new Assert\NoDuplicateStatesAssert());
     $validator->validate($fsm);
 }
Exemple #3
0
<?php

require __DIR__ . '/../vendor/autoload.php';
use Michcald\Fsm\Model\Fsm;
use Michcald\Fsm\Model\State;
use Michcald\Fsm\Model\Transition;
use Michcald\Fsm\Validator\FsmValidator;
// initializing the FSM
$fsm = new Fsm('fsm1');
$fsm->setStates(array(new State('s1', true), new State('s2'), new State('s3'), new State('s4', false, true)))->setTransitions(array(new Transition('t1', 's1', 's2'), new Transition('t2', 's1', 's3'), new Transition('t3', 's3', 's1'), new Transition('t4', 's2', 's4')));
// validating the FSM
$validator = new FsmValidator();
$isValid = $validator->validate($fsm);
if ($isValid) {
    printf('FSM <%s> is valid%s', $fsm->getName(), PHP_EOL);
} else {
    printf('FSM <%s> is NOT valid%s', $fsm->getName(), PHP_EOL);
}
// or we can use exceptions
// adding an invalid transition
$fsm->addTransition(new Transition('t1', 's1', 's2'));
try {
    $validator->validate($fsm);
    printf('FSM <%s> is valid%s', $fsm->getName(), PHP_EOL);
} catch (\Exception $e) {
    printf('FSM <%s> is NOT valid%s', $fsm->getName(), PHP_EOL);
}