XPathNavigatorTests.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  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.Xml;
  13. using System.Xml.XPath;
  14. using NUnit.Framework;
  15. namespace MonoTests.System.Xml
  16. {
  17. [TestFixture]
  18. public class XPathNavigatorTests : Assertion
  19. {
  20. XmlDocument document;
  21. XPathNavigator navigator;
  22. [SetUp]
  23. public void GetReady ()
  24. {
  25. document = new XmlDocument ();
  26. }
  27. [Test]
  28. public void CreateNavigator ()
  29. {
  30. document.LoadXml ("<foo />");
  31. navigator = document.CreateNavigator ();
  32. AssertNotNull (navigator);
  33. }
  34. [Test]
  35. public void PropertiesOnDocument ()
  36. {
  37. document.LoadXml ("<foo:bar xmlns:foo='#foo' />");
  38. navigator = document.CreateNavigator ();
  39. AssertEquals (XPathNodeType.Root, navigator.NodeType);
  40. AssertEquals (String.Empty, navigator.Name);
  41. AssertEquals (String.Empty, navigator.LocalName);
  42. AssertEquals (String.Empty, navigator.NamespaceURI);
  43. AssertEquals (String.Empty, navigator.Prefix);
  44. Assert (!navigator.HasAttributes);
  45. Assert (navigator.HasChildren);
  46. Assert (!navigator.IsEmptyElement);
  47. }
  48. [Test]
  49. public void PropertiesOnElement ()
  50. {
  51. document.LoadXml ("<foo:bar xmlns:foo='#foo' />");
  52. navigator = document.DocumentElement.CreateNavigator ();
  53. AssertEquals (XPathNodeType.Element, navigator.NodeType);
  54. AssertEquals ("foo:bar", navigator.Name);
  55. AssertEquals ("bar", navigator.LocalName);
  56. AssertEquals ("#foo", navigator.NamespaceURI);
  57. AssertEquals ("foo", navigator.Prefix);
  58. Assert (!navigator.HasAttributes);
  59. Assert (!navigator.HasChildren);
  60. Assert (navigator.IsEmptyElement);
  61. }
  62. [Test]
  63. public void PropertiesOnAttribute ()
  64. {
  65. document.LoadXml ("<foo bar:baz='quux' xmlns:bar='#bar' />");
  66. navigator = document.DocumentElement.GetAttributeNode("baz", "#bar").CreateNavigator ();
  67. AssertEquals (XPathNodeType.Attribute, navigator.NodeType);
  68. AssertEquals ("bar:baz", navigator.Name);
  69. AssertEquals ("baz", navigator.LocalName);
  70. AssertEquals ("#bar", navigator.NamespaceURI);
  71. AssertEquals ("bar", navigator.Prefix);
  72. Assert (!navigator.HasAttributes);
  73. Assert (!navigator.HasChildren);
  74. Assert (!navigator.IsEmptyElement);
  75. }
  76. [Test]
  77. public void Navigation ()
  78. {
  79. document.LoadXml ("<foo><bar /><baz /></foo>");
  80. navigator = document.DocumentElement.CreateNavigator ();
  81. AssertEquals ("foo", navigator.Name);
  82. Assert (navigator.MoveToFirstChild ());
  83. AssertEquals ("bar", navigator.Name);
  84. Assert (navigator.MoveToNext ());
  85. AssertEquals ("baz", navigator.Name);
  86. Assert (!navigator.MoveToNext ());
  87. AssertEquals ("baz", navigator.Name);
  88. Assert (navigator.MoveToPrevious ());
  89. AssertEquals ("bar", navigator.Name);
  90. Assert (!navigator.MoveToPrevious ());
  91. Assert (navigator.MoveToParent ());
  92. AssertEquals ("foo", navigator.Name);
  93. navigator.MoveToRoot ();
  94. AssertEquals (XPathNodeType.Root, navigator.NodeType);
  95. Assert (!navigator.MoveToParent ());
  96. AssertEquals (XPathNodeType.Root, navigator.NodeType);
  97. Assert (navigator.MoveToFirstChild ());
  98. AssertEquals ("foo", navigator.Name);
  99. Assert (navigator.MoveToFirst ());
  100. AssertEquals ("foo", navigator.Name);
  101. Assert (navigator.MoveToFirstChild ());
  102. AssertEquals ("bar", navigator.Name);
  103. Assert (navigator.MoveToNext ());
  104. AssertEquals ("baz", navigator.Name);
  105. Assert (navigator.MoveToFirst ());
  106. AssertEquals ("bar", navigator.Name);
  107. }
  108. [Test]
  109. public void MoveToAndIsSamePosition ()
  110. {
  111. XmlDocument document1 = new XmlDocument ();
  112. document1.LoadXml ("<foo><bar /></foo>");
  113. XPathNavigator navigator1a = document1.DocumentElement.CreateNavigator ();
  114. XPathNavigator navigator1b = document1.DocumentElement.CreateNavigator ();
  115. XmlDocument document2 = new XmlDocument ();
  116. document2.LoadXml ("<foo><bar /></foo>");
  117. XPathNavigator navigator2 = document2.DocumentElement.CreateNavigator ();
  118. AssertEquals ("foo", navigator1a.Name);
  119. Assert (navigator1a.MoveToFirstChild ());
  120. AssertEquals ("bar", navigator1a.Name);
  121. Assert (!navigator1b.IsSamePosition (navigator1a));
  122. AssertEquals ("foo", navigator1b.Name);
  123. Assert (navigator1b.MoveTo (navigator1a));
  124. Assert (navigator1b.IsSamePosition (navigator1a));
  125. AssertEquals ("bar", navigator1b.Name);
  126. Assert (!navigator2.IsSamePosition (navigator1a));
  127. AssertEquals ("foo", navigator2.Name);
  128. Assert (!navigator2.MoveTo (navigator1a));
  129. AssertEquals ("foo", navigator2.Name);
  130. }
  131. [Test]
  132. public void AttributeNavigation ()
  133. {
  134. document.LoadXml ("<foo bar='baz' quux='quuux' />");
  135. navigator = document.DocumentElement.CreateNavigator ();
  136. AssertEquals (XPathNodeType.Element, navigator.NodeType);
  137. AssertEquals ("foo", navigator.Name);
  138. Assert (navigator.MoveToFirstAttribute ());
  139. AssertEquals (XPathNodeType.Attribute, navigator.NodeType);
  140. AssertEquals ("bar", navigator.Name);
  141. AssertEquals ("baz", navigator.Value);
  142. Assert (navigator.MoveToNextAttribute ());
  143. AssertEquals (XPathNodeType.Attribute, navigator.NodeType);
  144. AssertEquals ("quux", navigator.Name);
  145. AssertEquals ("quuux", navigator.Value);
  146. }
  147. [Test]
  148. public void ElementAndRootValues()
  149. {
  150. document.LoadXml ("<foo><bar>baz</bar><quux>quuux</quux></foo>");
  151. navigator = document.DocumentElement.CreateNavigator ();
  152. AssertEquals (XPathNodeType.Element, navigator.NodeType);
  153. AssertEquals ("foo", navigator.Name);
  154. //AssertEquals ("bazquuux", navigator.Value);
  155. navigator.MoveToRoot ();
  156. //AssertEquals ("bazquuux", navigator.Value);
  157. }
  158. [Test]
  159. public void DocumentWithXmlDeclaration ()
  160. {
  161. document.LoadXml ("<?xml version=\"1.0\" standalone=\"yes\"?><Root><foo>bar</foo></Root>");
  162. navigator = document.CreateNavigator ();
  163. navigator.MoveToRoot ();
  164. navigator.MoveToFirstChild ();
  165. AssertEquals (XPathNodeType.Element, navigator.NodeType);
  166. AssertEquals ("Root", navigator.Name);
  167. }
  168. [Test]
  169. public void DocumentWithProcessingInstruction ()
  170. {
  171. document.LoadXml ("<?xml-stylesheet href='foo.xsl' type='text/xsl' ?><foo />");
  172. navigator = document.CreateNavigator ();
  173. Assert (navigator.MoveToFirstChild ());
  174. AssertEquals (XPathNodeType.ProcessingInstruction, navigator.NodeType);
  175. AssertEquals ("xml-stylesheet", navigator.Name);
  176. XPathNodeIterator iter = navigator.SelectChildren (XPathNodeType.Element);
  177. AssertEquals (0, iter.Count);
  178. }
  179. [Test]
  180. public void SelectFromOrphan ()
  181. {
  182. // SelectSingleNode () from node without parent.
  183. XmlDocument doc = new XmlDocument ();
  184. doc.LoadXml ("<foo><include id='original' /></foo>");
  185. XmlNode node = doc.CreateElement ("child");
  186. node.InnerXml = "<include id='new' />";
  187. XmlNode new_include = node.SelectSingleNode ("//include");
  188. AssertEquals ("<include id=\"new\" />", new_include.OuterXml);
  189. // In this case 'node2' has parent 'node'
  190. doc = new XmlDocument ();
  191. doc.LoadXml ("<foo><include id='original' /></foo>");
  192. node = doc.CreateElement ("child");
  193. XmlNode node2 = doc.CreateElement ("grandchild");
  194. node.AppendChild (node2);
  195. node2.InnerXml = "<include id='new' />";
  196. new_include = node2.SelectSingleNode ("/");
  197. AssertEquals ("<child><grandchild><include id=\"new\" /></grandchild></child>",
  198. new_include.OuterXml);
  199. }
  200. }
  201. }