2 // System.Xml.XmlNodeTests
5 // Kral Ferch <kral_ferch@hotmail.com>
15 using NUnit.Framework;
17 namespace MonoTests.System.Xml
19 public class XmlNodeTests : TestCase
21 public XmlNodeTests () : base ("MonoTests.System.Xml.XmlNodeTests testsuite") {}
22 public XmlNodeTests (string name) : base (name) {}
34 protected override void SetUp ()
36 document = new XmlDocument ();
37 document.NodeInserted += new XmlNodeChangedEventHandler (this.EventNodeInserted);
38 document.NodeInserting += new XmlNodeChangedEventHandler (this.EventNodeInserting);
39 document.NodeRemoved += new XmlNodeChangedEventHandler (this.EventNodeRemoved);
40 document.NodeRemoving += new XmlNodeChangedEventHandler (this.EventNodeRemoving);
41 element = document.CreateElement ("foo");
42 element2 = document.CreateElement ("bar");
45 private void EventNodeInserted(Object sender, XmlNodeChangedEventArgs e)
50 private void EventNodeInserting (Object sender, XmlNodeChangedEventArgs e)
55 private void EventNodeChanged(Object sender, XmlNodeChangedEventArgs e)
60 private void EventNodeChanging (Object sender, XmlNodeChangedEventArgs e)
65 private void EventNodeRemoved(Object sender, XmlNodeChangedEventArgs e)
70 private void EventNodeRemoving (Object sender, XmlNodeChangedEventArgs e)
75 public void TestAppendChild ()
81 element.AppendChild (element2);
85 // Can only append to elements, documents, and attributes
88 comment = document.CreateComment ("baz");
89 comment.AppendChild (element2);
90 Fail ("Expected an InvalidOperationException to be thrown.");
92 catch (InvalidOperationException) {}
94 // Can't append a node from one document into another document.
95 XmlDocument document2 = new XmlDocument();
96 AssertEquals (1, element.ChildNodes.Count);
99 element2 = document2.CreateElement ("qux");
100 element.AppendChild (element2);
101 Fail ("Expected an ArgumentException to be thrown.");
103 catch (ArgumentException) {}
104 AssertEquals (1, element.ChildNodes.Count);
106 // Can't append to a readonly node.
107 /* TODO put this in when I figure out how to create a read-only node.
110 XmlElement element3 = (XmlElement)element.CloneNode (false);
111 Assert (!element.IsReadOnly);
112 Assert (element3.IsReadOnly);
113 element2 = document.CreateElement ("quux");
114 element3.AppendChild (element2);
115 Fail ("Expected an ArgumentException to be thrown.");
117 catch (ArgumentException) {}
121 public void TestInsertBefore()
123 document = new XmlDocument();
124 document.LoadXml("<root><sub /></root>");
125 XmlElement docelem = document.DocumentElement;
126 docelem.InsertBefore(document.CreateElement("good_child"), docelem.FirstChild);
127 AssertEquals("InsertBefore.Normal", "good_child", docelem.FirstChild.Name);
128 // These are required for .NET 1.0 but not for .NET 1.1.
130 // document.InsertBefore (document.CreateElement ("BAD_MAN"), docelem);
131 // Fail ("#InsertBefore.BadPositionButNoError.1");
133 // catch (XmlException) {}
136 public void TestInsertAfter()
138 document = new XmlDocument();
139 document.LoadXml("<root><sub1 /><sub2 /></root>");
140 XmlElement docelem = document.DocumentElement;
141 XmlElement newelem = document.CreateElement("good_child");
142 docelem.InsertAfter(newelem, docelem.FirstChild);
143 AssertEquals("InsertAfter.Normal", 3, docelem.ChildNodes.Count);
144 AssertEquals("InsertAfter.First", "sub1", docelem.FirstChild.Name);
145 AssertEquals("InsertAfter.Last", "sub2", docelem.LastChild.Name);
146 AssertEquals("InsertAfter.Prev", "good_child", docelem.FirstChild.NextSibling.Name);
147 AssertEquals("InsertAfter.Next", "good_child", docelem.LastChild.PreviousSibling.Name);
148 // this doesn't throw an exception
149 document.InsertAfter(document.CreateElement("BAD_MAN"), docelem);
150 AssertEquals("InsertAfter with bad location",
151 "<root><sub1 /><good_child /><sub2 /></root><BAD_MAN />",
155 public void TestPrependChild()
157 document = new XmlDocument();
158 document.LoadXml("<root><sub1 /><sub2 /></root>");
159 XmlElement docelem = document.DocumentElement;
160 docelem.PrependChild(document.CreateElement("prepender"));
161 AssertEquals("PrependChild", "prepender", docelem.FirstChild.Name);
164 public void saveTestRemoveAll ()
166 // TODO: put this test back in when AttributeCollection.RemoveAll() is implemented.
167 element.AppendChild(element2);
170 element.RemoveAll ();
175 public void TestRemoveChild ()
177 element.AppendChild(element2);
180 element.RemoveChild (element2);
185 public void TestGetPrefixOfNamespace ()
187 document.LoadXml ("<root><c1 xmlns='urn:foo'><c2 xmlns:foo='urn:foo' xmlns='urn:bar'><c3 xmlns=''/></c2></c1></root>");
188 AssertEquals ("root", String.Empty, document.DocumentElement.GetPrefixOfNamespace ("urn:foo"));
189 AssertEquals ("c1", String.Empty, document.DocumentElement.GetPrefixOfNamespace ("urn:foo"));
190 AssertEquals ("c2", String.Empty, document.DocumentElement.FirstChild.GetPrefixOfNamespace ("urn:foo"));
191 AssertEquals ("c3", "foo", document.DocumentElement.FirstChild.FirstChild.GetPrefixOfNamespace ("urn:foo"));
195 public void TestReplaceChild ()
197 document.LoadXml ("<root/>");
198 document.NodeInserted += new XmlNodeChangedEventHandler (this.EventNodeInserted);
199 document.NodeChanged += new XmlNodeChangedEventHandler (this.EventNodeChanged);
200 document.NodeRemoved += new XmlNodeChangedEventHandler (this.EventNodeRemoved);
201 inserted = changed = removed = false;
202 XmlElement el = document.CreateElement("root2");
203 document.ReplaceChild (el, document.DocumentElement);
204 AssertEquals ("root2", document.DocumentElement.Name);
205 AssertEquals (1, document.ChildNodes.Count);
206 Assert (inserted && removed && !changed);