Exemplo n.º 1
0
    def test_add_fsm_to_state_when_memory_is_empty(self):
        fsm = FSM(1)
        nested_fsm = FSM('1_1')
        fsm.add_fsm_to_memory(1, nested_fsm)

        log.debug("test_add_fsm_to_state_when_memory_is_empty: %s" , fsm.memory)
        self.assertEqual(fsm.memory.get(1), [nested_fsm])
Exemplo n.º 2
0
    def test_add_fsm_to_state_when_memory_is_empty(self):
        fsm = FSM(1)
        nested_fsm = FSM('1_1')
        fsm.add_fsm_to_memory(1, nested_fsm)

        log.debug("test_add_fsm_to_state_when_memory_is_empty: %s", fsm.memory)
        self.assertEqual(fsm.memory.get(1), [nested_fsm])
Exemplo n.º 3
0
class FSMBuilderState(object):
	def __init__(self, parent= None):
	    self.state_gen = generate_ints()
	    self.current_state = self.state_gen.next()
	    if (parent is not None): 
	    	self.parent = parent  
	    	self.fsm = FSM(format_state_name(self.current_state, self.parent.get_current_state()))
	    	self.set_interrupt_transition = self.parent.set_interrupt_transition
	    	self.top_parent = parent.top_parent
	    else: 
	    	self.fsm = FSM(self.current_state)
	    	self.top_parent = self
	    	self.set_interrupt_transition = False
	    self.start_new_par_branch = False
	    # Choice States
	    self.choice_start_state = []
	    self.choice_end_state = []
	    # Recursion states
	    self.recursions_states = {}
	    self.parent = parent  

	def format_state_name(self, state):
		if self.parent is not None:
			return "%s_%s" %(self.parent.get_current_state(), state)
		else: return state
	 
	def move_current_state(self, value = None):
		if value is None:
			self.current_state = self.state_gen.next()
		else: 
			self.current_state = value
		return self.current_state
	def get_current_state(self):
		return self.current_state
		
	def add_transition(self, transition, assertion = None, transition_context  = None):	        
	       
	        if assertion is not None: preprocess_assertion = Assertion.create(assertion) 
	        else: preprocess_assertion = assertion
	        
		if self.parent is not None: 
			suffix = self.parent.get_current_state()
			self.parent.fsm.add_nested_transition(transition, 
								self.parent.get_current_state(),
								format_state_name(self.get_current_state(), suffix), 
								format_state_name(self.move_current_state(), suffix),
								preprocess_assertion, 
								transition_context)
		else:
			self.fsm.add_transition(transition, 
						self.get_current_state(), 
						self.move_current_state(), 
						preprocess_assertion, 
						transition_context)
		
		# We are in interrup block and want to set the first transition that occur as interrupt_transition
	        # This is a global try catch. We assume that do wraps the whole program 
	        if self.set_interrupt_transition: 
	        	self.set_interrupt_transition = False
	        	self.fsm.add_interrupt_transition(transition, self.interrupt_start_state)
Exemplo n.º 4
0
    def test_get_transition_from_memory_when_there_is_a_match(self):
        fsm = FSM(1)
        first_fsm = self.get_test_fsm()
        fsm.memory = {1: [first_fsm]}

        (_, _, next_state) = fsm.get_transition('a', 1)
        self.assertEqual(next_state,1)
        self.assertEqual(fsm.memory.get(1),[first_fsm])
Exemplo n.º 5
0
    def test_get_transition_from_memory_when_there_is_a_match(self):
        fsm = FSM(1)
        first_fsm = self.get_test_fsm()
        fsm.memory = {1: [first_fsm]}

        (_, _, next_state) = fsm.get_transition('a', 1)
        self.assertEqual(next_state, 1)
        self.assertEqual(fsm.memory.get(1), [first_fsm])
Exemplo n.º 6
0
    def test_get_normal_transition_when_there_is_a_match(self):
        fsm = FSM(1)
        fsm.state_transitions = {('b', 1): (None, None, 2)}
        first_fsm = self.get_test_fsm()
        fsm.memory = {2: [first_fsm]}

        (_, _, next_state) = fsm.get_transition('b', 1)
        self.assertEqual(next_state, 2)
        self.assertEqual(fsm.memory.get(2), [first_fsm])
Exemplo n.º 7
0
    def test_get_normal_transition_when_there_is_a_match(self):
        fsm = FSM(1)
        fsm.state_transitions = {('b', 1):(None, None, 2)}
        first_fsm = self.get_test_fsm()
        fsm.memory = {2: [first_fsm]}

        (_, _, next_state) = fsm.get_transition('b', 1)
        self.assertEqual(next_state,2)
        self.assertEqual(fsm.memory.get(2),[first_fsm])
Exemplo n.º 8
0
 def test_get_normal_transition_when_there_is_no_match_but_such_transition_exist(self):
     fsm = FSM(1)
     #fsm.state_transitions = {('b', 1):(None, 2)}
     first_fsm = FSM('1_1')
     first_fsm.state_transitions = {('a', '1_1'):(None, None, '1_2'), (fsm.END_PAR_TRANSITION, '1_2'): (None, None, 2)}
     fsm.memory = {2: [first_fsm]}
     (_, _, next_state) = fsm.get_transition( 'a', 2)
     log.debug("test_get_normal_transition_when_there_is_no_match_but_such_transition_exist:%s", fsm.memory)
     self.assertEqual(fsm.memory, {2:[]})
     self.assertEqual(next_state, 2)
Exemplo n.º 9
0
 def test_add_fsm_to_state_that_is_not_in_memory_and_memory_is_not_empty(self):
     fsm = FSM(1)
     first_fsm = self.get_test_fsm()
     fsm.memory = {1: [first_fsm]}
     second_fsm = self.get_test_fsm()
     fsm.add_fsm_to_memory(2,second_fsm)
     log.debug('test_add_fsm_to_state_that_is_not_in_memory_and_memory_is_not_empty: %s', fsm.memory)
     self.assertEqual(len(fsm.memory),2)
     self.assertEqual(fsm.memory.get(1), [first_fsm])
     self.assertEqual(fsm.memory.get(1), [second_fsm])
Exemplo n.º 10
0
    def test_add_fsm_to_state_that_is_already_in_memory(self):
        fsm = FSM(1)
        first_fsm = self.get_test_fsm()
        fsm.memory = {1: [first_fsm]}
        second_fsm = self.get_test_fsm()
        fsm.add_fsm_to_memory(1,second_fsm)
        log.debug("test_add_fsm_to_state_that_is_already_in_memory%s" ,fsm.memory)

        self.assertEqual(len(fsm.memory),1)
        self.assertEqual(fsm.memory.get(1), [first_fsm, second_fsm])
Exemplo n.º 11
0
    def test_add_fsm_to_state_that_is_already_in_memory(self):
        fsm = FSM(1)
        first_fsm = self.get_test_fsm()
        fsm.memory = {1: [first_fsm]}
        second_fsm = self.get_test_fsm()
        fsm.add_fsm_to_memory(1, second_fsm)
        log.debug("test_add_fsm_to_state_that_is_already_in_memory%s",
                  fsm.memory)

        self.assertEqual(len(fsm.memory), 1)
        self.assertEqual(fsm.memory.get(1), [first_fsm, second_fsm])
Exemplo n.º 12
0
 def test_add_fsm_to_state_that_is_not_in_memory_and_memory_is_not_empty(
         self):
     fsm = FSM(1)
     first_fsm = self.get_test_fsm()
     fsm.memory = {1: [first_fsm]}
     second_fsm = self.get_test_fsm()
     fsm.add_fsm_to_memory(2, second_fsm)
     log.debug(
         'test_add_fsm_to_state_that_is_not_in_memory_and_memory_is_not_empty: %s',
         fsm.memory)
     self.assertEqual(len(fsm.memory), 2)
     self.assertEqual(fsm.memory.get(1), [first_fsm])
     self.assertEqual(fsm.memory.get(1), [second_fsm])
Exemplo n.º 13
0
	def __init__(self, parent= None):
	    self.state_gen = generate_ints()
	    self.current_state = self.state_gen.next()
	    if (parent is not None): 
	    	self.parent = parent  
	    	self.fsm = FSM(format_state_name(self.current_state, self.parent.get_current_state()))
	    	self.set_interrupt_transition = self.parent.set_interrupt_transition
	    	self.top_parent = parent.top_parent
	    else: 
	    	self.fsm = FSM(self.current_state)
	    	self.top_parent = self
	    	self.set_interrupt_transition = False
	    self.start_new_par_branch = False
	    # Choice States
	    self.choice_start_state = []
	    self.choice_end_state = []
	    # Recursion states
	    self.recursions_states = {}
	    self.parent = parent  
Exemplo n.º 14
0
 def test_get_normal_transition_when_there_is_no_match_but_such_transition_exist(
         self):
     fsm = FSM(1)
     #fsm.state_transitions = {('b', 1):(None, 2)}
     first_fsm = FSM('1_1')
     first_fsm.state_transitions = {
         ('a', '1_1'): (None, None, '1_2'),
         (fsm.END_PAR_TRANSITION, '1_2'): (None, None, 2)
     }
     fsm.memory = {2: [first_fsm]}
     (_, _, next_state) = fsm.get_transition('a', 2)
     log.debug(
         "test_get_normal_transition_when_there_is_no_match_but_such_transition_exist:%s",
         fsm.memory)
     self.assertEqual(fsm.memory, {2: []})
     self.assertEqual(next_state, 2)
Exemplo n.º 15
0
 def get_test_fsm(self):
     # build test data
     testData = FSM('1_1')
     testData.state_transitions = {('a', '1_1'):(None, None, '1_2')}
     return testData
Exemplo n.º 16
0
 def test_get_normal_transition_when_there_is_no_match(self):
     fsm = FSM(1)
     fsm.state_transitions = {('b', 1):(None, None, 2)}
     first_fsm = self.get_test_fsm()
     fsm.memory = {2: [first_fsm]}
     self.assertRaises(ExceptionFSM, fsm.get_transition, 'c', 1)
Exemplo n.º 17
0
 def test_get_normal_transition_when_there_is_no_match(self):
     fsm = FSM(1)
     fsm.state_transitions = {('b', 1): (None, None, 2)}
     first_fsm = self.get_test_fsm()
     fsm.memory = {2: [first_fsm]}
     self.assertRaises(ExceptionFSM, fsm.get_transition, 'c', 1)
Exemplo n.º 18
0
 def get_test_fsm(self):
     # build test data
     testData = FSM('1_1')
     testData.state_transitions = {('a', '1_1'): (None, None, '1_2')}
     return testData