Exemplo n.º 1
0
    def test_notify_child(self):
        m = StateMachine()

        composite_state = m.create_state('composite', CompositeState)
        target_state = m.create_state('target')
        composite_state.add_transition_to(target_state, 'tick')

        substate_source = composite_state.create_state('substate1')
        substate_target = composite_state.create_state('substate2')
        substate_source.add_transition_to(substate_target, 'tick')

        substate_source.on_end = MagicMock()
        substate_target.on_start = MagicMock()

        composite_state.initial_state = substate_source
        composite_state.initialise()

        m.initial_state = composite_state
        m.initialise()

        # Test, expecting the composite state's machine to transition
        e = Event('tick')
        m.notify(e)

        # Verify
        self.assertEqual(composite_state, m.current_state)
        self.assertEqual(substate_target, composite_state.current_state)
        self.assertEqual(1, substate_source.on_end.call_count)
        self.assertEqual(1, substate_target.on_start.call_count)
Exemplo n.º 2
0
    def test_notify_observers(self):
        """
        Test that a substate still notifies observers
        """
        # SETUP
        m = StateMachine('Observed')
        composite_state = m.create_state('composite', CompositeState)
        sub_state = composite_state.create_state('substate')

        listener = StateMachine('Listener')
        listener.notify = MagicMock()

        m.register_observer('tick', listener)

        # TEST
        e = Event('tick')
        sub_state.notify_observers(e)
        m.flush()

        self.assertEqual(1, listener.notify.call_count)
        listener.notify.assert_called_with(e)