XmlNodeReaderTests.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. //
  2. // System.Xml.XmlNodeReaderTests
  3. //
  4. // Authors:
  5. // Atsushi Enomoto <[email protected]>
  6. // Martin Willemoes Hansen <[email protected]>
  7. //
  8. // (C) 2003 Atsushi Enomoto
  9. // (C) 2003 Martin Willemoes Hansen
  10. //
  11. //
  12. using System;
  13. using System.IO;
  14. using System.Text;
  15. using System.Xml;
  16. using NUnit.Framework;
  17. namespace MonoTests.System.Xml
  18. {
  19. [TestFixture]
  20. public class XmlNodeReaderTests : Assertion
  21. {
  22. [SetUp]
  23. public void GetReady ()
  24. {
  25. document.LoadXml ("<root attr1='value1'><child /></root>");
  26. }
  27. XmlDocument document = new XmlDocument ();
  28. [Test]
  29. public void InvalidConstruction ()
  30. {
  31. XmlNodeReader nrdr;
  32. try {
  33. nrdr = new XmlNodeReader (null);
  34. Fail ("null reference exception is preferable.");
  35. } catch (NullReferenceException) {
  36. }
  37. nrdr = new XmlNodeReader (new XmlDocument ());
  38. nrdr.Read ();
  39. AssertEquals ("newDoc.ReadState", ReadState.Error, nrdr.ReadState);
  40. AssertEquals ("newDoc.EOF", true, nrdr.EOF);
  41. AssertEquals ("newDoc.NodeType", XmlNodeType.None, nrdr.NodeType);
  42. nrdr = new XmlNodeReader (document.CreateDocumentFragment ());
  43. nrdr.Read ();
  44. AssertEquals ("Fragment.ReadState", ReadState.Error, nrdr.ReadState);
  45. AssertEquals ("Fragment.EOF", true, nrdr.EOF);
  46. AssertEquals ("Fragment.NodeType", XmlNodeType.None, nrdr.NodeType);
  47. }
  48. [Test]
  49. public void ReadFromElement ()
  50. {
  51. XmlNodeReader nrdr = new XmlNodeReader (document.DocumentElement);
  52. nrdr.Read ();
  53. AssertEquals ("<root>.NodeType", XmlNodeType.Element, nrdr.NodeType);
  54. AssertEquals ("<root>.Name", "root", nrdr.Name);
  55. AssertEquals ("<root>.ReadState", ReadState.Interactive, nrdr.ReadState);
  56. AssertEquals ("<root>.Depth", 0, nrdr.Depth);
  57. }
  58. [Test]
  59. public void ReadInnerXmlWrongInit ()
  60. {
  61. document.LoadXml ("<root>test of <b>mixed</b> string.</root>");
  62. XmlNodeReader nrdr = new XmlNodeReader (document);
  63. nrdr.ReadInnerXml ();
  64. AssertEquals ("initial.ReadState", ReadState.Initial, nrdr.ReadState);
  65. AssertEquals ("initial.EOF", false, nrdr.EOF);
  66. AssertEquals ("initial.NodeType", XmlNodeType.None, nrdr.NodeType);
  67. }
  68. [Test]
  69. public void ResolveEntity ()
  70. {
  71. string ent1 = "<!ENTITY ent 'entity string'>";
  72. string ent2 = "<!ENTITY ent2 '<foo/><foo/>'>]>";
  73. string dtd = "<!DOCTYPE root[<!ELEMENT root (#PCDATA|foo)*>" + ent1 + ent2;
  74. string xml = dtd + "<root>&ent;&ent2;</root>";
  75. document.LoadXml (xml);
  76. AssertEquals (xml, document.OuterXml);
  77. XmlNodeReader nr = new XmlNodeReader (document);
  78. nr.Read (); // DTD
  79. nr.Read (); // root
  80. nr.Read (); // &ent;
  81. AssertEquals (XmlNodeType.EntityReference, nr.NodeType);
  82. AssertEquals ("depth#1", 1, nr.Depth);
  83. nr.ResolveEntity ();
  84. // It is still entity reference.
  85. AssertEquals (XmlNodeType.EntityReference, nr.NodeType);
  86. nr.Read ();
  87. AssertEquals (XmlNodeType.Text, nr.NodeType);
  88. AssertEquals ("depth#2", 2, nr.Depth);
  89. AssertEquals ("entity string", nr.Value);
  90. nr.Read ();
  91. AssertEquals (XmlNodeType.EndEntity, nr.NodeType);
  92. AssertEquals ("depth#3", 1, nr.Depth);
  93. AssertEquals ("", nr.Value);
  94. nr.Read (); // &ent2;
  95. AssertEquals (XmlNodeType.EntityReference, nr.NodeType);
  96. AssertEquals ("depth#4", 1, nr.Depth);
  97. nr.ResolveEntity ();
  98. AssertEquals (xml, document.OuterXml);
  99. // It is still entity reference.
  100. AssertEquals (XmlNodeType.EntityReference, nr.NodeType);
  101. // It now became element node.
  102. nr.Read ();
  103. AssertEquals (XmlNodeType.Element, nr.NodeType);
  104. AssertEquals ("depth#5", 2, nr.Depth);
  105. AssertEquals (xml, document.OuterXml);
  106. }
  107. [Test]
  108. public void ResolveEntity2 ()
  109. {
  110. document.RemoveAll ();
  111. string ent1 = "<!ENTITY ent 'entity string'>";
  112. string ent2 = "<!ENTITY ent2 '<foo/><foo/>'>]>";
  113. string dtd = "<!DOCTYPE root[<!ELEMENT root (#PCDATA|foo)*>" + ent1 + ent2;
  114. string xml = dtd + "<root>&ent3;&ent2;</root>";
  115. XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
  116. xtr.Read ();
  117. document.AppendChild (document.ReadNode (xtr));
  118. document.AppendChild (document.ReadNode (xtr));
  119. xtr.Close ();
  120. AssertEquals (xml, document.OuterXml);
  121. XmlNodeReader nr = new XmlNodeReader (document);
  122. nr.Read (); // DTD
  123. nr.Read (); // root
  124. nr.Read (); // &ent3;
  125. AssertEquals (XmlNodeType.EntityReference, nr.NodeType);
  126. // ent3 does not exists in this dtd.
  127. nr.ResolveEntity ();
  128. AssertEquals (XmlNodeType.EntityReference, nr.NodeType);
  129. nr.Read ();
  130. #if false
  131. // Hmm... MS.NET returned as it is a Text node.
  132. AssertEquals (XmlNodeType.Text, nr.NodeType);
  133. AssertEquals (String.Empty, nr.Value);
  134. nr.Read ();
  135. // Really!?
  136. AssertEquals (XmlNodeType.EndEntity, nr.NodeType);
  137. AssertEquals (String.Empty, nr.Value);
  138. #endif
  139. }
  140. [Test]
  141. public void ResolveEntityWithoutDTD ()
  142. {
  143. document.RemoveAll ();
  144. string xml = "<root>&ent;&ent2;</root>";
  145. XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
  146. xtr.Read ();
  147. document.AppendChild (document.ReadNode (xtr));
  148. xtr.Close ();
  149. AssertEquals (xml, document.OuterXml);
  150. XmlNodeReader nr = new XmlNodeReader (document);
  151. nr.Read (); // root
  152. nr.Read (); // &ent;
  153. AssertEquals (XmlNodeType.EntityReference, nr.NodeType);
  154. // ent does not exists in this dtd.
  155. nr.ResolveEntity ();
  156. }
  157. }
  158. }