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 : Assertion
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 AssertEquals ("Name", "foo", er.Name);
29 AssertEquals ("WriteTo", "<root>&foo;</root>", doc.DocumentElement.OuterXml);
33 public void DescendantsRecursively ()
35 string dtd = "<!DOCTYPE root [<!ELEMENT root (#PCDATA)*>"
\r
36 + "<!ENTITY ent 'value'>"
\r
37 + "<!ENTITY ent2 'my &ent; string'>"
\r
39 string xml = dtd + "<root>&ent;</root>";
\r
40 XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
\r
41 XmlDocument doc = new XmlDocument ();
\r
43 XmlEntity ent = (XmlEntity) doc.DocumentType.Entities.GetNamedItem ("ent2");
\r
44 AssertEquals ("ent2", ent.Name);
\r
45 AssertEquals ("my ", ent.FirstChild.Value);
\r
46 AssertNotNull (ent.FirstChild.NextSibling.FirstChild);
\r
47 AssertEquals ("value", ent.FirstChild.NextSibling.FirstChild.Value);
\r
51 public void ChildNodes ()
53 XmlTextReader xtr = new XmlTextReader ("<!DOCTYPE root [<!ENTITY ent 'ent-value'><!ENTITY el '<foo>hoge</foo><bar/>'>]><root/>",
\r
54 XmlNodeType.Document, null);
\r
55 XmlDocument doc = new XmlDocument ();
\r
58 XmlEntityReference ent = doc.CreateEntityReference ("ent");
\r
59 // ChildNodes are not added yet.
\r
60 AssertNull (ent.FirstChild);
\r
61 doc.DocumentElement.AppendChild (ent);
\r
62 // ChildNodes are added here.
\r
63 AssertNotNull (ent.FirstChild);
\r
65 ent = doc.CreateEntityReference ("foo");
\r
66 AssertNull (ent.FirstChild);
\r
67 // Entity value is empty when the matching DTD entity
\r
68 // node does not exist.
\r
69 doc.DocumentElement.AppendChild (ent);
\r
70 AssertNotNull (ent.FirstChild);
\r
72 AssertEquals (String.Empty, ent.FirstChild.Value);
\r
74 ent = doc.CreateEntityReference ("el");
75 AssertEquals ("", ent.InnerText);
\r
76 doc.DocumentElement.AppendChild (ent);
\r
77 AssertEquals ("<foo>hoge</foo><bar />", ent.InnerXml);
\r
78 AssertEquals ("hoge", ent.InnerText);
\r
79 AssertEquals (XmlNodeType.Element, ent.FirstChild.NodeType);
\r