def test_set_child_sm(self): child_state_machine = StateMachine("state_machine") state = State("state") assert state.child_sm is None assert not state.has_child_sm() state.set_child_sm(child_state_machine) assert state.child_sm is not None assert state.has_child_sm()
def test_event_trigger_propagate_with_child_sm(self): state_machine = StateMachine("sm") exit_cb = MagicMock() entry_cb = MagicMock() initial_state = State("initial_state") second_state = State("second_state") initial_state.on_exit(exit_cb) second_state.on_entry(entry_cb) initial_state.set_child_sm(self.create_child_fsm()) event = Event("event") state_machine.add_state(initial_state, initial_state=True) state_machine.add_state(second_state) state_machine.add_event(event) state_machine.add_transition(initial_state, second_state, event) state_machine.start("data") exit_cb.assert_not_called() entry_cb.assert_not_called() state_machine.trigger_event(event, "data", propagate=True) # child fsm in current state, so the event is caught in child fsm assert state_machine.current_state == initial_state assert initial_state.child_sm.current_state.name == \ "child_second_state"