Exemplo n.º 1
0
    public void IntermediateNodeWalker_Visit_TraversesEntireGraph()
    {
        // Arrange
        var walker = new DerivedIntermediateNodeWalker();

        var nodes = new IntermediateNode[]
        {
            new BasicIntermediateNode("Root"),
            new BasicIntermediateNode("Root->A"),
            new BasicIntermediateNode("Root->B"),
            new BasicIntermediateNode("Root->B->1"),
            new BasicIntermediateNode("Root->B->2"),
            new BasicIntermediateNode("Root->C"),
        };

        var builder = new DefaultRazorIntermediateNodeBuilder();

        builder.Push(nodes[0]);
        builder.Add(nodes[1]);
        builder.Push(nodes[2]);
        builder.Add(nodes[3]);
        builder.Add(nodes[4]);
        builder.Pop();
        builder.Add(nodes[5]);

        var root = builder.Pop();

        // Act
        walker.Visit(root);

        // Assert
        Assert.Equal(nodes, walker.Visited.ToArray());
    }
Exemplo n.º 2
0
    public void IntermediateNodeWalker_Visit_SetsParentAndAncestors()
    {
        // Arrange
        var walker = new DerivedIntermediateNodeWalker();

        var nodes = new IntermediateNode[]
        {
            new BasicIntermediateNode("Root"),
            new BasicIntermediateNode("Root->A"),
            new BasicIntermediateNode("Root->B"),
            new BasicIntermediateNode("Root->B->1"),
            new BasicIntermediateNode("Root->B->2"),
            new BasicIntermediateNode("Root->C"),
        };

        var ancestors = new Dictionary <string, string[]>()
        {
            { "Root", new string[] { } },
            { "Root->A", new string[] { "Root" } },
            { "Root->B", new string[] { "Root" } },
            { "Root->B->1", new string[] { "Root->B", "Root" } },
            { "Root->B->2", new string[] { "Root->B", "Root" } },
            { "Root->C", new string[] { "Root" } },
        };

        walker.OnVisiting = (n) =>
        {
            Assert.Equal(ancestors[((BasicIntermediateNode)n).Name], walker.Ancestors.Cast <BasicIntermediateNode>().Select(b => b.Name));
            Assert.Equal(ancestors[((BasicIntermediateNode)n).Name].FirstOrDefault(), ((BasicIntermediateNode)walker.Parent)?.Name);
        };

        var builder = new DefaultRazorIntermediateNodeBuilder();

        builder.Push(nodes[0]);
        builder.Add(nodes[1]);
        builder.Push(nodes[2]);
        builder.Add(nodes[3]);
        builder.Add(nodes[4]);
        builder.Pop();
        builder.Add(nodes[5]);

        var root = builder.Pop();

        // Act & Assert
        walker.Visit(root);
    }
    public void Add_AddsToChildrenAndSetsParent()
    {
        // Arrange
        var builder = new DefaultRazorIntermediateNodeBuilder();

        var parent = new BasicIntermediateNode();

        builder.Push(parent);

        var node = new BasicIntermediateNode();

        // Act
        builder.Add(node);

        // Assert
        Assert.Same(parent, builder.Current);
        Assert.Collection(parent.Children, n => Assert.Same(node, n));
    }
    public void Insert_AddsToChildren_NonEmpyCollection_AtEnd()
    {
        // Arrange
        var builder = new DefaultRazorIntermediateNodeBuilder();

        var parent = new BasicIntermediateNode();

        builder.Push(parent);

        var child = new BasicIntermediateNode();

        builder.Add(child);

        var node = new BasicIntermediateNode();

        // Act
        builder.Insert(1, node);

        // Assert
        Assert.Same(parent, builder.Current);
        Assert.Collection(parent.Children, n => Assert.Same(child, n), n => Assert.Same(node, n));
    }