2
0

XPathNavigatorTests.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. //
  2. // MonoTests.System.Xml.XPathNavigatorTests
  3. //
  4. // Authors:
  5. // Jason Diamond <[email protected]>
  6. // Martin Willemoes Hansen <[email protected]>
  7. //
  8. // (C) 2002 Jason Diamond
  9. // (C) 2003 Martin Willemoes Hansen
  10. //
  11. using System;
  12. using System.IO;
  13. using System.Xml;
  14. using System.Xml.XPath;
  15. using NUnit.Framework;
  16. namespace MonoTests.System.Xml
  17. {
  18. [TestFixture]
  19. public class XPathNavigatorTests : Assertion
  20. {
  21. XmlDocument document;
  22. XPathNavigator navigator;
  23. [SetUp]
  24. public void GetReady ()
  25. {
  26. document = new XmlDocument ();
  27. }
  28. [Test]
  29. public void CreateNavigator ()
  30. {
  31. document.LoadXml ("<foo />");
  32. navigator = document.CreateNavigator ();
  33. AssertNotNull (navigator);
  34. }
  35. [Test]
  36. public void PropertiesOnDocument ()
  37. {
  38. document.LoadXml ("<foo:bar xmlns:foo='#foo' />");
  39. navigator = document.CreateNavigator ();
  40. AssertEquals (XPathNodeType.Root, navigator.NodeType);
  41. AssertEquals (String.Empty, navigator.Name);
  42. AssertEquals (String.Empty, navigator.LocalName);
  43. AssertEquals (String.Empty, navigator.NamespaceURI);
  44. AssertEquals (String.Empty, navigator.Prefix);
  45. Assert (!navigator.HasAttributes);
  46. Assert (navigator.HasChildren);
  47. Assert (!navigator.IsEmptyElement);
  48. }
  49. [Test]
  50. public void PropertiesOnElement ()
  51. {
  52. document.LoadXml ("<foo:bar xmlns:foo='#foo' />");
  53. navigator = document.DocumentElement.CreateNavigator ();
  54. AssertEquals (XPathNodeType.Element, navigator.NodeType);
  55. AssertEquals ("foo:bar", navigator.Name);
  56. AssertEquals ("bar", navigator.LocalName);
  57. AssertEquals ("#foo", navigator.NamespaceURI);
  58. AssertEquals ("foo", navigator.Prefix);
  59. Assert (!navigator.HasAttributes);
  60. Assert (!navigator.HasChildren);
  61. Assert (navigator.IsEmptyElement);
  62. }
  63. [Test]
  64. public void PropertiesOnAttribute ()
  65. {
  66. document.LoadXml ("<foo bar:baz='quux' xmlns:bar='#bar' />");
  67. navigator = document.DocumentElement.GetAttributeNode("baz", "#bar").CreateNavigator ();
  68. AssertEquals (XPathNodeType.Attribute, navigator.NodeType);
  69. AssertEquals ("bar:baz", navigator.Name);
  70. AssertEquals ("baz", navigator.LocalName);
  71. AssertEquals ("#bar", navigator.NamespaceURI);
  72. AssertEquals ("bar", navigator.Prefix);
  73. Assert (!navigator.HasAttributes);
  74. Assert (!navigator.HasChildren);
  75. Assert (!navigator.IsEmptyElement);
  76. }
  77. [Test]
  78. public void PropertiesOnNamespace ()
  79. {
  80. document.LoadXml ("<root xmlns='urn:foo' />");
  81. navigator = document.DocumentElement.Attributes [0].CreateNavigator ();
  82. AssertEquals (XPathNodeType.Namespace, navigator.NodeType);
  83. }
  84. [Test]
  85. public void Navigation ()
  86. {
  87. document.LoadXml ("<foo><bar /><baz /></foo>");
  88. navigator = document.DocumentElement.CreateNavigator ();
  89. AssertEquals ("foo", navigator.Name);
  90. Assert (navigator.MoveToFirstChild ());
  91. AssertEquals ("bar", navigator.Name);
  92. Assert (navigator.MoveToNext ());
  93. AssertEquals ("baz", navigator.Name);
  94. Assert (!navigator.MoveToNext ());
  95. AssertEquals ("baz", navigator.Name);
  96. Assert (navigator.MoveToPrevious ());
  97. AssertEquals ("bar", navigator.Name);
  98. Assert (!navigator.MoveToPrevious ());
  99. Assert (navigator.MoveToParent ());
  100. AssertEquals ("foo", navigator.Name);
  101. navigator.MoveToRoot ();
  102. AssertEquals (XPathNodeType.Root, navigator.NodeType);
  103. Assert (!navigator.MoveToParent ());
  104. AssertEquals (XPathNodeType.Root, navigator.NodeType);
  105. Assert (navigator.MoveToFirstChild ());
  106. AssertEquals ("foo", navigator.Name);
  107. Assert (navigator.MoveToFirst ());
  108. AssertEquals ("foo", navigator.Name);
  109. Assert (navigator.MoveToFirstChild ());
  110. AssertEquals ("bar", navigator.Name);
  111. Assert (navigator.MoveToNext ());
  112. AssertEquals ("baz", navigator.Name);
  113. Assert (navigator.MoveToFirst ());
  114. AssertEquals ("bar", navigator.Name);
  115. }
  116. [Test]
  117. public void MoveToAndIsSamePosition ()
  118. {
  119. XmlDocument document1 = new XmlDocument ();
  120. document1.LoadXml ("<foo><bar /></foo>");
  121. XPathNavigator navigator1a = document1.DocumentElement.CreateNavigator ();
  122. XPathNavigator navigator1b = document1.DocumentElement.CreateNavigator ();
  123. XmlDocument document2 = new XmlDocument ();
  124. document2.LoadXml ("<foo><bar /></foo>");
  125. XPathNavigator navigator2 = document2.DocumentElement.CreateNavigator ();
  126. AssertEquals ("foo", navigator1a.Name);
  127. Assert (navigator1a.MoveToFirstChild ());
  128. AssertEquals ("bar", navigator1a.Name);
  129. Assert (!navigator1b.IsSamePosition (navigator1a));
  130. AssertEquals ("foo", navigator1b.Name);
  131. Assert (navigator1b.MoveTo (navigator1a));
  132. Assert (navigator1b.IsSamePosition (navigator1a));
  133. AssertEquals ("bar", navigator1b.Name);
  134. Assert (!navigator2.IsSamePosition (navigator1a));
  135. AssertEquals ("foo", navigator2.Name);
  136. Assert (!navigator2.MoveTo (navigator1a));
  137. AssertEquals ("foo", navigator2.Name);
  138. }
  139. [Test]
  140. public void AttributeNavigation ()
  141. {
  142. document.LoadXml ("<foo bar='baz' quux='quuux' />");
  143. navigator = document.DocumentElement.CreateNavigator ();
  144. AssertEquals (XPathNodeType.Element, navigator.NodeType);
  145. AssertEquals ("foo", navigator.Name);
  146. Assert (navigator.MoveToFirstAttribute ());
  147. AssertEquals (XPathNodeType.Attribute, navigator.NodeType);
  148. AssertEquals ("bar", navigator.Name);
  149. AssertEquals ("baz", navigator.Value);
  150. Assert (navigator.MoveToNextAttribute ());
  151. AssertEquals (XPathNodeType.Attribute, navigator.NodeType);
  152. AssertEquals ("quux", navigator.Name);
  153. AssertEquals ("quuux", navigator.Value);
  154. }
  155. [Test]
  156. public void ElementAndRootValues()
  157. {
  158. document.LoadXml ("<foo><bar>baz</bar><quux>quuux</quux></foo>");
  159. navigator = document.DocumentElement.CreateNavigator ();
  160. AssertEquals (XPathNodeType.Element, navigator.NodeType);
  161. AssertEquals ("foo", navigator.Name);
  162. //AssertEquals ("bazquuux", navigator.Value);
  163. navigator.MoveToRoot ();
  164. //AssertEquals ("bazquuux", navigator.Value);
  165. }
  166. [Test]
  167. public void DocumentWithXmlDeclaration ()
  168. {
  169. document.LoadXml ("<?xml version=\"1.0\" standalone=\"yes\"?><Root><foo>bar</foo></Root>");
  170. navigator = document.CreateNavigator ();
  171. navigator.MoveToRoot ();
  172. navigator.MoveToFirstChild ();
  173. AssertEquals (XPathNodeType.Element, navigator.NodeType);
  174. AssertEquals ("Root", navigator.Name);
  175. }
  176. [Test]
  177. public void DocumentWithProcessingInstruction ()
  178. {
  179. document.LoadXml ("<?xml-stylesheet href='foo.xsl' type='text/xsl' ?><foo />");
  180. navigator = document.CreateNavigator ();
  181. Assert (navigator.MoveToFirstChild ());
  182. AssertEquals (XPathNodeType.ProcessingInstruction, navigator.NodeType);
  183. AssertEquals ("xml-stylesheet", navigator.Name);
  184. XPathNodeIterator iter = navigator.SelectChildren (XPathNodeType.Element);
  185. AssertEquals (0, iter.Count);
  186. }
  187. [Test]
  188. public void SelectFromOrphan ()
  189. {
  190. // SelectSingleNode () from node without parent.
  191. XmlDocument doc = new XmlDocument ();
  192. doc.LoadXml ("<foo><include id='original' /></foo>");
  193. XmlNode node = doc.CreateElement ("child");
  194. node.InnerXml = "<include id='new' />";
  195. XmlNode new_include = node.SelectSingleNode ("//include");
  196. AssertEquals ("<include id=\"new\" />", new_include.OuterXml);
  197. // In this case 'node2' has parent 'node'
  198. doc = new XmlDocument ();
  199. doc.LoadXml ("<foo><include id='original' /></foo>");
  200. node = doc.CreateElement ("child");
  201. XmlNode node2 = doc.CreateElement ("grandchild");
  202. node.AppendChild (node2);
  203. node2.InnerXml = "<include id='new' />";
  204. new_include = node2.SelectSingleNode ("/");
  205. AssertEquals ("<child><grandchild><include id=\"new\" /></grandchild></child>",
  206. new_include.OuterXml);
  207. }
  208. [Test]
  209. public void XPathDocumentMoveToId ()
  210. {
  211. string dtd = "<!DOCTYPE root [<!ELEMENT root EMPTY><!ATTLIST root id ID #REQUIRED>]>";
  212. string xml = dtd + "<root id='aaa'/>";
  213. StringReader sr = new StringReader (xml);
  214. XPathNavigator nav = new XPathDocument (sr).CreateNavigator ();
  215. Assert ("ctor() from TextReader", nav.MoveToId ("aaa"));
  216. XmlValidatingReader xvr = new XmlValidatingReader (xml, XmlNodeType.Document, null);
  217. nav = new XPathDocument (xvr).CreateNavigator ();
  218. Assert ("ctor() from XmlValidatingReader", nav.MoveToId ("aaa"));
  219. // When it is XmlTextReader, XPathDocument fails.
  220. XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
  221. nav = new XPathDocument (xtr).CreateNavigator ();
  222. Assert ("ctor() from XmlTextReader", !nav.MoveToId ("aaa"));
  223. xtr.Close ();
  224. }
  225. }
  226. }