1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
//
// System.Xml.XmlEntityReference.cs
//
// Authors:
// Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
// Martin Willemoes Hansen <mwh@sysrq.dk>
//
// (C) 2002 Atsushi Enomoto
// (C) 2003 Martin Willemoes Hansen
//
using System;
using System.Xml;
using NUnit.Framework;
namespace MonoTests.System.Xml
{
[TestFixture]
public class XmlEntityReferenceTests : Assertion
{
[Test]
public void WriteTo ()
{
XmlDocument doc = new XmlDocument();
doc.LoadXml("<root/>");
XmlEntityReference er = doc.CreateEntityReference("foo");
doc.DocumentElement.AppendChild(er);
AssertEquals ("Name", "foo", er.Name);
AssertEquals ("WriteTo", "<root>&foo;</root>", doc.DocumentElement.OuterXml);
}
[Test]
public void DescendantsRecursively ()
{
string dtd = "<!DOCTYPE root [<!ELEMENT root (#PCDATA)*>"
+ "<!ENTITY ent 'value'>"
+ "<!ENTITY ent2 'my &ent; string'>"
+ "]>";
string xml = dtd + "<root>&ent;</root>";
XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
XmlDocument doc = new XmlDocument ();
doc.Load (xtr);
XmlEntity ent = (XmlEntity) doc.DocumentType.Entities.GetNamedItem ("ent2");
AssertEquals ("ent2", ent.Name);
AssertEquals ("my ", ent.FirstChild.Value);
AssertNotNull (ent.FirstChild.NextSibling.FirstChild);
AssertEquals ("value", ent.FirstChild.NextSibling.FirstChild.Value);
}
[Test]
public void ChildNodes ()
{
XmlTextReader xtr = new XmlTextReader ("<!DOCTYPE root [<!ENTITY ent 'ent-value'><!ENTITY el '<foo>hoge</foo><bar/>'>]><root/>",
XmlNodeType.Document, null);
XmlDocument doc = new XmlDocument ();
doc.Load (xtr);
XmlEntityReference ent = doc.CreateEntityReference ("ent");
// ChildNodes are not added yet.
AssertNull (ent.FirstChild);
doc.DocumentElement.AppendChild (ent);
// ChildNodes are added here.
AssertNotNull (ent.FirstChild);
ent = doc.CreateEntityReference ("foo");
AssertNull (ent.FirstChild);
// Entity value is empty when the matching DTD entity
// node does not exist.
doc.DocumentElement.AppendChild (ent);
AssertNotNull (ent.FirstChild);
AssertEquals (String.Empty, ent.FirstChild.Value);
ent = doc.CreateEntityReference ("el");
AssertEquals ("", ent.InnerText);
doc.DocumentElement.AppendChild (ent);
AssertEquals ("<foo>hoge</foo><bar />", ent.InnerXml);
AssertEquals ("hoge", ent.InnerText);
AssertEquals (XmlNodeType.Element, ent.FirstChild.NodeType);
}
}
}
|