def test__EventNoBraces_NonActions_NonCondition__Valid(self):
     example = 'EvConfig1'
     parser = TransitionParser(example)
     events, condition, actions = parser.get_transition_items()
     self.assertEqual(events, 'EvConfig1')
     self.assertEqual(actions, '')
     self.assertEqual(condition, '')
 def test__EventArgEventArg_ActionAction_Condition__Valid(self):
     example = 'EvConfig1(1), EvConfig2(2) [ i > k ] / Action1() { [] }, Action2()'
     parser = TransitionParser(example)
     events, condition, actions = parser.get_transition_items()
     self.assertEqual(events, 'EvConfig1(1), EvConfig2(2)')
     self.assertEqual(condition, 'i > k')
     self.assertEqual(actions, 'Action1() { [] }, Action2()')
 def test__Event_ActionPlusStringAction_Condition__Valid(self):
     example = 'EvConfig1() [ i > k ] / Action1() { [ "Hello Denis" ] }, Action2()'
     parser = TransitionParser(example)
     events, condition, actions = parser.get_transition_items()
     self.assertEqual(events, 'EvConfig1()')
     self.assertEqual(condition, 'i > k')
     self.assertEqual(actions, 'Action1() { [ "Hello Denis" ] }, Action2()')
 def test__Event_NonActions_Condition__Valid(self):
     example = 'EvConfig1() [ i > k ]'
     parser = TransitionParser(example)
     events, condition, actions = parser.get_transition_items()
     self.assertEqual(events, 'EvConfig1()')
     self.assertEqual(condition, 'i > k')
     self.assertEqual(actions, '')
 def test__Event_ActionAction_Condition2__Valid(self):
     example = 'powerOn{} [ name.size() > default_name.size() ] / Action(), Action2()'
     parser = TransitionParser(example)
     events, condition, actions = parser.get_transition_items()
     self.assertEqual(events, 'powerOn{}')
     self.assertEqual(condition, 'name.size() > default_name.size()')
     self.assertEqual(actions, 'Action(), Action2()')
Esempio n. 6
0
    def _parse_transition(self, instructions, parent_state=None):
        """

        :param instructions:
        :param parent_state:
        :return:
        """
        states = set()
        transitions = set()
        transition_meta = _transition.finditer(instructions)
        for transition in transition_meta:
            from_state_name = transition.group('state_from')
            to_state_name = transition.group('state_to')
            comment = transition.group('comment')
            events = []
            actions = []
            condition = None
            if comment is not None:
                parser = TransitionParser(comment)
                raw_events, raw_condition, raw_actions = parser.get_transition_items(
                )
                events = self._parse_events(raw_events)
                actions = self._parse_actions(raw_actions)
                condition = self._parse_condition(raw_condition)
            if from_state_name != '[*]':
                from_state = State.create_state(from_state_name, parent_state)
                for state in states:
                    if from_state == state:
                        state.sub_states.update(from_state.sub_states)
                        state.transitions.update(from_state.transitions)
                        break
                else:
                    states.add(from_state)
            else:
                from_state = parent_state
            if to_state_name != '[*]':
                to_state = State.create_state(to_state_name, parent_state)
                for state in states:
                    if to_state == state:
                        state.sub_states.update(to_state.sub_states)
                        state.transitions.update(to_state.transitions)
                        break
                else:
                    states.add(to_state)
            else:
                to_state = parent_state
            transitions.add(
                Transition(from_state, to_state, events, actions, condition))
        return states, transitions
 def test__Event_ActionPlusStringAction_Condition__Invalid3(self):
     example = "EvConfig1() / Action1() { [ Hello Denis' ] }, Action2() [ i > k ]"
     with self.assertRaises(ValidationError) as context:
         parser = TransitionParser(example)
 def test__Event_ActionAction_Condition__Invalid(self):
     example = 'EvConfig() [ i > k ]] / Action1() { [] }, Action2()'
     with self.assertRaises(ValidationError) as context:
         parser = TransitionParser(example)
 def test__EventArgEventArg_ActionAction_Condition__Invalid3(self):
     example = 'EvConfig1(1), EvConfig2(2) [ i > k ] / Action1() { [ }, Action2()'
     with self.assertRaises(ValidationError) as context:
         parser = TransitionParser(example)