Added implementation of namepsace qualified GetElementsByTagName courtesy of
[mono.git] / mcs / class / System.XML / Test / XmlElementTests.cs
index 9dbe7c43498c803e74202a3e85f96dd0ef2497bd..734b36108dd49bb62642aa44a2361a4abe5a2979 100644 (file)
@@ -9,14 +9,16 @@
 
 using System;
 using System.Xml;
+using System.IO;
+using System.Text;
 
 using NUnit.Framework;
 
-namespace Ximian.Mono.Tests
+namespace MonoTests.System.Xml
 {
        public class XmlElementTests : TestCase
        {
-               public XmlElementTests () : base ("Ximian.Mono.Tests.XmlElementTests testsuite") { }
+               public XmlElementTests () : base ("MonoTests.System.Xml.XmlElementTests testsuite") { }
                public XmlElementTests (string name) : base (name) { }
 
                private XmlDocument document;
@@ -37,6 +39,30 @@ namespace Ximian.Mono.Tests
                        //AssertEquals (attributesCount, element.Attributes.Count);
                }
 
+               public void TestCloneNode ()
+               {
+                       XmlElement element = document.CreateElement ("foo");
+                       XmlElement child = document.CreateElement ("bar");
+                       XmlElement grandson = document.CreateElement ("baz");
+
+                       element.SetAttribute ("attr1", "val1");
+                       element.SetAttribute ("attr2", "val2");
+                       element.AppendChild (child);
+                       child.SetAttribute ("attr3", "val3");
+                       child.AppendChild (grandson);
+                        
+                       document.AppendChild (element);
+                       XmlNode deep = element.CloneNode (true);
+                       // AssertEquals ("These should be the same", deep.OuterXml, element.OuterXml); 
+                       AssertNull ("This is not null", deep.ParentNode);
+                       Assert ("Copies, not pointers", !Object.ReferenceEquals (element,deep));
+
+                       XmlNode shallow = element.CloneNode (false);
+                       AssertNull ("This is not null", shallow.ParentNode);
+                       Assert ("Copies, not pointers", !Object.ReferenceEquals (element,shallow));
+                       AssertEquals ("Shallow clones shalt have no children!", false, shallow.HasChildNodes);
+               }
+
                public void TestCreateElement1 ()
                {
                        XmlElement element = document.CreateElement ("name");
@@ -68,6 +94,40 @@ namespace Ximian.Mono.Tests
                        AssertElement (element, "prefix", "localName", "namespaceURI", 0);
                }
 
+               public void TestCreateElement3WithNullNamespace ()
+               {
+                       // bug #26855, NamespaceURI should NEVER be null.
+                       XmlElement element = document.CreateElement (null, "localName", null);
+                       AssertElement (element, String.Empty, "localName", String.Empty, 0);
+               }
+
+               public void TestInnerAndOuterXml ()
+               {
+                       XmlElement element;
+                       XmlText text;
+                       XmlComment comment;
+                       
+                       element = document.CreateElement ("foo");
+                       AssertEquals (String.Empty, element.InnerXml);
+                       AssertEquals ("<foo />", element.OuterXml);
+
+                       text = document.CreateTextNode ("bar");
+                       element.AppendChild (text);
+                       AssertEquals ("bar", element.InnerXml);
+                       AssertEquals ("<foo>bar</foo>", element.OuterXml);
+
+                       element.SetAttribute ("baz", "quux");
+                       AssertEquals ("bar", element.InnerXml);
+                       AssertEquals ("<foo baz=\"quux\">bar</foo>", element.OuterXml);
+
+                       comment = document.CreateComment ("squonk");
+                       element.AppendChild (comment);
+                       AssertEquals ("bar<!--squonk-->", element.InnerXml);
+                       AssertEquals ("<foo baz=\"quux\">bar<!--squonk--></foo>", element.OuterXml);
+
+
+               }
+
                public void TestSetGetAttribute ()
                {
                        XmlElement element = document.CreateElement ("foo");
@@ -77,28 +137,50 @@ namespace Ximian.Mono.Tests
                        AssertEquals ("val2", element.GetAttribute ("attr2"));
                }
 
-               public void TestCloneNode ()
+               public void TestGetElementsByTagNameNoNameSpace ()
                {
-                       XmlElement element = document.CreateElement ("foo");
-                        XmlElement child = document.CreateElement ("bar");
-                        XmlElement grandson = document.CreateElement ("baz");
+                       string xml = @"<library><book><title>XML Fun</title><author>John Doe</author>
+                               <price>34.95</price></book><book><title>Bear and the Dragon</title>
+                               <author>Tom Clancy</author><price>6.95</price></book><book>
+                               <title>Bourne Identity</title><author>Robert Ludlum</author>
+                               <price>9.95</price></book><Fluffer><Nutter><book>
+                               <title>Bourne Ultimatum</title><author>Robert Ludlum</author>
+                               <price>9.95</price></book></Nutter></Fluffer></library>";
 
-                       element.SetAttribute ("attr1", "val1");
-                       element.SetAttribute ("attr2", "val2");
-                        element.AppendChild (child);
-                        child.SetAttribute ("attr3", "val3");
-                        child.AppendChild (grandson);
-                        
-                        document.AppendChild (element);
-                        XmlNode deep = element.CloneNode (true);
-                        // AssertEquals ("These should be the same", deep.OuterXml, element.OuterXml); 
-                        AssertNull ("This is not null", deep.ParentNode);
-                        Assert ("Copies, not pointers", !Object.ReferenceEquals (element,deep));
-
-                        XmlNode shallow = element.CloneNode (false);
-                        AssertNull ("This is not null", shallow.ParentNode);
-                        Assert ("Copies, not pointers", !Object.ReferenceEquals (element,shallow));
-                        AssertEquals ("Shallow clones shalt have no children!", false, shallow.HasChildNodes);
+                       MemoryStream memoryStream = new MemoryStream (Encoding.UTF8.GetBytes (xml));
+                       document = new XmlDocument ();
+                       document.Load (memoryStream);
+                       XmlNodeList bookList = document.GetElementsByTagName ("book");
+                       AssertEquals ("GetElementsByTagName (string) returned incorrect count.", 4, bookList.Count);
+               }
+
+               public void TestGetElementsByTagNameUsingNameSpace ()
+               {
+                       StringBuilder xml = new StringBuilder ();
+                       xml.Append ("<?xml version=\"1.0\" ?><library xmlns:North=\"http://www.foo.com\"");
+                       xml.Append ("xmlns:South=\"http://www.goo.com\"><North:book type=\"non-fiction\"> ");
+                       xml.Append ("<North:title type=\"intro\">XML Fun</North:title> " );
+                       xml.Append ("<North:author>John Doe</North:author> " );
+                       xml.Append ("<North:price>34.95</North:price></North:book> " );
+                       xml.Append ("<South:book type=\"fiction\"> " );
+                       xml.Append ("<South:title>Bear and the Dragon</South:title> " );
+                       xml.Append ("<South:author>Tom Clancy</South:author> " );
+                       xml.Append ("<South:price>6.95</South:price></South:book> " );
+                       xml.Append ("<South:book type=\"fiction\"><South:title>Bourne Identity</South:title> " );
+                       xml.Append ("<South:author>Robert Ludlum</South:author> " );
+                       xml.Append ("<South:price>9.95</South:price></South:book></library>");
+
+                       MemoryStream memoryStream = new MemoryStream (Encoding.UTF8.GetBytes (xml.ToString ()));
+                       document = new XmlDocument ();
+                       document.Load (memoryStream);
+                       XmlNodeList bookList = document.GetElementsByTagName ("book", "http://www.foo.com");
+                       AssertEquals ("GetElementsByTagName (string, uri) returned incorrect count.", 1, bookList.Count);
                }
+
+               public void TestOuterXmlWithNamespace ()
+               {
+                       XmlElement element = document.CreateElement ("foo", "bar", "#foo");
+                       AssertEquals ("<foo:bar xmlns:foo=\"#foo\" />", element.OuterXml);
+               }               
        }
 }