2 // System.Xml.XmlEntityReference.cs
5 // Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
6 // Martin Willemoes Hansen <mwh@sysrq.dk>
8 // (C) 2002 Atsushi Enomoto
9 // (C) 2003 Martin Willemoes Hansen
14 using NUnit.Framework;
16 namespace MonoTests.System.Xml
19 public class XmlEntityReferenceTests
22 public void WriteTo ()
24 XmlDocument doc = new XmlDocument();
25 doc.LoadXml("<root/>");
26 XmlEntityReference er = doc.CreateEntityReference("foo");
27 doc.DocumentElement.AppendChild(er);
28 Assert.AreEqual ("foo", er.Name, "Name");
29 Assert.AreEqual ("<root>&foo;</root>", doc.DocumentElement.OuterXml, "WriteTo");
33 public void DescendantsRecursively ()
35 string dtd = "<!DOCTYPE root [<!ELEMENT root (#PCDATA)*>"
36 + "<!ENTITY ent 'value'>"
37 + "<!ENTITY ent2 'my &ent; string'>"
39 string xml = dtd + "<root>&ent;</root>";
40 XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
41 XmlDocument doc = new XmlDocument ();
43 XmlEntity ent = (XmlEntity) doc.DocumentType.Entities.GetNamedItem ("ent2");
44 Assert.AreEqual ("ent2", ent.Name);
45 Assert.AreEqual ("my ", ent.FirstChild.Value);
46 Assert.IsNotNull (ent.FirstChild.NextSibling.FirstChild);
47 Assert.AreEqual ("value", ent.FirstChild.NextSibling.FirstChild.Value);
51 public void ChildNodes ()
53 XmlTextReader xtr = new XmlTextReader ("<!DOCTYPE root [<!ENTITY ent 'ent-value'><!ENTITY el '<foo>hoge</foo><bar/>'>]><root/>",
54 XmlNodeType.Document, null);
55 XmlDocument doc = new XmlDocument ();
58 XmlEntityReference ent = doc.CreateEntityReference ("ent");
59 // ChildNodes are not added yet.
60 Assert.IsNull (ent.FirstChild);
61 doc.DocumentElement.AppendChild (ent);
62 // ChildNodes are added here.
63 Assert.IsNotNull (ent.FirstChild);
65 ent = doc.CreateEntityReference ("foo");
66 Assert.IsNull (ent.FirstChild);
67 // Entity value is empty when the matching DTD entity
68 // node does not exist.
69 doc.DocumentElement.AppendChild (ent);
70 Assert.IsNotNull (ent.FirstChild);
72 Assert.AreEqual (String.Empty, ent.FirstChild.Value);
74 ent = doc.CreateEntityReference ("el");
75 Assert.AreEqual ("", ent.InnerText);
76 doc.DocumentElement.AppendChild (ent);
77 Assert.AreEqual ("<foo>hoge</foo><bar />", ent.InnerXml);
78 Assert.AreEqual ("hoge", ent.InnerText);
79 Assert.AreEqual (XmlNodeType.Element, ent.FirstChild.NodeType);