DocNode CreateScalarNode(string value)
    {
        var valueNode = new ComposedDocNode(DocNodeType.Scalar);

        valueNode.StringValue = value;
        return(valueNode);
    }
    public void DeepMerge_DifferentDocTypes_ThrowsException()
    {
        var emptyDoc      = new ComposedDocNode(DocNodeType.List);
        var otherEmptyDoc = new ComposedDocNode(DocNodeType.Dictionary);

        Assert.That(() => DocNode.DeepMerge(emptyDoc, otherEmptyDoc),
                    Throws.TypeOf <ArgumentException>());
    }
    DocNode CreateDictNode(params KeyValuePair <string, DocNode>[] pairs)
    {
        var dict = new ComposedDocNode(DocNodeType.Dictionary);

        foreach (var pair in pairs)
        {
            dict.Add(pair.Key, pair.Value);
        }
        return(dict);
    }
    DocNode CreateListNode(params DocNode[] items)
    {
        var list = new ComposedDocNode(DocNodeType.List);

        foreach (var item in items)
        {
            list.Add(item);
        }
        return(list);
    }
    public void DeepMerge_EmptyListDocs_ReturnsEmptyListDoc()
    {
        var emptyDoc      = new ComposedDocNode(DocNodeType.List);
        var otherEmptyDoc = new ComposedDocNode(DocNodeType.List);

        var merged = DocNode.DeepMerge(emptyDoc, otherEmptyDoc);

        var idealEmpty = new ComposedDocNode(DocNodeType.List);

        Assert.AreEqual(idealEmpty, merged);
    }
    public void DeepMerge_EmptyListDocs_ReturnsEmptyListDoc()
    {
        var emptyDoc      = new ComposedDocNode(DocNodeType.List, sourceInformation: "e1");
        var otherEmptyDoc = new ComposedDocNode(DocNodeType.List, sourceInformation: "e2");

        var merged = DocNode.DeepMerge(emptyDoc, otherEmptyDoc);

        var idealEmpty = new ComposedDocNode(DocNodeType.List);

        Assert.AreEqual(idealEmpty, merged);
        Assert.AreEqual("Combination of: [e1, e2]", merged.SourceInformation);
    }
    public void DeepMerge_EmptyDictDocs_ReturnsEmptyDictDoc()
    {
        var emptyDoc      = new ComposedDocNode(DocNodeType.Dictionary);
        var otherEmptyDoc = new ComposedDocNode(DocNodeType.Dictionary);

        var merged = DocNode.DeepMerge(emptyDoc, otherEmptyDoc);

        var idealEmpty = new ComposedDocNode(DocNodeType.Dictionary);

        Assert.AreEqual(idealEmpty, merged);
        Assert.AreEqual(merged.SourceInformation, "Merging of: [ComposedDocNode Dictionary, ComposedDocNode Dictionary]");
    }