Beispiel #1
0
        public void TestRemove()
        {
            var node = new HText("node");

            // Create parent
            var elm = new HElement("test", node);

            Assert.Same(node, elm.FirstNode);
            Assert.Same(node, elm.LastNode);
            Assert.Same(elm, node.Parent);
            Assert.Equal(1, elm.Nodes().Count());

            // Remove attribute
            node.Remove();
            Assert.Null(elm.FirstNode);
            Assert.Null(elm.LastNode);
            Assert.Null(node.Parent);
            Assert.Equal(0, elm.Nodes().Count());

            // Fail to remove a detached node
            var ioe = Assert.Throws <InvalidOperationException>(() => node.Remove());

            Assert.Equal("No parent found.", ioe.Message);
        }
Beispiel #2
0
        public void TestRemoveNode()
        {
            HNode node1 = new HText("node 1");
            HNode node2 = new HElement("node2", "value2");
            HNode node3 = new HText("node 3");
            HNode node4 = new HElement("node4", "value4");

            // Create parent
            var elm = new HElement("test", node1, node2, node3, node4);

            Assert.Same(node1, elm.FirstNode);
            Assert.Same(node4, elm.LastNode);

            Assert.Same(elm, node1.Parent);
            Assert.Null(node1.PreviousNode);
            Assert.Same(node2, node1.NextNode);

            Assert.Same(elm, node2.Parent);
            Assert.Same(node1, node2.PreviousNode);
            Assert.Same(node3, node2.NextNode);

            Assert.Same(elm, node3.Parent);
            Assert.Same(node2, node3.PreviousNode);
            Assert.Same(node4, node3.NextNode);

            Assert.Same(elm, node4.Parent);
            Assert.Same(node3, node4.PreviousNode);
            Assert.Null(node4.NextNode);

            // Remove node2
            node2.Remove();
            Assert.Same(node1, elm.FirstNode);
            Assert.Same(node4, elm.LastNode);

            Assert.Same(elm, node1.Parent);
            Assert.Null(node1.PreviousNode);
            Assert.Same(node3, node1.NextNode);

            Assert.Null(node2.Parent);
            Assert.Null(node2.PreviousNode);
            Assert.Null(node2.NextNode);

            Assert.Same(elm, node3.Parent);
            Assert.Same(node1, node3.PreviousNode);
            Assert.Same(node4, node3.NextNode);

            Assert.Same(elm, node4.Parent);
            Assert.Same(node3, node4.PreviousNode);
            Assert.Null(node4.NextNode);

            var attrs = elm.Nodes().ToArray();

            Assert.Equal(new HNode[] { node1, node3, node4 }, attrs);

            // Remove node4
            node4.Remove();
            Assert.Same(node1, elm.FirstNode);
            Assert.Same(node3, elm.LastNode);

            Assert.Same(elm, node1.Parent);
            Assert.Null(node1.PreviousNode);
            Assert.Same(node3, node1.NextNode);

            Assert.Same(elm, node3.Parent);
            Assert.Same(node1, node3.PreviousNode);
            Assert.Null(node3.NextNode);

            Assert.Null(node4.Parent);
            Assert.Null(node4.PreviousNode);
            Assert.Null(node4.NextNode);

            attrs = elm.Nodes().ToArray();
            Assert.Equal(new HNode[] { node1, node3 }, attrs);

            // Remove node1
            node1.Remove();
            Assert.Same(node3, elm.FirstNode);
            Assert.Same(node3, elm.LastNode);

            Assert.Null(node1.Parent);
            Assert.Null(node1.PreviousNode);
            Assert.Null(node1.NextNode);

            Assert.Same(elm, node3.Parent);
            Assert.Null(node3.PreviousNode);
            Assert.Null(node3.NextNode);

            attrs = elm.Nodes().ToArray();
            Assert.Equal(new HNode[] { node3 }, attrs);

            // Remove node3
            node3.Remove();
            Assert.Null(elm.FirstNode);
            Assert.Null(elm.LastNode);

            Assert.Null(node3.Parent);
            Assert.Null(node3.PreviousNode);
            Assert.Null(node3.NextNode);

            attrs = elm.Nodes().ToArray();
            Assert.Equal(new HNode[] { }, attrs);

            // Fail to remove a detached attribute
            var ioe = Assert.Throws <InvalidOperationException>(() => node1.Remove());

            Assert.Equal("No parent found.", ioe.Message);
        }