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;
 }
Exemplo n.º 7
0
        public void TestConstructor(string Name)
        {
            FiniteStateEvent fse = new FiniteStateEvent(Name);

            Assert.That(fse.Name, Is.EqualTo(Name));
        }