using System;
using System.Xml;
using NUnit.Framework;
namespace Ximian.Mono.Tests
{
public class XmlDocumentTests : TestCase
{
public XmlDocumentTests () : base ("Ximian.Mono.Tests.XmlDocumentTests testsuite") {}
public XmlDocumentTests (string name) : base (name) {}
private XmlDocument document;
protected override void SetUp ()
{
document = new XmlDocument ();
}
public void TestDocumentElement ()
{
AssertNull (document.DocumentElement);
XmlElement element = document.CreateElement ("foo", "bar", "http://foo/");
AssertNotNull (element);
AssertEquals ("foo", element.Prefix);
AssertEquals ("bar", element.LocalName);
AssertEquals ("http://foo/", element.NamespaceURI);
AssertEquals ("foo:bar", element.Name);
AssertSame (element, document.AppendChild (element));
AssertSame (element, document.DocumentElement);
}
public void TestDocumentEmpty()
{
AssertEquals ("Incorrect output for empty document.", "", document.OuterXml);
}
public void TestLoadXmlCDATA ()
{
document.LoadXml ("");
Assert (document.DocumentElement.FirstChild.NodeType == XmlNodeType.CDATA);
AssertEquals ("bar", document.DocumentElement.FirstChild.Value);
}
public void TestLoadXMLComment()
{
// XmlTextReader needs to throw this exception
// try {
// document.LoadXml("");
// Fail("XmlException should have been thrown.");
// }
// catch (XmlException e) {
// AssertEquals("Exception message doesn't match.", "The root element is missing.", e.Message);
// }
document.LoadXml ("");
Assert (document.DocumentElement.FirstChild.NodeType == XmlNodeType.Comment);
AssertEquals ("Comment", document.DocumentElement.FirstChild.Value);
document.LoadXml (@"");
AssertEquals ("Incorrect target.", "bar", ((XmlComment)document.FirstChild.FirstChild).Data);
}
public void TestLoadXmlElementSingle ()
{
AssertNull (document.DocumentElement);
document.LoadXml ("");
AssertNotNull (document.DocumentElement);
AssertSame (document.FirstChild, document.DocumentElement);
AssertEquals (String.Empty, document.DocumentElement.Prefix);
AssertEquals ("foo", document.DocumentElement.LocalName);
AssertEquals (String.Empty, document.DocumentElement.NamespaceURI);
AssertEquals ("foo", document.DocumentElement.Name);
}
public void TestLoadXmlElementWithAttributes ()
{
AssertNull (document.DocumentElement);
document.LoadXml ("");
XmlElement documentElement = document.DocumentElement;
AssertEquals ("baz", documentElement.GetAttribute ("bar"));
AssertEquals ("quuux", documentElement.GetAttribute ("quux"));
}
public void TestLoadXmlElementWithChildElement ()
{
document.LoadXml ("");
Assert (document.ChildNodes.Count == 1);
Assert (document.FirstChild.ChildNodes.Count == 1);
AssertEquals ("foo", document.DocumentElement.LocalName);
AssertEquals ("bar", document.DocumentElement.FirstChild.LocalName);
}
public void TestLoadXmlElementWithTextNode ()
{
document.LoadXml ("bar");
Assert (document.DocumentElement.FirstChild.NodeType == XmlNodeType.Text);
AssertEquals ("bar", document.DocumentElement.FirstChild.Value);
}
public void TestLoadXmlExceptionClearsDocument ()
{
document.LoadXml ("");
Assert (document.FirstChild != null);
try {
document.LoadXml ("<123/>");
Fail ("An XmlException should have been thrown.");
} catch (XmlException) {}
Assert (document.FirstChild == null);
}
public void TestLoadXmlProcessingInstruction ()
{
document.LoadXml (@"");
AssertEquals ("Incorrect target.", "foo", ((XmlProcessingInstruction)document.FirstChild).Target);
AssertEquals ("Incorrect data.", "bar='baaz' quux='quuux'", ((XmlProcessingInstruction)document.FirstChild).Data);
}
public void TestOuterXml ()
{
string xml;
xml = "";
document.LoadXml (xml);
AssertEquals("XmlDocument with cdata OuterXml is incorrect.", xml, document.OuterXml);
xml = "";
document.LoadXml (xml);
AssertEquals("XmlDocument with comment OuterXml is incorrect.", xml, document.OuterXml);
xml = "";
document.LoadXml (xml);
AssertEquals("XmlDocument with processing instruction OuterXml is incorrect.", xml, document.OuterXml);
}
public void TestParentNodes ()
{
document.LoadXml ("");
XmlNode node = document.FirstChild.FirstChild.FirstChild;
AssertEquals ("Wrong child found.", "baz", node.LocalName);
AssertEquals ("Wrong parent.", "bar", node.ParentNode.LocalName);
AssertEquals ("Wrong parent.", "foo", node.ParentNode.ParentNode.LocalName);
AssertEquals ("Wrong parent.", "#document", node.ParentNode.ParentNode.ParentNode.LocalName);
AssertNull ("Expected parent to be null.", node.ParentNode.ParentNode.ParentNode.ParentNode);
}
public void TestRemovedElementNextSibling ()
{
XmlNode node;
XmlNode nextSibling;
document.LoadXml ("");
node = document.DocumentElement.FirstChild;
document.DocumentElement.RemoveChild (node);
nextSibling = node.NextSibling;
AssertNull ("Expected removed node's next sibling to be null.", nextSibling);
}
}
}