def test_blueprint_simple(self): states = ['A', 'B', 'C', 'D'] # Define with list of dictionaries transitions = [{ 'trigger': 'walk', 'source': 'A', 'dest': 'B' }, { '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') self.assertEqual(len(m.blueprints['states']), 4) self.assertEqual(m.blueprints['states'][3], 'D') self.assertEqual(len(m.blueprints['transitions']), 3) 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_use_machine_as_model(self): states = ['A', 'B', 'C', 'D'] m = Machine(states=states, initial='A') m.add_transition('move', 'A', 'B') m.add_transition('move_to_C', 'B', 'C') m.move() self.assertEquals(m.state, 'B')
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_blueprint_nested(self): 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'}, {'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') self.assertEqual(len(m.blueprints['states']), 4) self.assertEqual(m.blueprints['states'][3], 'D') self.assertEqual(len(m.blueprints['transitions']), 3) 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')