Пример #1
0
    def test_userdata_nesting(self):
        """Test serial manipulation of userdata."""
        sm = StateMachine(['done', 'preempted', 'aborted'])
        with sm:
            StateMachine.add('SETTER', Setter(), {'done': 'GETTER'})
            StateMachine.add('GETTER', Getter(), {'done': 'NEST'})

            sm2 = StateMachine(['done', 'aborted', 'preempted'])
            sm2.register_input_keys(['a'])
            with sm2:
                StateMachine.add(
                    'ASSERTER',
                    ConditionState(lambda ud: 'a' in ud, input_keys=['a']), {
                        'true': 'done',
                        'false': 'aborted'
                    })
            StateMachine.add('NEST', sm2)

        outcome = sm.execute()

        assert outcome == 'done'
        assert 'a' in sm.userdata
        assert 'b' in sm.userdata
        assert sm.userdata.a == 'A'
        assert sm.userdata.b == 'A'
Пример #2
0
    def test_userdata_nesting2(self):
        """Test setting of userdata manually on construction."""
        sm = StateMachine(['done', 'aborted', 'preempted'])
        sm.userdata.foo = 1
        with sm:
            StateMachine.add('SETTER', Setter(), {'done': 'GETTER'})
            StateMachine.add('GETTER', Getter(), {'done': 'NEST'})

            sm2 = StateMachine(['done', 'aborted', 'preempted'])
            sm2.register_input_keys(['foo'])
            with sm2:
                StateMachine.add(
                    'ASSERTER',
                    ConditionState(lambda ud: 'foo' in ud, input_keys=['foo']),
                    {
                        'true': 'done',
                        'false': 'aborted'
                    })
            StateMachine.add('NEST', sm2)

        outcome = sm.execute()

        assert outcome == 'done'
        assert 'foo' in sm.userdata