//
// XmlElementTests
//
// Author:
// Jason Diamond (jason@injektilo.org)
//
// (C) 2002 Jason Diamond http://injektilo.org/
//
using System;
using System.Xml;
using System.IO;
using System.Text;
using NUnit.Framework;
namespace MonoTests.System.Xml
{
public class XmlElementTests : TestCase
{
public XmlElementTests () : base ("MonoTests.System.Xml.XmlElementTests testsuite") { }
public XmlElementTests (string name) : base (name) { }
private XmlDocument document;
protected override void SetUp()
{
document = new XmlDocument ();
}
private void AssertElement (XmlElement element, string prefix,
string localName, string namespaceURI,
int attributesCount)
{
AssertEquals (prefix != String.Empty ? prefix + ":" + localName : localName, element.Name);
AssertEquals (prefix, element.Prefix);
AssertEquals (localName, element.LocalName);
AssertEquals (namespaceURI, element.NamespaceURI);
//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");
AssertElement (element, String.Empty, "name", String.Empty, 0);
}
public void TestCreateElement1WithPrefix ()
{
XmlElement element = document.CreateElement ("prefix:localName");
AssertElement (element, "prefix", "localName", String.Empty, 0);
}
public void TestCreateElement2 ()
{
XmlElement element = document.CreateElement ("qualifiedName", "namespaceURI");
AssertElement (element, String.Empty, "qualifiedName",
"namespaceURI", 0);
}
public void TestCreateElement2WithPrefix ()
{
XmlElement element = document.CreateElement ("prefix:localName", "namespaceURI");
AssertElement (element, "prefix", "localName", "namespaceURI", 0);
}
public void TestCreateElement3 ()
{
XmlElement element = document.CreateElement ("prefix", "localName", "namespaceURI");
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 ("", element.OuterXml);
text = document.CreateTextNode ("bar");
element.AppendChild (text);
AssertEquals ("bar", element.InnerXml);
AssertEquals ("bar", element.OuterXml);
element.SetAttribute ("baz", "quux");
AssertEquals ("bar", element.InnerXml);
AssertEquals ("bar", element.OuterXml);
comment = document.CreateComment ("squonk");
element.AppendChild (comment);
AssertEquals ("bar", element.InnerXml);
AssertEquals ("bar", element.OuterXml);
}
public void TestSetGetAttribute ()
{
XmlElement element = document.CreateElement ("foo");
element.SetAttribute ("attr1", "val1");
element.SetAttribute ("attr2", "val2");
AssertEquals ("val1", element.GetAttribute ("attr1"));
AssertEquals ("val2", element.GetAttribute ("attr2"));
}
public void TestGetElementsByTagNameNoNameSpace ()
{
string xml = @"XML FunJohn Doe
34.95Bear and the Dragon
Tom Clancy6.95
Bourne IdentityRobert Ludlum
9.95
Bourne UltimatumRobert Ludlum
9.95";
MemoryStream memoryStream = new MemoryStream (Encoding.UTF8.GetBytes (xml));
document = new XmlDocument ();
document.Load (memoryStream);
XmlNodeList libraryList = document.GetElementsByTagName ("library");
XmlNode xmlNode = libraryList.Item (0);
XmlElement xmlElement = xmlNode as XmlElement;
XmlNodeList bookList = xmlElement.GetElementsByTagName ("book");
AssertEquals ("GetElementsByTagName (string) returned incorrect count.", 4, bookList.Count);
}
public void TestGetElementsByTagNameUsingNameSpace ()
{
StringBuilder xml = new StringBuilder ();
xml.Append (" ");
xml.Append ("XML Fun " );
xml.Append ("John Doe " );
xml.Append ("34.95 " );
xml.Append (" " );
xml.Append ("Bear and the Dragon " );
xml.Append ("Tom Clancy " );
xml.Append ("6.95 " );
xml.Append ("Bourne Identity " );
xml.Append ("Robert Ludlum " );
xml.Append ("9.95");
MemoryStream memoryStream = new MemoryStream (Encoding.UTF8.GetBytes (xml.ToString ()));
document = new XmlDocument ();
document.Load (memoryStream);
XmlNodeList libraryList = document.GetElementsByTagName ("library");
XmlNode xmlNode = libraryList.Item (0);
XmlElement xmlElement = xmlNode as XmlElement;
XmlNodeList bookList = xmlElement.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 ("", element.OuterXml);
}
}
}