public async Task TwoNodes_BackAndForth() { var tester = new NavigatorTester(); tester.AddNode("n1", "r1"); tester.AddNode("n2", "r2"); for (var n = 1; n <= 3; n++) { await tester.MoveAsync(true, "n1"); await tester.MoveAsync(false, "r1", null); await tester.MoveAsync(true, "n1", "n2"); await tester.MoveAsync(false, "r2", "r1", null); await tester.MoveAsync(true, "n1", "n2", null); await tester.MoveAsync(false, "r2"); await tester.MoveAsync(true, "n2", null); await tester.MoveAsync(false, "r2", "r1"); await tester.MoveAsync(true, "n1", "n2", null); await tester.MoveAsync(false, "r2", "r1", null); } }
private static async Task CheckEmptyBlockAsync(NavigatorTester tester) { await tester.MoveAsync(true, null); tester.CheckLog(); await tester.MoveAsync(false, null); tester.CheckLog(); }
public async void SingleNode_BackAndForth() { var tester = new NavigatorTester(); var isValid = false; tester.AddNode("normal", "reversed", () => isValid); for (var n = 1; n <= 3; n++) { isValid = false; await tester.MoveAsync(true, null); await tester.MoveAsync(false, null); isValid = true; await tester.MoveAsync(true, "normal"); await tester.MoveAsync(false, "reversed", null); await tester.MoveAsync(true, "normal", null); await tester.MoveAsync(false, "reversed"); await tester.MoveAsync(true, "normal", null); await tester.MoveAsync(false, "reversed", null); } }
public async Task ThreeNodes() { var tester = new NavigatorTester(); tester.AddNode("n1", "r1"); tester.AddNode("n2", "r2"); tester.AddNode("n3", "r3"); for (var n = 1; n <= 3; n++) { await tester.MoveAsync(true, "n1", "n2", "n3", null); await tester.MoveAsync(false, "r3", "r2", "r1", null); } }
public async Task RepeatSingleNode() { var tester = new NavigatorTester(); var @while = A.Fake <ICondition>(i => i.Strict()); A.CallTo(() => @while.Evaluate(tester.Context.Variables)) .ReturnsNextFromSequence(true, true, false); A.CallTo(() => tester.Block.While).Returns(@while); tester.AddNode("N1", "R1"); await tester.MoveAsync(true, "N1", "N1", "N1", null); await tester.MoveAsync(false, "R1", "R1", "R1", null); }
private static async Task CheckSingleNodeAsync(NavigatorTester tester) { await tester.MoveAsync(true, "normal"); tester.CheckLog("Enter:normal"); await tester.MoveAsync(true, null); tester.CheckLog("Leave:normal"); await tester.MoveAsync(false, "reversed"); tester.CheckLog("Enter:reversed"); await tester.MoveAsync(false, null); tester.CheckLog("Leave:reversed"); await tester.MoveAsync(true, "normal"); tester.CheckLog("Enter:normal"); await tester.MoveAsync(false, "reversed"); tester.CheckLog("Leave:normal", "Enter:reversed"); await tester.MoveAsync(true, "normal"); tester.CheckLog("Leave:reversed", "Enter:normal"); }
public async void SingleNode() { var tester = new NavigatorTester(); var isValid = false; tester.AddNode("normal", "reversed", () => isValid); isValid = false; await tester.MoveAsync(true, null); await tester.MoveAsync(false, null); isValid = true; await tester.MoveAsync(true, "normal", null); await tester.MoveAsync(false, "reversed", null); }
public async void ConditionsShouldNotAffectBackwardsMotion() { var tester = new NavigatorTester(); var isValid = false; tester.AddNode("normal", "reversed", () => isValid); isValid = false; await tester.MoveAsync(true, null); isValid = true; await tester.MoveAsync(false, null); // Unaffected by condition await tester.MoveAsync(true, "normal", null); isValid = false; await tester.MoveAsync(false, "reversed", null); // Unaffected by condition }
public async Task IgnoreNodeWhenChildBlockWhileReturnsFalse() { var tester = new NavigatorTester(); var @while = A.Fake <ICondition>(i => i.Strict()); A.CallTo(() => @while.Evaluate(tester.Context.Variables)) .Returns(false); tester.AddNode("N1", "R1"); tester.AddNode("N2", "R2").ConfigureChildBlock( i => A.CallTo(() => i.While).Returns(@while) ); tester.AddNode("N3", "R3"); await tester.MoveAsync(true, "N1", "N3", null); await tester.MoveAsync(false, "R3", "R1", null); }
public async Task CorrectSequenceOnMovePreviousWithThreeNodes() { var tester = new NavigatorTester(); tester.AddNode("n1", "r1"); tester.AddNode("n2", "r2"); tester.AddNode("n3", "r3"); await tester.MoveAsync(true, "n1", "n2", "n3", null); tester.CurrentNodeIndex.Should().BeNull(); await tester.MoveAsync(false, "r3"); tester.CurrentNodeIndex.Should().Be(1); await tester.MoveAsync(false, "r2"); tester.CurrentNodeIndex.Should().Be(0); await tester.MoveAsync(true, "n2", "n3", null); }
public async void TwoNodes() { var tester = new NavigatorTester(); var isValid = false; tester.AddNode("n1", "r1", () => isValid); tester.AddNode("n2", "r2"); for (var n = 1; n <= 3; n++) { isValid = false; await tester.MoveAsync(true, "n2", null); await tester.MoveAsync(false, "r2", null); isValid = true; await tester.MoveAsync(true, "n1", "n2", null); await tester.MoveAsync(false, "r2", "r1", null); } }
public async Task CorrectSequenceOnMovePrevious() { var tester = new NavigatorTester(); tester.AddNode("normal", "reversed"); await tester.MoveAsync(true, "normal"); tester.CurrentNodeIndex.Should().Be(0); await tester.MoveAsync(true, null); tester.CurrentNodeIndex.Should().BeNull(); await tester.MoveAsync(false, "reversed"); tester.CurrentNodeIndex.Should().BeNull(); await tester.MoveAsync(true, "normal"); tester.CurrentNodeIndex.Should().Be(0); await tester.MoveAsync(false, "reversed"); tester.CurrentNodeIndex.Should().BeNull(); await tester.MoveAsync(false, null); tester.CurrentNodeIndex.Should().BeNull(); await tester.MoveAsync(true, "normal"); tester.CurrentNodeIndex.Should().Be(0); await tester.MoveAsync(true, null); tester.CurrentNodeIndex.Should().BeNull(); }
public async Task SingleNode_BackAndForth() { var tester = new NavigatorTester(); tester.AddNode("normal", "reversed"); await tester.MoveAsync(true, "normal"); await tester.MoveAsync(false, "reversed", null); await tester.MoveAsync(true, "normal", null); await tester.MoveAsync(false, "reversed"); await tester.MoveAsync(true, "normal", null); await tester.MoveAsync(false, "reversed", null); }
public async Task BackAndForth() { var tester = new NavigatorTester(); tester.AddLoggedNode("n1", "r1"); tester.AddLoggedNode("n2", "r2"); tester.AddLoggedNode("n3", "r3"); // Forward await tester.MoveAsync(true, "n1"); tester.CheckLog("Enter:n1"); await tester.MoveAsync(false, "r1", null); tester.CheckLog("Leave:n1", "Enter:r1", "Leave:r1"); await tester.MoveAsync(true, "n1", "n2"); tester.CheckLog("Enter:n1", "Leave:n1", "Enter:n2"); await tester.MoveAsync(false, "r2", "r1", null); tester.CheckLog("Leave:n2", "Enter:r2", "Leave:r2", "Enter:r1", "Leave:r1"); await tester.MoveAsync(true, "n1", "n2", "n3"); tester.CheckLog("Enter:n1", "Leave:n1", "Enter:n2", "Leave:n2", "Enter:n3"); await tester.MoveAsync(false, "r3", "r2", "r1", null); tester.CheckLog("Leave:n3", "Enter:r3", "Leave:r3", "Enter:r2", "Leave:r2", "Enter:r1", "Leave:r1"); await tester.MoveAsync(true, "n1", "n2", "n3", null); tester.CheckLog("Enter:n1", "Leave:n1", "Enter:n2", "Leave:n2", "Enter:n3", "Leave:n3"); // Backward await tester.MoveAsync(false, "r3"); tester.CheckLog("Enter:r3"); await tester.MoveAsync(true, "n3", null); tester.CheckLog("Leave:r3", "Enter:n3", "Leave:n3"); await tester.MoveAsync(false, "r3", "r2"); tester.CheckLog("Enter:r3", "Leave:r3", "Enter:r2"); await tester.MoveAsync(true, "n2", "n3", null); tester.CheckLog("Leave:r2", "Enter:n2", "Leave:n2", "Enter:n3", "Leave:n3"); await tester.MoveAsync(false, "r3", "r2", "r1"); tester.CheckLog("Enter:r3", "Leave:r3", "Enter:r2", "Leave:r2", "Enter:r1"); await tester.MoveAsync(true, "n1", "n2", "n3", null); tester.CheckLog("Leave:r1", "Enter:n1", "Leave:n1", "Enter:n2", "Leave:n2", "Enter:n3", "Leave:n3"); await tester.MoveAsync(false, "r3", "r2", "r1", null); tester.CheckLog("Enter:r3", "Leave:r3", "Enter:r2", "Leave:r2", "Enter:r1", "Leave:r1"); }
public async void ThreeNodes() { var tester = new NavigatorTester(); var isValid1 = false; tester.AddNode("n1", "r1", () => isValid1); var isValid2 = false; tester.AddNode("n2", "r2", () => isValid2); var isValid3 = false; tester.AddNode("n3", "r3", () => isValid3); for (var n = 1; n <= 3; n++) { isValid1 = isValid2 = isValid3 = false; await tester.MoveAsync(true, null); await tester.MoveAsync(false, null); isValid1 = true; await tester.MoveAsync(true, "n1", null); await tester.MoveAsync(false, "r1", null); isValid2 = true; await tester.MoveAsync(true, "n1", "n2", null); await tester.MoveAsync(false, "r2", "r1", null); isValid3 = true; await tester.MoveAsync(true, "n1", "n2", "n3", null); await tester.MoveAsync(false, "r3", "r2", "r1", null); isValid2 = false; await tester.MoveAsync(true, "n1", "n3", null); await tester.MoveAsync(false, "r3", "r1", null); isValid1 = false; await tester.MoveAsync(true, "n3", null); await tester.MoveAsync(false, "r3", null); isValid2 = true; isValid3 = true; await tester.MoveAsync(true, "n2", "n3", null); await tester.MoveAsync(false, "r3", "r2", null); } }