Example #1
0
    def test_blueprint_reuse(self):
        states = ['1', '2', '3']
        transitions = [
            {'trigger': 'increase', 'source': '1', 'dest': '2'},
            {'trigger': 'increase', 'source': '2', 'dest': '3'},
            {'trigger': 'decrease', 'source': '3', 'dest': '2'},
            {'trigger': 'decrease', 'source': '1', 'dest': '1'},
            {'trigger': 'reset', 'source': '*', 'dest': '1'},
        ]

        counter = Machine(states=states, transitions=transitions, before_state_change='check',
                          after_state_change='clear', initial='1')

        new_states = ['A', 'B', {'name':'C', 'children': counter}]
        new_transitions = [
            {'trigger': 'forward', 'source': 'A', 'dest': 'B'},
            {'trigger': 'forward', 'source': 'B', 'dest': 'C'},
            {'trigger': 'backward', 'source': 'C', 'dest': 'B'},
            {'trigger': 'backward', 'source': 'B', 'dest': 'A'},
            {'trigger': 'calc', 'source': '*', 'dest': 'C'},
        ]

        walker = Machine(states=new_states, transitions=new_transitions, before_state_change='watch',
                         after_state_change='look_back', initial='A')

        walker.watch = lambda: 'walk'
        walker.look_back = lambda: 'look_back'
        walker.check = lambda: 'check'
        walker.clear = lambda: 'clear'

        with self.assertRaises(MachineError):
            walker.increase()
        self.assertEqual(walker.state, 'A')
        walker.forward()
        walker.forward()
        self.assertEqual(walker.state, 'C_1')
        walker.increase()
        self.assertEqual(walker.state, 'C_2')
        walker.reset()
        self.assertEqual(walker.state, 'C_1')
        walker.to_A()
        self.assertEqual(walker.state, 'A')
        walker.calc()
        self.assertEqual(walker.state, 'C_1')
Example #2
0
    def test_blueprint_reuse(self):
        states = ['1', '2', '3']
        transitions = [
            {
                'trigger': 'increase',
                'source': '1',
                'dest': '2'
            },
            {
                'trigger': 'increase',
                'source': '2',
                'dest': '3'
            },
            {
                'trigger': 'decrease',
                'source': '3',
                'dest': '2'
            },
            {
                'trigger': 'decrease',
                'source': '1',
                'dest': '1'
            },
            {
                'trigger': 'reset',
                'source': '*',
                'dest': '1'
            },
        ]

        counter = Machine(states=states,
                          transitions=transitions,
                          before_state_change='check',
                          after_state_change='clear',
                          initial='1')

        new_states = ['A', 'B', {'name': 'C', 'children': counter}]
        new_transitions = [
            {
                'trigger': 'forward',
                'source': 'A',
                'dest': 'B'
            },
            {
                'trigger': 'forward',
                'source': 'B',
                'dest': 'C'
            },
            {
                'trigger': 'backward',
                'source': 'C',
                'dest': 'B'
            },
            {
                'trigger': 'backward',
                'source': 'B',
                'dest': 'A'
            },
            {
                'trigger': 'calc',
                'source': '*',
                'dest': 'C'
            },
        ]

        walker = Machine(states=new_states,
                         transitions=new_transitions,
                         before_state_change='watch',
                         after_state_change='look_back',
                         initial='A')

        walker.watch = lambda: 'walk'
        walker.look_back = lambda: 'look_back'
        walker.check = lambda: 'check'
        walker.clear = lambda: 'clear'

        with self.assertRaises(MachineError):
            walker.increase()
        self.assertEqual(walker.state, 'A')
        walker.forward()
        walker.forward()
        self.assertEqual(walker.state, 'C_1')
        walker.increase()
        self.assertEqual(walker.state, 'C_2')
        walker.reset()
        self.assertEqual(walker.state, 'C_1')
        walker.to_A()
        self.assertEqual(walker.state, 'A')
        walker.calc()
        self.assertEqual(walker.state, 'C_1')