}
}
$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);