XmlEntityReferenceTests.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. //
  2. // System.Xml.XmlEntityReference.cs
  3. //
  4. // Authors:
  5. // Atsushi Enomoto <[email protected]>
  6. // Martin Willemoes Hansen <[email protected]>
  7. //
  8. // (C) 2002 Atsushi Enomoto
  9. // (C) 2003 Martin Willemoes Hansen
  10. //
  11. using System;
  12. using System.Xml;
  13. using NUnit.Framework;
  14. namespace MonoTests.System.Xml
  15. {
  16. [TestFixture]
  17. public class XmlEntityReferenceTests : Assertion
  18. {
  19. [Test]
  20. public void WriteTo ()
  21. {
  22. XmlDocument doc = new XmlDocument();
  23. doc.LoadXml("<root/>");
  24. XmlEntityReference er = doc.CreateEntityReference("foo");
  25. doc.DocumentElement.AppendChild(er);
  26. AssertEquals ("Name", "foo", er.Name);
  27. AssertEquals ("WriteTo", "<root>&foo;</root>", doc.DocumentElement.OuterXml);
  28. }
  29. [Test]
  30. public void DescendantsRecursively ()
  31. {
  32. string dtd = "<!DOCTYPE root [<!ELEMENT root (#PCDATA)*>"
  33. + "<!ENTITY ent 'value'>"
  34. + "<!ENTITY ent2 'my &ent; string'>"
  35. + "]>";
  36. string xml = dtd + "<root>&ent;</root>";
  37. XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
  38. XmlDocument doc = new XmlDocument ();
  39. doc.Load (xtr);
  40. XmlEntity ent = (XmlEntity) doc.DocumentType.Entities.GetNamedItem ("ent2");
  41. AssertEquals ("ent2", ent.Name);
  42. AssertEquals ("my ", ent.FirstChild.Value);
  43. AssertNotNull (ent.FirstChild.NextSibling.FirstChild);
  44. AssertEquals ("value", ent.FirstChild.NextSibling.FirstChild.Value);
  45. }
  46. [Test]
  47. public void ChildNodes ()
  48. {
  49. XmlTextReader xtr = new XmlTextReader ("<!DOCTYPE root [<!ENTITY ent 'ent-value'><!ENTITY el '<foo>hoge</foo><bar/>'>]><root/>",
  50. XmlNodeType.Document, null);
  51. XmlDocument doc = new XmlDocument ();
  52. doc.Load (xtr);
  53. XmlEntityReference ent = doc.CreateEntityReference ("ent");
  54. // ChildNodes are not added yet.
  55. AssertNull (ent.FirstChild);
  56. doc.DocumentElement.AppendChild (ent);
  57. // ChildNodes are added here.
  58. AssertNotNull (ent.FirstChild);
  59. ent = doc.CreateEntityReference ("foo");
  60. AssertNull (ent.FirstChild);
  61. // Entity value is empty when the matching DTD entity
  62. // node does not exist.
  63. doc.DocumentElement.AppendChild (ent);
  64. AssertNotNull (ent.FirstChild);
  65. AssertEquals (String.Empty, ent.FirstChild.Value);
  66. ent = doc.CreateEntityReference ("el");
  67. AssertEquals ("", ent.InnerText);
  68. doc.DocumentElement.AppendChild (ent);
  69. AssertEquals ("<foo>hoge</foo><bar />", ent.InnerXml);
  70. AssertEquals ("hoge", ent.InnerText);
  71. AssertEquals (XmlNodeType.Element, ent.FirstChild.NodeType);
  72. }
  73. }
  74. }