예제 #1
0
    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);
        }
    }
예제 #2
0
    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);
        }
    }
예제 #3
0
    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);
        }
    }
예제 #4
0
    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);
        }
    }
예제 #5
0
    public async Task RepeatMultipleNodes()
    {
        var tester = new NavigatorTester();

        var @while = A.Fake <ICondition>(i => i.Strict());

        A.CallTo(() => @while.Evaluate(tester.Context.Variables))
        .ReturnsNextFromSequence(true, false);

        A.CallTo(() => tester.Block.While).Returns(@while);

        tester.AddNode("N1", "R1");
        tester.AddNode("N2", "R2");
        tester.AddNode("N3", "R3");

        await tester.MoveAsync(true, "N1", "N2", "N3", "N1", "N2", "N3", null);

        await tester.MoveAsync(false, "R3", "R2", "R1", "R3", "R2", "R1", null);
    }
예제 #6
0
    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);
    }
예제 #7
0
    public async void TwoNodes_BackAndForth()
    {
        var tester  = new NavigatorTester();
        var isValid = false;

        tester.AddNode("n1", "r1");
        tester.AddNode("n2", "r2", () => isValid);

        for (var n = 1; n <= 3; n++)
        {
            isValid = false;

            await tester.MoveAsync(true, "n1", null);

            await tester.MoveAsync(false, "r1", null);

            isValid = true;

            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);
        }
    }
예제 #8
0
    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);
    }
예제 #9
0
    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);
    }
예제 #10
0
    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);
    }
예제 #11
0
    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
    }
예제 #12
0
    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();
    }