5 // Jason Diamond (jason@injektilo.org)
7 // (C) 2002 Jason Diamond http://injektilo.org/
15 using NUnit.Framework;
17 namespace MonoTests.System.Xml
19 public class XmlElementTests : TestCase
21 public XmlElementTests () : base ("MonoTests.System.Xml.XmlElementTests testsuite") { }
22 public XmlElementTests (string name) : base (name) { }
24 private XmlDocument document;
26 protected override void SetUp()
28 document = new XmlDocument ();
31 private void AssertElement (XmlElement element, string prefix,
32 string localName, string namespaceURI,
35 AssertEquals (prefix != String.Empty ? prefix + ":" + localName : localName, element.Name);
36 AssertEquals (prefix, element.Prefix);
37 AssertEquals (localName, element.LocalName);
38 AssertEquals (namespaceURI, element.NamespaceURI);
39 //AssertEquals (attributesCount, element.Attributes.Count);
42 public void TestCloneNode ()
44 XmlElement element = document.CreateElement ("foo");
45 XmlElement child = document.CreateElement ("bar");
46 XmlElement grandson = document.CreateElement ("baz");
48 element.SetAttribute ("attr1", "val1");
49 element.SetAttribute ("attr2", "val2");
50 element.AppendChild (child);
51 child.SetAttribute ("attr3", "val3");
52 child.AppendChild (grandson);
54 document.AppendChild (element);
55 XmlNode deep = element.CloneNode (true);
56 // AssertEquals ("These should be the same", deep.OuterXml, element.OuterXml);
57 AssertNull ("This is not null", deep.ParentNode);
58 Assert ("Copies, not pointers", !Object.ReferenceEquals (element,deep));
60 XmlNode shallow = element.CloneNode (false);
61 AssertNull ("This is not null", shallow.ParentNode);
62 Assert ("Copies, not pointers", !Object.ReferenceEquals (element,shallow));
63 AssertEquals ("Shallow clones shalt have no children!", false, shallow.HasChildNodes);
66 public void TestCreateElement1 ()
68 XmlElement element = document.CreateElement ("name");
69 AssertElement (element, String.Empty, "name", String.Empty, 0);
72 public void TestCreateElement1WithPrefix ()
74 XmlElement element = document.CreateElement ("prefix:localName");
75 AssertElement (element, "prefix", "localName", String.Empty, 0);
78 public void TestCreateElement2 ()
80 XmlElement element = document.CreateElement ("qualifiedName", "namespaceURI");
81 AssertElement (element, String.Empty, "qualifiedName",
85 public void TestCreateElement2WithPrefix ()
87 XmlElement element = document.CreateElement ("prefix:localName", "namespaceURI");
88 AssertElement (element, "prefix", "localName", "namespaceURI", 0);
91 public void TestCreateElement3 ()
93 XmlElement element = document.CreateElement ("prefix", "localName", "namespaceURI");
94 AssertElement (element, "prefix", "localName", "namespaceURI", 0);
97 public void TestCreateElement3WithNullNamespace ()
99 // bug #26855, NamespaceURI should NEVER be null.
100 XmlElement element = document.CreateElement (null, "localName", null);
101 AssertElement (element, String.Empty, "localName", String.Empty, 0);
104 public void TestInnerAndOuterXml ()
110 element = document.CreateElement ("foo");
111 AssertEquals (String.Empty, element.InnerXml);
112 AssertEquals ("<foo />", element.OuterXml);
114 text = document.CreateTextNode ("bar");
115 element.AppendChild (text);
116 AssertEquals ("bar", element.InnerXml);
117 AssertEquals ("<foo>bar</foo>", element.OuterXml);
119 element.SetAttribute ("baz", "quux");
120 AssertEquals ("bar", element.InnerXml);
121 AssertEquals ("<foo baz=\"quux\">bar</foo>", element.OuterXml);
123 comment = document.CreateComment ("squonk");
124 element.AppendChild (comment);
125 AssertEquals ("bar<!--squonk-->", element.InnerXml);
126 AssertEquals ("<foo baz=\"quux\">bar<!--squonk--></foo>", element.OuterXml);
131 public void TestSetGetAttribute ()
133 XmlElement element = document.CreateElement ("foo");
134 element.SetAttribute ("attr1", "val1");
135 element.SetAttribute ("attr2", "val2");
136 AssertEquals ("val1", element.GetAttribute ("attr1"));
137 AssertEquals ("val2", element.GetAttribute ("attr2"));
140 public void TestGetElementsByTagNameNoNameSpace ()
142 string xml = @"<library><book><title>XML Fun</title><author>John Doe</author>
143 <price>34.95</price></book><book><title>Bear and the Dragon</title>
144 <author>Tom Clancy</author><price>6.95</price></book><book>
145 <title>Bourne Identity</title><author>Robert Ludlum</author>
146 <price>9.95</price></book><Fluffer><Nutter><book>
147 <title>Bourne Ultimatum</title><author>Robert Ludlum</author>
148 <price>9.95</price></book></Nutter></Fluffer></library>";
150 MemoryStream memoryStream = new MemoryStream (Encoding.UTF8.GetBytes (xml));
151 document = new XmlDocument ();
152 document.Load (memoryStream);
153 XmlNodeList bookList = document.GetElementsByTagName ("book");
154 AssertEquals ("GetElementsByTagName (string) returned incorrect count.", 4, bookList.Count);
157 public void TestOuterXmlWithNamespace ()
159 XmlElement element = document.CreateElement ("foo", "bar", "#foo");
160 AssertEquals ("<foo:bar xmlns:foo=\"#foo\" />", element.OuterXml);