Пример #1
0
        public void Test__BasicSync()
        {
            // Arrange
            var paylod = new TestPayload();
            var fsm    = SimpleFsmBuilder <TestStates, TestPayload> .New()
                         .SetStartState(TestStates.Start)
                         .SetEndState(TestStates.End)
                         .AddTransition(TestStates.Start, TestStates.Step1)
                         .AddHandler(TestStates.Step1, (currentState, payload) =>
            {
                payload.Value = "Test1";
                return(TestStates.Step2);
            })
                         .AddHandler(TestStates.Step2, (currentState, payload) =>
            {
                payload.Value = "Test2";
                return(TestStates.Step3);
            }).AddHandler(TestStates.Step3, (currentState, payload) =>
            {
                payload.Value = "Test3";
                return(TestStates.End);
            })
                         .Build();

            // Act
            fsm.Start(paylod);

            // Assert
            Assert.Equal("Test3", paylod.Value);
        }
Пример #2
0
        public void Test__ExceptionHandler()
        {
            // Arrange
            var paylod            = new TestPayload();
            var expectedException = new Exception();

            // Act, Assert
            SimpleFsmBuilder <TestStates, TestPayload> .New()
            .SetStartState(TestStates.Start)
            .SetEndState(TestStates.End)
            .AddTransition(TestStates.Start, TestStates.Step1)
            .AddHandler(TestStates.Step1, (currentState, payload) =>
            {
                payload.Value = "Test1";

                // Throw some exception
                throw expectedException;
            })
            .SetExceptionHandler((currentState, payload, exception) =>
            {
                // Validate the exception
                Assert.Equal(expectedException, exception);

                return(TestStates.End);
            })
            .Build()
            .Start(paylod);
        }