Beispiel #1
0
    def test_partial_unnested_transition(self):
        self.interpreter.queue(Event('next')).queue(Event('reset'))
        self.interpreter.execute_once()
        step = self.interpreter.execute_once()

        self.assertEqual(self.interpreter.configuration,
                         self.common_states + ['i1', 'i2', 'i3', 'i4'])
        self.assertLess(step.exited_states.index('r2'),
                        step.exited_states.index('r4'))
        self.assertLess(step.exited_states.index('p1'),
                        step.exited_states.index('p2'))
        self.assertLess(step.exited_states.index('r2'),
                        step.exited_states.index('p1'))
        self.assertLess(step.exited_states.index('r4'),
                        step.exited_states.index('p2'))
        self.assertLess(step.entered_states.index('p1'),
                        step.entered_states.index('p2'))
        self.assertLess(step.entered_states.index('p1'),
                        step.entered_states.index('r1'))
        self.assertLess(step.entered_states.index('p1'),
                        step.entered_states.index('r2'))
        self.assertLess(step.entered_states.index('r1'),
                        step.entered_states.index('p2'))
        self.assertLess(step.entered_states.index('r2'),
                        step.entered_states.index('p2'))
        self.assertLess(step.entered_states.index('p2'),
                        step.entered_states.index('r3'))
        self.assertLess(step.entered_states.index('p2'),
                        step.entered_states.index('r4'))
        self.assertEqual([t.source for t in step.transitions], ['r2', 'r4'])
Beispiel #2
0
    def test_name_order(self):
        self.interpreter.queue(Event('next')).queue(Event('click')).queue(Event('next')).queue(Event('next'))
        self.interpreter.execute_once()
        self.interpreter.execute_once()
        self.interpreter.execute_once()

        self.assertEqual(self.interpreter.configuration, self.common_states + ['k1', 'k3', 'x', 'y'])

        step = self.interpreter.execute_once()
        self.assertLess(step.exited_states.index('k1'), step.exited_states.index('k3'))
        self.assertLess(step.exited_states.index('k3'), step.exited_states.index('x'))
        self.assertLess(step.exited_states.index('x'), step.exited_states.index('y'))
        self.assertEqual(self.interpreter.configuration, self.common_states + ['k1', 'x', 'y', 'z'])
        self.assertLess(step.entered_states.index('k1'), step.entered_states.index('z'))
        self.assertLess(step.entered_states.index('z'), step.entered_states.index('x'))
        self.assertLess(step.entered_states.index('x'), step.entered_states.index('y'))

        self.assertEqual([t.source for t in step.transitions], ['k1', 'k3', 'x', 'y'])

        step = self.interpreter.queue(Event('next')).execute_once()

        self.assertLess(step.exited_states.index('k1'), step.exited_states.index('x'))
        self.assertLess(step.exited_states.index('x'), step.exited_states.index('y'))
        self.assertLess(step.exited_states.index('y'), step.exited_states.index('z'))
        self.assertEqual(self.interpreter.configuration, self.common_states + ['k1', 'x', 'y', 'z'])
        self.assertLess(step.entered_states.index('k1'), step.entered_states.index('x'))
        self.assertLess(step.entered_states.index('x'), step.entered_states.index('y'))
        self.assertLess(step.entered_states.index('y'), step.entered_states.index('z'))

        self.assertEqual([t.source for t in step.transitions], ['k1', 'x', 'y', 'z'])
Beispiel #3
0
    def test_memory(self):
        self.interpreter.queue(Event('next')).execute_once()
        self.assertEqual(sorted(self.interpreter.configuration), ['loop', 'root', 's2'])

        step = self.interpreter.queue(Event('pause')).execute_once()
        self.assertEqual(step.exited_states, ['s2', 'loop'])
        self.assertEqual(sorted(self.interpreter.configuration), ['pause', 'root'])
Beispiel #4
0
 def test_fails_on_exit(self):
     self.s0.sequences.append('"x == 1" -> "x == 2" -> "x == 3"')
     self.intp.queue(Event('e'))
     self.intp.execute()
     self.intp.queue(Event('end'))
     with self.assertRaises(SequentialConditionError):
         self.intp.execute()
Beispiel #5
0
    def test_conflicting_transitions_2(self):
        self.interpreter.queue(Event('nextA')).queue(Event('nextB')).queue(Event('conflict2'))
        self.interpreter.execute_once()
        self.interpreter.execute_once()

        with self.assertRaises(exceptions.ConflictingTransitionsError):
            self.interpreter.execute_once()
Beispiel #6
0
    def test_resume_memory(self):
        self.interpreter.queue(Event('next')).queue(Event('pause')).queue(Event('continue'))
        steps = self.interpreter.execute()
        step = steps[-1]

        self.assertEqual(step.entered_states, ['loop', 'loop.H', 's2'])
        self.assertEqual(step.exited_states, ['pause', 'loop.H'])
        self.assertEqual(sorted(self.interpreter.configuration), ['loop', 'root', 's2'])
Beispiel #7
0
 def test_simple_entered(self):
     self.interpreter.queue(Event('goto s2'))
     self.assertEqual(self.interpreter.execute_once().entered_states, ['s2'])
     self.interpreter.queue(Event('goto final'))
     self.assertEqual(self.interpreter.execute_once().entered_states, ['s3'])
     self.assertEqual(self.interpreter.execute_once().entered_states, ['final'])
     self.assertEqual(self.interpreter.configuration, [])
     self.assertTrue(self.interpreter.final)
Beispiel #8
0
    def test_storycreation(self):
        story = Story()
        story.append(Event('a'))
        story.append(Event('b'))
        story.append(Pause(10))
        story.append(Event('c'))

        self.assertEqual(len(story), 4)
Beispiel #9
0
 def test_run_in_background(self):
     with open('tests/yaml/simple.yaml') as f:
         sc = io.import_from_yaml(f)
     interpreter = Interpreter(sc)
     task = run_in_background(interpreter, 0.001)
     interpreter.queue(Event('goto s2'))
     interpreter.queue(Event('goto final'))
     task.join()
     self.assertTrue(interpreter.final)
Beispiel #10
0
 def test_condition_on_event(self):
     self.assertTrue(
         self.evaluator._evaluate_code(
             'event.data[\'a\'] == 1',
             additional_context={'event': Event('test', a=1)}))
     self.assertTrue(
         self.evaluator._evaluate_code(
             'event.name == \'test\'',
             additional_context={'event': Event('test')}))
Beispiel #11
0
    def test_queue(self):
        self.interpreter.queue(Event('e1'))
        self.assertEqual(self.interpreter._select_event(), Event('e1'))

        self.interpreter.queue(InternalEvent('e1'))
        self.assertEqual(self.interpreter._select_event(), InternalEvent('e1'))

        with self.assertRaises(ValueError):
            self.interpreter.queue('e1')
Beispiel #12
0
    def test_partial_parallel_order(self):
        self.interpreter.queue(Event('next')).queue(Event('click'))
        self.interpreter.execute_once()
        step = self.interpreter.execute_once()

        self.assertEqual(self.interpreter.configuration, self.common_states + ['j1', 'j3', 'k2', 'k4'])
        self.assertEqual(step.exited_states, ['j2', 'j4'])
        self.assertEqual(step.entered_states, ['k2', 'k4'])
        self.assertEqual([t.source for t in step.transitions], ['j2', 'j4'])
Beispiel #13
0
    def test_tell(self):
        story = Story([Event('goto s2'), Pause(5), Event('goto final')])
        with open('tests/yaml/simple.yaml') as f:
            sc = io.import_from_yaml(f)

        interpreter = Interpreter(sc)
        trace = story.tell(interpreter)

        self.assertTrue(interpreter.final)
        self.assertEqual(interpreter.time, 5)
        self.assertEqual(len(trace), 4)
Beispiel #14
0
    def test_bind_callable(self):
        with open('tests/yaml/simple.yaml') as f:
            other_sc = io.import_from_yaml(f)
        other_interpreter = Interpreter(other_sc)

        self.interpreter.bind(other_interpreter.queue)
        self.assertEqual(self.interpreter._bound, [other_interpreter.queue])

        self.interpreter.queue(InternalEvent('test'))
        self.assertTrue(self.interpreter._internal_events.pop(), Event('test'))
        self.assertTrue(other_interpreter._external_events.pop(), Event('test'))
Beispiel #15
0
    def test_bind(self):
        with open('tests/yaml/simple.yaml') as f:
            other_sc = io.import_from_yaml(f)
        other_interpreter = Interpreter(other_sc)

        self.interpreter.bind(other_interpreter)
        self.assertIn(other_interpreter.queue, self.interpreter._bound)

        self.interpreter.raise_event(InternalEvent('test'))
        self.assertTrue(self.interpreter._internal_events.pop(), Event('test'))
        self.assertTrue(other_interpreter._external_events.pop(),
                        Event('test'))
Beispiel #16
0
    def test_deep_memory(self):
        self.interpreter.queue(Event('next1')).queue(Event('next2'))
        self.interpreter.execute()
        self.assertEqual(sorted(self.interpreter.configuration), ['active', 'concurrent_processes', 'process_1', 'process_2', 'root', 's12', 's22'])

        self.interpreter.queue(Event('error1'))
        self.interpreter.execute()
        self.assertEqual(self.interpreter.configuration, ['root', 'pause'])
        self.assertEqual(sorted(self.interpreter._memory['active.H*']), ['concurrent_processes', 'process_1', 'process_2', 's12', 's22'])

        self.interpreter.queue(Event('continue'))
        self.interpreter.execute()
        self.assertEqual(sorted(self.interpreter.configuration), ['active', 'concurrent_processes', 'process_1',
                                                           'process_2', 'root', 's12', 's22'])
Beispiel #17
0
    def test_button(self):
        self.assertEqual(self.elevator.context['current'], 0)

        self.buttons.queue(Event('button_2_pushed'))
        self.buttons.execute()

        event = self.elevator._external_events.pop()
        self.assertEqual(event.name, 'floorSelected')
        self.assertEqual(event.data['floor'], 2)

        self.buttons.queue(Event('button_2_pushed'))
        self.buttons.execute()
        self.elevator.execute()

        self.assertEqual(self.elevator.context['current'], 2)
Beispiel #18
0
    def test_tell_by_step(self):
        story = Story([Event('goto s2'), Pause(5), Event('goto final')])
        with open('tests/yaml/simple.yaml') as f:
            sc = io.import_from_yaml(f)

        interpreter = Interpreter(sc)
        teller = story.tell_by_step(interpreter)
        self.assertEqual(Event('goto s2'), next(teller)[0])
        self.assertEqual(Pause(5), next(teller)[0])
        self.assertEqual(Event('goto final'), next(teller)[0])
        with self.assertRaises(StopIteration):
            next(teller)

        self.assertTrue(interpreter.final)
        self.assertEqual(interpreter.time, 5)
Beispiel #19
0
 def test_transition_postcondition(self):
     transitions = self.sc.transitions_from('floorSelecting')
     transitions[0].postconditions.append('False')
     self.interpreter.queue(Event('floorSelected', floor=4))
     with self.assertRaises(PostconditionError) as cm:
         self.interpreter.execute()
     self.assertTrue(isinstance(cm.exception.obj, Transition))
Beispiel #20
0
 def test_simple_configuration(self):
     self.interpreter.execute_once()  # Should do nothing!
     self.assertEqual(self.interpreter.configuration, ['root', 's1'])
     self.interpreter.queue(Event('goto s2'))
     self.interpreter.execute_once()
     self.assertEqual(self.interpreter.configuration, ['root', 's2'])
     self.interpreter.execute_once()
     self.assertEqual(self.interpreter.configuration, ['root', 's3'])
Beispiel #21
0
 def test_floor_selection(self):
     self.interpreter.queue(Event('floorSelected', floor=4)).execute_once()
     self.assertEqual(self.interpreter.context['destination'], 4)
     self.interpreter.execute_once()
     self.assertEqual(sorted(self.interpreter.configuration), [
         'active', 'doorsClosed', 'floorListener', 'floorSelecting',
         'movingElevator'
     ])
Beispiel #22
0
    def test_button_0_on_groundfloor(self):
        self.assertEqual(self.elevator.context['current'], 0)

        self.buttons.queue(Event('button_0_pushed'))
        self.buttons.execute()
        self.elevator.execute()

        self.assertEqual(self.elevator.context['current'], 0)
Beispiel #23
0
    def test_concurrent_transitions(self):
        step = self.interpreter.queue(Event('nextA')).execute_once()

        self.assertEqual(self.interpreter.configuration,
                         ['root', 's1', 'p1', 'p2', 'a1', 'a2'])
        self.assertLess(step.exited_states.index('initial1'),
                        step.exited_states.index('initial2'))
        self.assertLess(step.entered_states.index('a1'),
                        step.entered_states.index('a2'))
Beispiel #24
0
    def test_doorsOpen(self):
        self.interpreter.queue(Event('floorSelected', floor=4))
        self.interpreter.execute()
        self.assertEqual(self.interpreter.context['current'], 4)
        self.interpreter.time += 10
        self.interpreter.execute()

        self.assertTrue('doorsOpen' in self.interpreter.configuration)
        self.assertEqual(self.interpreter.context['current'], 0)
Beispiel #25
0
 def test_events(self):
     trace = [
         MacroStep(0, [MicroStep(Event('a'))]),
         MacroStep(0, [MicroStep(Event('b'))]),
         MacroStep(0, [MicroStep(Event('c'))]),
         MacroStep(0, [MicroStep(Event('d'))]),
     ]
     self.assertListEqual(
         story_from_trace(trace),
         [Event('a'), Event('b'),
          Event('c'), Event('d')])
Beispiel #26
0
 def test_heating_on(self):
     self.microwave.execute_once()
     self.microwave.queue(Event('door_opened'))
     self.microwave.queue(Event('item_placed'))
     self.microwave.queue(Event('door_closed'))
     self.microwave.queue(Event('input_timer_inc'))
     self.microwave.execute()
     self.microwave.queue(Event('input_cooking_start'))
     step = self.microwave.execute_once()
     self.assertIn(Event('heating_on'), step.sent_events)
     self.assertIn(Event('lamp_switch_on'), step.sent_events)
     self.assertIn(Event('turntable_start'), step.sent_events)
Beispiel #27
0
    def test_after_memory(self):
        self.interpreter.queue(Event('next')).queue(Event('pause')).queue(Event('continue'))
        self.interpreter.queue(Event('next')).queue(Event('next'))
        self.interpreter.execute()
        self.assertEqual(sorted(self.interpreter.configuration), ['loop', 'root', 's1'])

        self.interpreter.queue(Event('pause')).queue(Event('stop'))
        self.interpreter.execute()
        self.assertTrue(self.interpreter.final)
Beispiel #28
0
    def testInternalBeforeExternal(self):
        self.interpreter.queue(Event('not_next'))
        step = self.interpreter.execute_once()
        self.assertEqual(step.event.name, 'next')

        step = self.interpreter.execute_once()
        self.assertEqual(step.event, None)
        self.assertEqual(step.entered_states, ['s2'])

        step = self.interpreter.execute_once()
        self.assertEqual(step.event.name, 'not_next')
Beispiel #29
0
def send_event(context, event_name, parameter=None, value=None):
    parameters = {}
    if context.table:
        for row in context.table:
            parameters[row['parameter']] = eval(row['value'], {}, {})

    if parameter and value:
        parameters[parameter] = eval(value)

    event = Event(event_name, **parameters)
    context._interpreter.queue(event)
    _execute_statechart(context)
Beispiel #30
0
    def send_event(self, event_name):
        if event_name == 'item_placed':
            self.w_weightsensor.config(text='item detected')
        elif event_name == 'item_removed':
            self.w_weightsensor.config(text='no item')
        elif event_name == 'door_opened':
            self.w_doorsensor.config(text='open')
        elif event_name == 'door_closed':
            self.w_doorsensor.config(text='closed')

        self.interpreter.queue(Event(event_name))
        self.execute()