} } $fsm = new xfFiniteStateMachine(array('on', 'off', 'burned out', 'broken')); $fsm->setInitialState('off'); $fsm->addTransitions(array(array('on', 'push', 'off'), array('off', 'push', 'on'), array('on', 'smash', 'broken'), array('off', 'smash', 'broken'), array('off', 'wait', 'off'), array('broken', 'replace', 'off'), array('broken', 'wait', 'broken'), array('burned out', 'replace', 'off'), array('on', 'short out', 'burned out'))); $t->diag('->addTransitions(), ->addTransition()'); try { $msg = '->addTransitions() fails if array is not a two dimensional array with 3 items in the 2nd dimension'; $fsm->addTransitions(array('foo')); $t->fail($msg); } catch (Exception $e) { $t->pass($msg); } try { $msg = '->addTransition() fails if the source state does not exist.'; $fsm->addTransition('exploded', 'implode', 'on'); $t->fail($msg); } catch (Exception $e) { $t->pass($msg); } try { $msg = '->addTransition() fails if the target source does not exist.'; $fsm->addTransition('off', 'explode', 'exploded'); $t->fail($msg); } catch (Exception $e) { $t->pass($msg); } try { $msg = '->addTransition() fails if the transition already exists.'; $fsm->addTransition('on', 'push', 'broken'); $t->fail($msg);