public void ForcefullyTransitioningFromChildStateMachineCallsExitHandlerOnCurrentState() { StateHandlerInfo <State>?nullableState22ExitInfo = null; var sm = new StateMachine("State Machine"); var evt1 = new Event("Event 1"); var state1 = sm.CreateInitialState("State 1"); var state2 = sm.CreateState("State 2"); var subSm = state2.CreateChildStateMachine(); var state21 = subSm.CreateInitialState("State 2.1"); var state22 = subSm.CreateState("State 2.2").WithExit(i => nullableState22ExitInfo = i); state1.TransitionOn(evt1).To(state2); state21.TransitionOn(evt1).To(state22); // Enter state2, and start child state machine evt1.Fire(); // Enter State 2.2 evt1.Fire(); // Transition from state2 to state1, exiting the child state machine sm.ForceTransition(state1, evt1); Assert.NotNull(nullableState22ExitInfo); var state22ExitInfo = nullableState22ExitInfo.Value; Assert.AreEqual(state22, state22ExitInfo.From); Assert.AreEqual(state1, state22ExitInfo.To); Assert.AreEqual(evt1, state22ExitInfo.Event); }
public void TransitioningFromTwoChildStateMachinesCallsExitHandlerOnCurrentState() { StateHandlerInfo <State>?nullableState212ExitInfo = null; var sm = new StateMachine("State Machine"); var evt1 = new Event("Event 1"); var evt2 = new Event("Event 2"); var state1 = sm.CreateInitialState("State 1"); var state2 = sm.CreateState("State 2"); var subSm = state2.CreateChildStateMachine(); var state21 = subSm.CreateInitialState("State 2.1"); var subSubSm = state21.CreateChildStateMachine(); var state211 = subSubSm.CreateInitialState("State 2.1.1"); var state212 = subSubSm.CreateState("State 2.1.2").WithExit(i => nullableState212ExitInfo = i); state1.TransitionOn(evt1).To(state2); state2.TransitionOn(evt2).To(state1); state211.TransitionOn(evt1).To(state212); // Enter State 2 and State 2.1 and State 2.1.1, and start child state machine evt1.Fire(); // Enter State 1.2.1 evt1.Fire(); // Transition from state2 to state1, exiting the child state machine evt2.Fire(); Assert.NotNull(nullableState212ExitInfo); var state212ExitInfo = nullableState212ExitInfo.Value; Assert.AreEqual(state212, state212ExitInfo.From); Assert.AreEqual(state1, state212ExitInfo.To); Assert.AreEqual(evt2, state212ExitInfo.Event); }
public void ForcefullyTransitioningToChildStateMachineCallsEntryHandlerOnInitialState() { StateHandlerInfo <State> state21EntryInfo = null; var sm = new StateMachine("State Machine"); var evt = sm.CreateEvent("Event"); var state1 = sm.CreateInitialState("State 1"); var state2 = sm.CreateState("State 2"); var subSm = state2.CreateChildStateMachine(); var state21 = subSm.CreateInitialState("State 2.1").WithEntry(i => state21EntryInfo = i); sm.ForceTransition(state2, evt); Assert.NotNull(state21EntryInfo); Assert.AreEqual(state1, state21EntryInfo.From); Assert.AreEqual(state21, state21EntryInfo.To); Assert.AreEqual(evt, state21EntryInfo.Event); }
public void CorrectInfoIsGivenInEntryHandler() { StateHandlerInfo <State> handlerInfo = null; var sm = new StateMachine("State Machine"); var evt = sm.CreateEvent("Event"); var state1 = sm.CreateInitialState("State 1"); var state2 = sm.CreateState("State 2").WithEntry(i => handlerInfo = i); state1.TransitionOn(evt).To(state2); evt.Fire(); Assert.NotNull(handlerInfo); Assert.AreEqual(state1, handlerInfo.From); Assert.AreEqual(state2, handlerInfo.To); Assert.AreEqual(evt, handlerInfo.Event); }
public void FiresEntryHandlerWithCorrectArgumentsWhenEntered() { var sm = new StateMachine("State Machine"); var state1 = sm.CreateInitialState("State 1"); var state2 = sm.CreateState("State 2"); var evt = sm.CreateEvent("Event"); StateHandlerInfo <State> info = null; var group = new StateGroup("Group") .WithEntry(i => info = i); state2.AddToGroup(group); state1.TransitionOn(evt).To(state2); evt.Fire(); Assert.NotNull(info); Assert.AreEqual(state1, info.From); Assert.AreEqual(state2, info.To); Assert.AreEqual(evt, info.Event); }
public void CorrectInfoIsGivenInExitHandlerT() { StateHandlerInfo <State>?nullableHandlerInfo = null; var sm = new StateMachine("State Machine"); var evt = new Event <string>("Event"); var state1 = sm.CreateInitialState("State 1").WithExit(i => nullableHandlerInfo = i); var state2 = sm.CreateState("State 2"); state1.TransitionOn(evt).To(state2); evt.Fire("foo"); Assert.NotNull(nullableHandlerInfo); var handlerInfo = nullableHandlerInfo.Value; Assert.AreEqual(state1, handlerInfo.From); Assert.AreEqual(state2, handlerInfo.To); Assert.AreEqual(evt, handlerInfo.Event); Assert.AreEqual("foo", handlerInfo.EventData); }
public void FiresExitHandlerWithCorrectArgumentsWhenExited() { var sm = new StateMachine("State Machine"); var state1 = sm.CreateInitialState("State 1"); var state2 = sm.CreateState("State 2"); var evt = new Event("Event"); StateHandlerInfo <State>?nullableInfo = null; var group = new StateGroup <State>("Group") .WithExit(i => nullableInfo = i); state1.AddToGroup(group); state1.TransitionOn(evt).To(state2); evt.Fire(); Assert.NotNull(nullableInfo); var info = nullableInfo.Value; Assert.AreEqual(state1, info.From); Assert.AreEqual(state2, info.To); Assert.AreEqual(evt, info.Event); }
public void TransitioningToChildStateMachineCallsEntryHandlerOnInitialState() { StateHandlerInfo <State>?nullableState21EntryInfo = null; var sm = new StateMachine("State Machine"); var evt = new Event("Event"); var state1 = sm.CreateInitialState("State 1"); var state2 = sm.CreateState("State 2"); var subSm = state2.CreateChildStateMachine(); var state21 = subSm.CreateInitialState("State 2.1").WithEntry(i => nullableState21EntryInfo = i); state1.TransitionOn(evt).To(state2); evt.Fire(); Assert.NotNull(nullableState21EntryInfo); var state21EntryInfo = nullableState21EntryInfo.Value; Assert.AreEqual(state1, state21EntryInfo.From); Assert.AreEqual(state21, state21EntryInfo.To); Assert.AreEqual(evt, state21EntryInfo.Event); }
protected override void OnExit(StateHandlerInfo <State> info) { // Custom code which isn't in the exit handler base.OnExit(info); }
protected override void OnExit(StateHandlerInfo <State> info) { this.OnExitInfo = info; }
protected override void OnEntry(StateHandlerInfo <State> info) { this.OnEntryInfo = info; }
protected override void OnEntry(StateHandlerInfo <CustomBaseState> info) { // Custom code which isn't in the entry handler base.OnEntry(info); }