6 namespace Ximian.Mono.Tests
8 public class XmlDocumentTests : TestCase
10 public XmlDocumentTests () : base ("Ximian.Mono.Tests.XmlDocumentTests testsuite") {}
11 public XmlDocumentTests (string name) : base (name) {}
13 private XmlDocument document;
15 protected override void SetUp ()
17 document = new XmlDocument ();
20 public void TestDocumentElement ()
22 AssertNull (document.DocumentElement);
23 XmlElement element = document.CreateElement ("foo", "bar", "http://foo/");
24 AssertNotNull (element);
26 AssertEquals ("foo", element.Prefix);
27 AssertEquals ("bar", element.LocalName);
28 AssertEquals ("http://foo/", element.NamespaceURI);
30 AssertEquals ("foo:bar", element.Name);
32 AssertSame (element, document.AppendChild (element));
34 AssertSame (element, document.DocumentElement);
37 public void TestDocumentEmpty()
39 AssertEquals ("Incorrect output for empty document.", "", document.OuterXml);
42 public void TestLoadXmlCDATA ()
44 document.LoadXml ("<foo><![CDATA[bar]]></foo>");
45 Assert (document.DocumentElement.FirstChild.NodeType == XmlNodeType.CDATA);
46 AssertEquals ("bar", document.DocumentElement.FirstChild.Value);
49 public void TestLoadXMLComment()
51 // XmlTextReader needs to throw this exception
53 // document.LoadXml("<!--foo-->");
54 // Fail("XmlException should have been thrown.");
56 // catch (XmlException e) {
57 // AssertEquals("Exception message doesn't match.", "The root element is missing.", e.Message);
60 document.LoadXml ("<foo><!--Comment--></foo>");
61 Assert (document.DocumentElement.FirstChild.NodeType == XmlNodeType.Comment);
62 AssertEquals ("Comment", document.DocumentElement.FirstChild.Value);
64 document.LoadXml (@"<foo><!--bar--></foo>");
65 AssertEquals ("Incorrect target.", "bar", ((XmlComment)document.FirstChild.FirstChild).Data);
68 public void TestLoadXmlElementSingle ()
70 AssertNull (document.DocumentElement);
71 document.LoadXml ("<foo/>");
73 AssertNotNull (document.DocumentElement);
74 AssertSame (document.FirstChild, document.DocumentElement);
76 AssertEquals (String.Empty, document.DocumentElement.Prefix);
77 AssertEquals ("foo", document.DocumentElement.LocalName);
78 AssertEquals (String.Empty, document.DocumentElement.NamespaceURI);
79 AssertEquals ("foo", document.DocumentElement.Name);
82 public void TestLoadXmlElementWithAttributes ()
84 AssertNull (document.DocumentElement);
85 document.LoadXml ("<foo bar='baz' quux='quuux'/>");
87 XmlElement documentElement = document.DocumentElement;
89 AssertEquals ("baz", documentElement.GetAttribute ("bar"));
90 AssertEquals ("quuux", documentElement.GetAttribute ("quux"));
92 public void TestLoadXmlElementWithChildElement ()
94 document.LoadXml ("<foo><bar/></foo>");
95 Assert (document.ChildNodes.Count == 1);
96 Assert (document.FirstChild.ChildNodes.Count == 1);
97 AssertEquals ("foo", document.DocumentElement.LocalName);
98 AssertEquals ("bar", document.DocumentElement.FirstChild.LocalName);
101 public void TestLoadXmlElementWithTextNode ()
103 document.LoadXml ("<foo>bar</foo>");
104 Assert (document.DocumentElement.FirstChild.NodeType == XmlNodeType.Text);
105 AssertEquals ("bar", document.DocumentElement.FirstChild.Value);
108 public void TestLoadXmlExceptionClearsDocument ()
110 document.LoadXml ("<foo/>");
111 Assert (document.FirstChild != null);
114 document.LoadXml ("<123/>");
115 Fail ("An XmlException should have been thrown.");
116 } catch (XmlException) {}
118 Assert (document.FirstChild == null);
121 public void TestLoadXmlProcessingInstruction ()
123 document.LoadXml (@"<?foo bar='baaz' quux='quuux'?><quuuux></quuuux>");
124 AssertEquals ("Incorrect target.", "foo", ((XmlProcessingInstruction)document.FirstChild).Target);
125 AssertEquals ("Incorrect data.", "bar='baaz' quux='quuux'", ((XmlProcessingInstruction)document.FirstChild).Data);
128 public void TestOuterXml ()
132 xml = "<root><![CDATA[foo]]></root>";
133 document.LoadXml (xml);
134 AssertEquals("XmlDocument with cdata OuterXml is incorrect.", xml, document.OuterXml);
136 xml = "<root><!--foo--></root>";
137 document.LoadXml (xml);
138 AssertEquals("XmlDocument with comment OuterXml is incorrect.", xml, document.OuterXml);
140 xml = "<root><?foo bar?></root>";
141 document.LoadXml (xml);
142 AssertEquals("XmlDocument with processing instruction OuterXml is incorrect.", xml, document.OuterXml);
145 public void TestParentNodes ()
147 document.LoadXml ("<foo><bar><baz/></bar></foo>");
148 XmlNode node = document.FirstChild.FirstChild.FirstChild;
149 AssertEquals ("Wrong child found.", "baz", node.LocalName);
150 AssertEquals ("Wrong parent.", "bar", node.ParentNode.LocalName);
151 AssertEquals ("Wrong parent.", "foo", node.ParentNode.ParentNode.LocalName);
152 AssertEquals ("Wrong parent.", "#document", node.ParentNode.ParentNode.ParentNode.LocalName);
153 AssertNull ("Expected parent to be null.", node.ParentNode.ParentNode.ParentNode.ParentNode);
156 public void TestRemovedElementNextSibling ()
161 document.LoadXml ("<foo><child1/><child2/></foo>");
162 node = document.DocumentElement.FirstChild;
163 document.DocumentElement.RemoveChild (node);
164 nextSibling = node.NextSibling;
165 AssertNull ("Expected removed node's next sibling to be null.", nextSibling);