2 // System.Xml.XmlNodeReaderTests
\r
5 // Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
\r
6 // Martin Willemoes Hansen <mwh@sysrq.dk>
\r
8 // (C) 2003 Atsushi Enomoto
\r
9 // (C) 2003 Martin Willemoes Hansen
\r
18 using NUnit.Framework;
\r
20 namespace MonoTests.System.Xml
\r
23 public class XmlNodeReaderTests : Assertion
\r
26 public void GetReady ()
\r
28 document.LoadXml ("<root attr1='value1'><child /></root>");
\r
31 XmlDocument document = new XmlDocument ();
\r
34 public void InvalidConstruction ()
\r
38 nrdr = new XmlNodeReader (null);
\r
39 Fail ("null reference exception is preferable.");
\r
40 } catch (NullReferenceException) {
\r
42 nrdr = new XmlNodeReader (new XmlDocument ());
\r
44 AssertEquals ("newDoc.ReadState", ReadState.Error, nrdr.ReadState);
\r
45 AssertEquals ("newDoc.EOF", true, nrdr.EOF);
\r
46 AssertEquals ("newDoc.NodeType", XmlNodeType.None, nrdr.NodeType);
\r
47 nrdr = new XmlNodeReader (document.CreateDocumentFragment ());
\r
49 AssertEquals ("Fragment.ReadState", ReadState.Error, nrdr.ReadState);
\r
50 AssertEquals ("Fragment.EOF", true, nrdr.EOF);
\r
51 AssertEquals ("Fragment.NodeType", XmlNodeType.None, nrdr.NodeType);
\r
55 public void ReadFromElement ()
\r
57 XmlNodeReader nrdr = new XmlNodeReader (document.DocumentElement);
\r
59 AssertEquals ("<root>.NodeType", XmlNodeType.Element, nrdr.NodeType);
\r
60 AssertEquals ("<root>.Name", "root", nrdr.Name);
\r
61 AssertEquals ("<root>.ReadState", ReadState.Interactive, nrdr.ReadState);
\r
62 AssertEquals ("<root>.Depth", 0, nrdr.Depth);
\r
67 public void ReadInnerXmlWrongInit ()
\r
69 document.LoadXml ("<root>test of <b>mixed</b> string.</root>");
\r
70 XmlNodeReader nrdr = new XmlNodeReader (document);
\r
71 nrdr.ReadInnerXml ();
\r
72 AssertEquals ("initial.ReadState", ReadState.Initial, nrdr.ReadState);
\r
73 AssertEquals ("initial.EOF", false, nrdr.EOF);
\r
74 AssertEquals ("initial.NodeType", XmlNodeType.None, nrdr.NodeType);
\r
78 public void ResolveEntity ()
\r
80 string ent1 = "<!ENTITY ent 'entity string'>";
\r
81 string ent2 = "<!ENTITY ent2 '<foo/><foo/>'>]>";
\r
82 string dtd = "<!DOCTYPE root[<!ELEMENT root (#PCDATA|foo)*>" + ent1 + ent2;
\r
83 string xml = dtd + "<root>&ent;&ent2;</root>";
\r
84 document.LoadXml (xml);
\r
85 AssertEquals (xml, document.OuterXml);
\r
86 XmlNodeReader nr = new XmlNodeReader (document);
\r
89 nr.Read (); // &ent;
\r
90 AssertEquals (XmlNodeType.EntityReference, nr.NodeType);
\r
91 AssertEquals ("depth#1", 1, nr.Depth);
\r
92 nr.ResolveEntity ();
\r
93 // It is still entity reference.
\r
94 AssertEquals (XmlNodeType.EntityReference, nr.NodeType);
\r
96 AssertEquals (XmlNodeType.Text, nr.NodeType);
\r
97 AssertEquals ("depth#2", 2, nr.Depth);
\r
98 AssertEquals ("entity string", nr.Value);
\r
100 AssertEquals (XmlNodeType.EndEntity, nr.NodeType);
\r
101 AssertEquals ("depth#3", 1, nr.Depth);
\r
102 AssertEquals ("", nr.Value);
\r
104 nr.Read (); // &ent2;
\r
105 AssertEquals (XmlNodeType.EntityReference, nr.NodeType);
\r
106 AssertEquals ("depth#4", 1, nr.Depth);
\r
107 nr.ResolveEntity ();
\r
108 AssertEquals (xml, document.OuterXml);
\r
109 // It is still entity reference.
\r
110 AssertEquals (XmlNodeType.EntityReference, nr.NodeType);
\r
111 // It now became element node.
\r
113 AssertEquals (XmlNodeType.Element, nr.NodeType);
\r
114 AssertEquals ("depth#5", 2, nr.Depth);
\r
116 AssertEquals (xml, document.OuterXml);
\r
120 public void ResolveEntity2 ()
\r
122 document.RemoveAll ();
\r
123 string ent1 = "<!ENTITY ent 'entity string'>";
\r
124 string ent2 = "<!ENTITY ent2 '<foo/><foo/>'>]>";
\r
125 string dtd = "<!DOCTYPE root[<!ELEMENT root (#PCDATA|foo)*>" + ent1 + ent2;
\r
126 string xml = dtd + "<root>&ent3;&ent2;</root>";
\r
127 XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
\r
129 document.AppendChild (document.ReadNode (xtr));
\r
130 document.AppendChild (document.ReadNode (xtr));
\r
132 AssertEquals (xml, document.OuterXml);
\r
133 XmlNodeReader nr = new XmlNodeReader (document);
\r
135 nr.Read (); // root
\r
136 nr.Read (); // &ent3;
\r
137 AssertEquals (XmlNodeType.EntityReference, nr.NodeType);
\r
138 // ent3 does not exists in this dtd.
\r
139 nr.ResolveEntity ();
\r
140 AssertEquals (XmlNodeType.EntityReference, nr.NodeType);
\r
143 // Hmm... MS.NET returned as it is a Text node.
\r
144 AssertEquals (XmlNodeType.Text, nr.NodeType);
\r
145 AssertEquals (String.Empty, nr.Value);
\r
148 AssertEquals (XmlNodeType.EndEntity, nr.NodeType);
\r
149 AssertEquals (String.Empty, nr.Value);
\r
154 public void ResolveEntityWithoutDTD ()
\r
156 document.RemoveAll ();
\r
157 string xml = "<root>&ent;&ent2;</root>";
\r
158 XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
\r
160 document.AppendChild (document.ReadNode (xtr));
\r
162 AssertEquals (xml, document.OuterXml);
\r
163 XmlNodeReader nr = new XmlNodeReader (document);
\r
164 nr.Read (); // root
\r
165 nr.Read (); // &ent;
\r
166 AssertEquals (XmlNodeType.EntityReference, nr.NodeType);
\r
167 // ent does not exists in this dtd.
\r
168 nr.ResolveEntity ();
\r