Merge "Disallow adding transitions from terminal states"

This commit is contained in:
Jenkins 2015-06-30 19:30:29 +00:00 committed by Gerrit Code Review
commit f511ea9f94
2 changed files with 10 additions and 0 deletions

View File

@ -188,6 +188,10 @@ class FiniteMachine(object):
raise excp.NotFound("Can not add a transition on event '%s' that"
" ends in a undefined state '%s'"
% (event, end))
if self._states[start]['terminal']:
raise excp.InvalidState("Can not add a transition on event '%s'"
" that starts in the terminal state '%s'"
% (event, start))
self._transitions[start][event] = _Jump(end,
self._states[end]['on_enter'],
self._states[start]['on_exit'])

View File

@ -60,6 +60,12 @@ class FSMTest(testcase.TestCase):
m.add_state('unknown')
self.assertIn('unknown', m)
def test_no_add_transition_terminal(self):
m = self._create_fsm('up')
m.add_state('down', terminal=True)
self.assertRaises(excp.InvalidState,
m.add_transition, 'down', 'up', 'jump')
def test_duplicate_state(self):
m = self._create_fsm('unknown')
self.assertRaises(excp.Duplicate, m.add_state, 'unknown')