def test_blueprint_nested(self): c1 = NestedState('C_1', parent='C') c2 = NestedState('C_2', parent='C') c3 = NestedState('C_3', parent='C') c = NestedState('C', children=[c1, c2, c3]) states = ['A', {'name': 'B', 'on_enter': 'chirp', 'children': ['1', '2', '3']}, c, 'D'] # Define with list of dictionaries transitions = [ {'trigger': 'walk', 'source': 'A', 'dest': 'B','before': 'before_state_change', 'after': 'after_state_change' }, {'trigger': 'run', 'source': 'B', 'dest': 'C'}, {'trigger': 'sprint', 'source': 'C', 'dest': 'D'} ] m = Machine(states=states, transitions=transitions, before_state_change='before_state_change', after_state_change='after_state_change', initial='A') m.before_state_change = MagicMock() m.after_state_change = MagicMock() self.assertEqual(len(m.blueprints['states']), 4) self.assertEqual(m.blueprints['states'][3], 'D') self.assertEqual(len(m.blueprints['transitions']), 3) # transition 'walk' before should contain two calls of the same method self.assertEqual(len(m.blueprints['transitions'][0]['before']), 2) self.assertEqual(len(m.blueprints['transitions'][0]['after']), 2) self.assertEqual(len(m.blueprints['transitions'][1]['before']), 1) self.assertEqual(m.blueprints['transitions'][2]['trigger'], 'sprint') m.add_transition('fly', 'D', 'A') self.assertEqual(len(m.blueprints['transitions']), 4) self.assertEqual(m.blueprints['transitions'][3]['source'], 'D')
def test_blueprint_nested(self): c1 = NestedState('C_1', parent='C') c2 = NestedState('C_2', parent='C') c3 = NestedState('C_3', parent='C') c = NestedState('C', children=[c1, c2, c3]) states = [ 'A', { 'name': 'B', 'on_enter': 'chirp', 'children': ['1', '2', '3'] }, c, 'D' ] # Define with list of dictionaries transitions = [{ 'trigger': 'walk', 'source': 'A', 'dest': 'B', 'before': 'before_state_change', 'after': 'after_state_change' }, { 'trigger': 'run', 'source': 'B', 'dest': 'C' }, { 'trigger': 'sprint', 'source': 'C', 'dest': 'D' }] m = Machine(states=states, transitions=transitions, before_state_change='before_state_change', after_state_change='after_state_change', initial='A') m.before_state_change = MagicMock() m.after_state_change = MagicMock() self.assertEqual(len(m.blueprints['states']), 4) self.assertEqual(m.blueprints['states'][3], 'D') self.assertEqual(len(m.blueprints['transitions']), 3) # transition 'walk' before should contain two calls of the same method self.assertEqual(len(m.blueprints['transitions'][0]['before']), 2) self.assertEqual(len(m.blueprints['transitions'][0]['after']), 2) self.assertEqual(len(m.blueprints['transitions'][1]['before']), 1) self.assertEqual(m.blueprints['transitions'][2]['trigger'], 'sprint') m.add_transition('fly', 'D', 'A') self.assertEqual(len(m.blueprints['transitions']), 4) self.assertEqual(m.blueprints['transitions'][3]['source'], 'D')
def test_callbacks_duplicate(self): transitions = [ {'trigger': 'walk', 'source': 'A', 'dest': 'C', 'before': 'before_state_change', 'after': 'after_state_change'}, {'trigger': 'run', 'source': 'B', 'dest': 'C'} ] m = Machine(None, states=['A', 'B', 'C'], transitions=transitions, before_state_change='before_state_change', after_state_change='after_state_change', send_event=True, initial='A', auto_transitions=True) m.before_state_change = MagicMock() m.after_state_change = MagicMock() m.walk() self.assertEqual(m.before_state_change.call_count, 2) self.assertEqual(m.after_state_change.call_count, 2)