public void Loading( StateMachineSaver <State> saver, StateMachineLoader <State> loader, FakeExtension extension, State sourceState, State targetState) { "establish a saved state machine with history".x(() => { 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".x(() => { loader.SetCurrentState(saver.CurrentStateId); loader.SetHistoryStates(saver.HistoryStates); extension = new FakeExtension(); var loadedMachine = new PassiveStateMachine <State, Event>(); loadedMachine.AddExtension(extension); 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".x(() => sourceState.Should().Be(State.B)); "it should reset all history states of super states".x(() => targetState.Should().Be(State.S2)); "it should notify extensions".x(() => extension.LoadedCurrentState .Should().BeEquivalentTo(State.B)); }
public void TellsExtensionsAboutExecutedTransition() { var extension = new FakeExtension(); this.ExtensionHost.Extension = extension; this.Testee.Fire(this.TransitionDefinition, this.TransitionContext, this.LastActiveStateModifier, this.StateDefinitions); extension.Items.Should().Contain(new FakeExtension.Item( this.Source, this.Target, this.TransitionContext)); }
public async Task TellsExtensionsAboutExecutedTransition() { var extension = new FakeExtension(); this.ExtensionHost.Extension = extension; await this.Testee.Fire(this.TransitionDefinition, this.TransitionContext, this.LastActiveStateModifier); extension.Items.Should().Contain(new FakeExtension.Item( this.StateMachineInformation, this.Source, this.Target, this.TransitionContext)); }
public void TellsExtensionsAboutExecutedTransition() { var extension = new FakeExtension(); this.ExtensionHost.Extension = extension; this.Testee.Fire(this.TransitionContext); extension.Items.Should().Contain(new FakeExtension.Item( this.StateMachineInformation, this.Source, this.Target, this.TransitionContext)); }