예제 #1
0
 def test_init_kwargs_only(self):
     fsm = Fysom(initial='green',
                 events=[('panic', 'green', 'red'),
                         ('calm', 'red', 'green')])
     self.assertEqual(fsm.current, "green")
     fsm.panic()
     self.assertEqual(fsm.current, "red")
     fsm.calm()
     self.assertEqual(fsm.current, "green")
예제 #2
0
 def test_init_kwargs_only(self):
     fsm = Fysom(initial='green',
                 events=[('panic', 'green', 'red'),
                         ('calm', 'red', 'green')])
     self.assertEqual(fsm.current, "green")
     fsm.panic()
     self.assertEqual(fsm.current, "red")
     fsm.calm()
     self.assertEqual(fsm.current, "green")
예제 #3
0
 def test_kwargs_override_cfg(self):
     fsm = Fysom({
         'initial': 'green',
         'events': [
             {'name': 'panic', 'src': 'green', 'dst': 'red'},
             {'name': 'calm', 'src': 'red', 'dst': 'green'},
         ]},
         # override initial state and calm event
         initial='red', events=[('calm', 'red', 'black')])
     self.assertEqual(fsm.current, "red")
     fsm.calm()
     self.assertEqual(fsm.current, "black")
        class MyTestObject(object):
            def __init__(self):
                self._states = []
                self._fsm = Fysom({
                    'initial':
                    'green',
                    'events': [{
                        'name': 'warn',
                        'src': 'green',
                        'dst': 'yellow'
                    }, {
                        'name': 'panic',
                        'src': 'yellow',
                        'dst': 'red'
                    }, {
                        'name': 'calm',
                        'src': 'red',
                        'dst': 'yellow'
                    }, {
                        'name': 'clear',
                        'src': 'yellow',
                        'dst': 'green'
                    }],
                    'callbacks': {
                        'ongreen': self._on_green,
                        'onyellow': self._on_yellow,
                        'onred': self._on_red
                    }
                })

            def warn(self):
                self._fsm.warn()

            def panic(self):
                self._fsm.panic()

            def calm(self):
                self._fsm.calm()

            def clear(self):
                self._fsm.clear()

            def _on_green(self, *args, **kwargs):
                self._states.append('green')

            def _on_yellow(self, *args, **kwargs):
                self._states.append('yellow')

            def _on_red(self, *args, **kwargs):
                self._states.append('red')
예제 #5
0
 def test_tuples_as_trasition_spec(self):
     fsm = Fysom({
         'initial': 'green',
         'events': [  # freely mix dicts and tuples
             {'name': 'warn', 'src': 'green', 'dst': 'yellow'},
             ('panic', 'yellow', 'red'),
             ('calm', 'red', 'yellow'),
             {'name': 'clear', 'src': 'yellow', 'dst': 'green'}
         ]
     })
     fsm.warn()
     fsm.panic()
     self.assertEqual(fsm.current, 'red')
     fsm.calm()
     fsm.clear()
     self.assertEqual(fsm.current, 'green')
예제 #6
0
 def test_tuples_as_trasition_spec(self):
     fsm = Fysom({
         'initial':
         'green',
         'events': [  # freely mix dicts and tuples
             {
                 'name': 'warn',
                 'src': 'green',
                 'dst': 'yellow'
             }, ('panic', 'yellow', 'red'), ('calm', 'red', 'yellow'), {
                 'name': 'clear',
                 'src': 'yellow',
                 'dst': 'green'
             }
         ]
     })
     fsm.warn()
     fsm.panic()
     self.assertEqual(fsm.current, 'red')
     fsm.calm()
     fsm.clear()
     self.assertEqual(fsm.current, 'green')
        class MyTestObject(object):

            def __init__(self):
                self._states = []
                self._fsm = Fysom({
                    'initial': 'green',
                    'events': [
                        {'name': 'warn', 'src': 'green', 'dst': 'yellow'},
                        {'name': 'panic', 'src': 'yellow', 'dst': 'red'},
                        {'name': 'calm', 'src': 'red', 'dst': 'yellow'},
                        {'name': 'clear', 'src': 'yellow', 'dst': 'green'}
                    ],
                    'callbacks': {
                        'ongreen':  self._on_green,
                        'onyellow': self._on_yellow,
                        'onred':    self._on_red
                    }
                })

            def warn(self):
                self._fsm.warn()

            def panic(self):
                self._fsm.panic()

            def calm(self):
                self._fsm.calm()

            def clear(self):
                self._fsm.clear()

            def _on_green(self, *args, **kwargs):
                self._states.append('green')

            def _on_yellow(self, *args, **kwargs):
                self._states.append('yellow')

            def _on_red(self, *args, **kwargs):
                self._states.append('red')
예제 #8
0
 def test_kwargs_override_cfg(self):
     fsm = Fysom(
         {
             'initial':
             'green',
             'events': [
                 {
                     'name': 'panic',
                     'src': 'green',
                     'dst': 'red'
                 },
                 {
                     'name': 'calm',
                     'src': 'red',
                     'dst': 'green'
                 },
             ]
         },
         # override initial state and calm event
         initial='red',
         events=[('calm', 'red', 'black')])
     self.assertEqual(fsm.current, "red")
     fsm.calm()
     self.assertEqual(fsm.current, "black")
예제 #9
0
from fysom import Fysom

fsm = Fysom({
    'initial':
    'green',
    'events': [{
        'name': 'warn',
        'src': 'green',
        'dst': 'yellow'
    }, {
        'name': 'panic',
        'src': 'yellow',
        'dst': 'red'
    }, {
        'name': 'calm',
        'src': 'red',
        'dst': 'yellow'
    }, {
        'name': 'clear',
        'src': 'yellow',
        'dst': 'green'
    }]
})

if __name__ == '__main__':
    fsm.warn()
    print(fsm.current)
    fsm.calm()
    print(fsm.current)