public void TestTransitionFromEnterState() { var machine = new StateMachine(); var state = new VisitedState(); machine.AddTransition(DefaultState.Enter, state); machine.Update(0); Assert.True(state.Entered, $"State machine is not in expected state ({machine})."); }
public void TestMultipleTransitions() { var machine = new StateMachine(); var rightState = new VisitedState(); var wrongState1 = new VisitedState(); var wrongState2 = new VisitedState(); machine.AddTransition(DefaultState.Enter, wrongState1) .When(s => false); machine.AddTransition(DefaultState.Enter, rightState); machine.AddTransition(DefaultState.Enter, wrongState2) .When(s => false); }
public void TestNestedMachineWithEmptyState() { var parent = new StateMachine(); var child = new StateMachine(); var state = new VisitedState(); child.AddTransition(DefaultState.Enter, state); parent.AddTransition(DefaultState.Enter, child); parent.Update(0); Assert.IsTrue(state.Entered, "Nested state machine was not entered."); Assert.IsTrue(state.Updated, "Nested state machine was not updated."); Assert.IsTrue(state.Exited, "Nested state machine was not exited."); }
public void TestNestedMachineExit() { var parent = new StateMachine(); var child = new StateMachine(); var childState = new VisitedState(); var parentState = new VisitedState(); parent.AddTransition(DefaultState.Enter, child); parent.AddTransition(child, parentState); child.AddTransition(DefaultState.Enter, childState); parent.Update(0); Assert.IsTrue(childState.Exited); Assert.IsTrue(parentState.Entered); }
public void TestExceptionTransition() { var machine = new StateMachine(); var state1 = new VisitedState(); var state2 = new VisitedState(); var state3 = new VisitedState(); machine.AddTransition(DefaultState.Enter, state1); machine.AddTransition(state1, state2) .ButWhen(s => s.Exited, state3); machine.Update(0); Assert.IsTrue(state2.Entered); Assert.IsFalse(state3.Entered); machine.Update(0); Assert.IsTrue(state3.Entered); }