Example #1
0
    public async Task SingleNode()
    {
        var tester = new NavigatorTester();

        tester.AddLoggedNode("normal", "reversed");
        await CheckSingleNodeAsync(tester);
    }
Example #2
0
    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");
    }
Example #3
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);
        }
    }
Example #4
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);
        }
    }
Example #5
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);
        }
    }
Example #6
0
    private static async Task CheckEmptyBlockAsync(NavigatorTester tester)
    {
        await tester.MoveAsync(true, null);

        tester.CheckLog();
        await tester.MoveAsync(false, null);

        tester.CheckLog();
    }
Example #7
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);
        }
    }
Example #8
0
    public async Task Condition_SingleNode()
    {
        var tester  = new NavigatorTester();
        var isValid = false;

        tester.AddLoggedNode("normal", "reversed", () => isValid);

        isValid = false;

        await CheckEmptyBlockAsync(tester);

        isValid = true;

        await CheckSingleNodeAsync(tester);
    }
Example #9
0
    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);
    }
Example #10
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);
    }
Example #11
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);
    }
Example #12
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
    }
Example #13
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);
    }
Example #14
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);
    }
Example #15
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);
        }
    }
Example #16
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();
    }
Example #17
0
    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");
    }
Example #18
0
    public async Task EmptyBlock()
    {
        var tester = new NavigatorTester();

        await CheckEmptyBlockAsync(tester);
    }