public void Loading( StateMachineSaver <State> saver, StateMachineLoader <State> loader, State sourceState, State targetState) { "establish a saved state machine with history"._(() => { var machine = new PassiveStateMachine <State, Event>(); DefineMachine(machine); machine.Initialize(State.A); machine.Start(); machine.Fire(Event.S2); // set history of super state S machine.Fire(Event.B); // set current state to B saver = new StateMachineSaver <State>(); loader = new StateMachineLoader <State>(); machine.Save(saver); }); "when state machine is loaded"._(() => { loader.SetCurrentState(saver.CurrentStateId); loader.SetHistoryStates(saver.HistoryStates); var loadedMachine = new PassiveStateMachine <State, Event>(); DefineMachine(loadedMachine); loadedMachine.Load(loader); loadedMachine.TransitionCompleted += (sender, args) => { sourceState = args.StateId; targetState = args.NewStateId; }; loadedMachine.Start(); loadedMachine.Fire(Event.S); }); "it should reset current state"._(() => sourceState.Should().Be(State.B)); "it should reset all history states of super states"._(() => targetState.Should().Be(State.S2)); }
public void InitializeALoadedStateMachine( PassiveStateMachine <int, int> machine, Exception receivedException) { "establish a loaded state machine"._(() => { machine = new PassiveStateMachine <int, int>(); machine.Load(A.Fake <IStateMachineLoader <int> >()); }); "when initializing the state machine"._(() => receivedException = Catch.Exception(() => machine.Initialize(0))); "should throw an invalid operation exception"._(() => { receivedException .Should().BeAssignableTo <InvalidOperationException>(); receivedException.Message .Should().Be(ExceptionMessages.StateMachineIsAlreadyInitialized); }); }