コード例 #1
0
        public void FluentStateMachineBuilder_AfterExit_DefiningState_AddsEvent()
        {
            var loggedEvents = new List <string>();
            Action <string, TransitionEventArgs <StubStateModel> > logEvent = (message, e) =>
            {
                loggedEvents.Add(string.Format("{0} from {1} to {2} on {3}",
                                               message, e.From, e.To, e.Trigger));
            };

            var machine = FluentStateMachine <StubStateModel> .Describe()
                          .State("s1")
                          .AfterExit(e => logEvent("AfterExit", e))
                          .TransitionsTo("s2").On("t")
                          .Initiates()
                          .State("s2")
                          .AfterExit(e => logEvent("AfterExit", e))
                          .TransitionsTo("s1").On("t")
                          .Compile();

            var model = new StubStateModel();

            model.CurrentState = machine.InitialState;

            machine.Trigger("t", model);
            Assert.Equal("s2", model.CurrentState.ToString());
            Assert.Equal(1, loggedEvents.Count());
            Assert.Equal("AfterExit from s1 to s2 on t", loggedEvents[0]);
        }
コード例 #2
0
 public void FluentStateMachineBuilder_GloballyTransitionsTo_NullState_ThrowsNullEx()
 {
     Assert.Throws <ArgumentNullException>(() =>
                                           FluentStateMachine <StubStateModel> .Describe()
                                           .State("s1")
                                           .GloballyTransitionsTo(null));
 }
コード例 #3
0
        public void FluentStateMachine_Describe_ReturnsNewBuilderApi()
        {
            var result = FluentStateMachine <StubStateModel> .Describe();

            var result2 = FluentStateMachine <StubStateModel> .Describe();

            Assert.NotNull(result);
            Assert.NotNull(result);
            Assert.NotSame(result, result2);
        }
コード例 #4
0
        public void FluentStateMachineBuilder_State_ValidParms_CreatesNewState()
        {
            var machine = FluentStateMachine <StubStateModel> .Describe()
                          .State("s1")
                          .Initiates()
                          .Compile();

            var model = new StubStateModel();

            model.CurrentState = machine.InitialState;

            Assert.Equal("s1", model.CurrentState.ToString());
        }
コード例 #5
0
        public void FluentStateMachineBuilder_On_SetsTriggerForATransition()
        {
            var machine = FluentStateMachine <StubStateModel> .Describe()
                          .State("s1")
                          .TransitionsTo("s2").On("t")
                          .Initiates()
                          .State("s2")
                          .TransitionsTo("s1").On("t")
                          .Compile();

            var model = new StubStateModel();

            model.CurrentState = machine.InitialState;

            Assert.Equal("s1", model.CurrentState.ToString());
            machine.Trigger("t", model);
            Assert.Equal("s2", model.CurrentState.ToString());
        }
コード例 #6
0
        public void FluentStateMachineBuilder_When_WhileDefTrans_AddsGuardToTransition()
        {
            var machine = FluentStateMachine <StubStateModel> .Describe()
                          .State("s1")
                          .Initiates()
                          .TransitionsTo("s2").On("t").When(m => false)
                          .TransitionsTo("s3").On("t").When(m => true)
                          .State("s2")
                          .State("s3")
                          .Compile();

            var model = new StubStateModel();

            model.CurrentState = machine.InitialState;

            Assert.Equal("s1", model.CurrentState.ToString());
            machine.Trigger("t", model);
            Assert.Equal("s3", model.CurrentState.ToString());
        }
コード例 #7
0
        public void FluentStateMachineBuilder_DefiningCallbacksOnAll_AllCallbacksCalledInOrder()
        {
            var loggedEvents = new List <string>();
            Action <string, TransitionEventArgs <StubStateModel> > logEvent = (message, e) =>
            {
                loggedEvents.Add(string.Format("{0} from {1} to {2} on {3}",
                                               message, e.From, e.To, e.Trigger));
            };

            var machine = FluentStateMachine <StubStateModel> .Describe()
                          .State("s1")
                          .BeforeEntry(e => logEvent("beforeEntry", e))
                          .AfterEntry(e => logEvent("afterEntry", e))
                          .BeforeExit(e => logEvent("beforeExit", e))
                          .AfterExit(e => logEvent("afterExit", e))
                          .TransitionsTo("s2").On("t")
                          .Initiates()
                          .State("s2")
                          .BeforeEntry(e => logEvent("beforeEntry", e))
                          .AfterEntry(e => logEvent("afterEntry", e))
                          .BeforeExit(e => logEvent("beforeExit", e))
                          .AfterExit(e => logEvent("afterExit", e))
                          .TransitionsTo("s1").On("t")
                          .BeforeTransition(e => logEvent("beforeTransition", e))
                          .AfterTransition(e => logEvent("afterTransition", e))
                          .Compile();

            var model = new StubStateModel();

            model.CurrentState = machine.InitialState;

            machine.Trigger("t", model);
            Assert.Equal("s2", model.CurrentState.ToString());
            Assert.Equal(6, loggedEvents.Count());
            Assert.Equal("beforeTransition from s1 to s2 on t", loggedEvents[0]);
            Assert.Equal("beforeExit from s1 to s2 on t", loggedEvents[1]);
            Assert.Equal("beforeEntry from s1 to s2 on t", loggedEvents[2]);
            Assert.Equal("afterExit from s1 to s2 on t", loggedEvents[3]);
            Assert.Equal("afterEntry from s1 to s2 on t", loggedEvents[4]);
            Assert.Equal("afterTransition from s1 to s2 on t", loggedEvents[5]);
        }