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); }
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); }