Made new dir for XML W3C conformance test suite
[mono.git] / mcs / class / System.XML / Test / System.Xml / XmlEntityReferenceTests.cs
1 //
2 // System.Xml.XmlEntityReference.cs
3 //
4 // Authors:
5 //   Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
6 //   Martin Willemoes Hansen <mwh@sysrq.dk>
7 //
8 // (C) 2002 Atsushi Enomoto
9 // (C) 2003 Martin Willemoes Hansen
10 //
11
12 using System;
13 using System.Xml;
14 using NUnit.Framework;
15
16 namespace MonoTests.System.Xml
17 {
18         [TestFixture]
19         public class XmlEntityReferenceTests : Assertion
20         {
21                 [Test]
22                 public void WriteTo ()
23                 {
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);
30                 }
31
32                 [Test]
33                 public void DescendantsRecursively ()
34                 {
35                         string dtd = "<!DOCTYPE root [<!ELEMENT root (#PCDATA)*>"\r
36                                 + "<!ENTITY ent 'value'>"\r
37                                 + "<!ENTITY ent2 'my &ent; string'>"\r
38                                 + "]>";\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
42                         doc.Load (xtr);\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
48                 }
49
50                 [Test]
51                 public void ChildNodes ()
52                 {
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
56 \r
57                         doc.Load (xtr);\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
64 \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
71 \r
72                         AssertEquals (String.Empty, ent.FirstChild.Value);\r
73
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
80                 }
81         }
82 }