public void TestRaiseEvent() { FiniteStateMachine fsm = new FiniteStateMachine("Turnstile"); FiniteStateEvent actionSucceeded = new FiniteStateEvent("ActionSucceeded"); fsm.RaiseEvent(actionSucceeded); }
public void TestRaiseEvent() { FiniteStateMachineEngine engine = new FiniteStateMachineEngine("Turnstile"); FiniteStateEvent actionSucceeded = new FiniteStateEvent("ActionSucceeded"); engine.RaiseEvent(actionSucceeded); Assert.That(engine.PendingEvents.Count, Is.EqualTo(1)); Assert.That(engine.PendingEvents.Contains(actionSucceeded), Is.True); }
public void TestAddOneTransition() { FiniteState gettingWorkItem = new FiniteState("GettingWorkItem"); FiniteState movingToErrors = new FiniteState("MovingToErrors"); FiniteStateEvent actionFailed = new FiniteStateEvent("ActionFailed"); gettingWorkItem.AddTransition(actionFailed, movingToErrors); Assert.That(gettingWorkItem.Transitions.Count, Is.EqualTo(1)); Assert.That(gettingWorkItem.Transitions.ContainsKey("ActionFailed")); }
public void TestAddDuplicateTransition() { FiniteState gettingWorkItem = new FiniteState("GettingWorkItem"); FiniteState movingToErrors = new FiniteState("MovingToErrors"); FiniteState movingToProcessed = new FiniteState("MovingToProcessed"); FiniteStateEvent actionSucceeded = new FiniteStateEvent("ActionSucceeded"); Assert.That(() => { gettingWorkItem.AddTransition(actionSucceeded, movingToProcessed); gettingWorkItem.AddTransition(actionSucceeded, movingToErrors); }, Throws.InstanceOf <ArgumentException>().And.Message.EqualTo($"Duplicate event name='{actionSucceeded.Name}' used to create a transition from state name='{gettingWorkItem.Name}'.")); }
public void TestNoTransitionForEvent() { FiniteStateMachineEngine engine = new FiniteStateMachineEngine("Turnstile"); FiniteState gettingWorkItem = new FiniteState("GettingWorkItem") { OnEnterAction = () => { } }; FiniteState movingToProcessed = new FiniteState("MovingToProcessed") { OnEnterAction = () => { } }; FiniteStateEvent actionSucceeded = new FiniteStateEvent("ActionSucceeded"); engine.AddState(gettingWorkItem); engine.AddState(movingToProcessed); engine.SetCurrentState(gettingWorkItem); engine.RaiseEvent(actionSucceeded); Assert.That(() => { engine.HandlePendingEvents(); }, Throws.InstanceOf <ArgumentException>().And.Message.EqualTo($"Failed to find a transition for event '{actionSucceeded.Name}' from state '{gettingWorkItem.Name}'.")); }
/// <summary> /// Creates a transition to another state via an event. /// </summary> /// <param name="ToState">FiniteState</param> /// <param name="ViaEvent">FiniteStateEvent</param> public FiniteStateTransition(FiniteStateEvent ViaEvent, FiniteState ToState) : this() { this.ViaEvent = ViaEvent; this.ToState = ToState; }
public void TestConstructor(string Name) { FiniteStateEvent fse = new FiniteStateEvent(Name); Assert.That(fse.Name, Is.EqualTo(Name)); }