public void add_transition_predicate_can_succeed() { var stateA = new TestState(); var stateB = new TestState(); stateA.AddTransition(stateB, ctx => ctx != null); Assert.AreEqual(stateB, stateA.EvaluateTransitions(new object())); Assert.AreEqual(null, stateA.EvaluateTransitions(null)); }
public void state_null_transition_defers_to_later_transitions() { var stateA = new TestState(); var stateB = new TestState(); stateA.AddTransition(ctx => null); stateA.AddTransition(ctx => stateB); Assert.AreEqual(stateB, stateA.EvaluateTransitions(new TestContext())); }
public void state_evaluate_transitions_prefers_earlier_transitions() { var stateA = new TestState(); var stateB = new TestState(); var stateC = new TestState(); stateA.AddTransition(ctx => stateB); stateA.AddTransition(ctx => stateC); Assert.AreEqual(stateB, stateA.EvaluateTransitions(new TestContext())); }
public void state_evaluate_transitions_depends_on_value() { var stateA = new TestState(); var stateB = new TestState(); var stateC = new TestState(); stateA.AddTransition(ctx => { if (ctx.A) { return(stateA); } return(ctx.B ? stateB : null); }); stateA.AddTransition(ctx => stateC); Assert.AreEqual(stateC, stateA.EvaluateTransitions(new TestContext())); Assert.AreEqual(stateA, stateA.EvaluateTransitions(new TestContext { A = true })); Assert.AreEqual(stateB, stateA.EvaluateTransitions(new TestContext { B = true })); }