SelectNodesTests.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. //
  2. // MonoTests.System.Xml.SelectNodesTests
  3. //
  4. // Author:
  5. // Jason Diamond <[email protected]>
  6. //
  7. // (C) 2002 Jason Diamond
  8. //
  9. using System;
  10. using System.Xml;
  11. using NUnit.Framework;
  12. namespace MonoTests.System.Xml
  13. {
  14. public class SelectNodesTests : TestCase
  15. {
  16. public SelectNodesTests () : base ("MonoTests.System.Xml.SelectNodesTests testsuite") {}
  17. public SelectNodesTests (string name) : base (name) {}
  18. public void TestRoot ()
  19. {
  20. XmlDocument document = new XmlDocument ();
  21. document.LoadXml ("<foo />");
  22. XmlNodeList nodes = document.SelectNodes ("/");
  23. AssertEquals (1, nodes.Count);
  24. AssertSame (document, nodes [0]);
  25. }
  26. public void TestDocumentElement ()
  27. {
  28. XmlDocument document = new XmlDocument ();
  29. document.LoadXml ("<foo />");
  30. XmlNodeList nodes = document.SelectNodes ("/foo");
  31. AssertEquals (1, nodes.Count);
  32. AssertSame (document.DocumentElement, nodes [0]);
  33. }
  34. public void TestBadDocumentElement ()
  35. {
  36. XmlDocument document = new XmlDocument ();
  37. document.LoadXml ("<foo />");
  38. XmlNodeList nodes = document.SelectNodes ("/bar");
  39. AssertEquals (0, nodes.Count);
  40. }
  41. public void TestElementWildcard ()
  42. {
  43. XmlDocument document = new XmlDocument ();
  44. document.LoadXml ("<foo><bar /><baz /></foo>");
  45. XmlNodeList nodes = document.SelectNodes ("/foo/*");
  46. AssertEquals (2, nodes.Count);
  47. AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
  48. AssertSame (document.DocumentElement.ChildNodes [1], nodes [1]);
  49. }
  50. public void TestOneChildElement ()
  51. {
  52. XmlDocument document = new XmlDocument ();
  53. document.LoadXml ("<foo><bar /><baz /></foo>");
  54. XmlNodeList nodes = document.SelectNodes ("/foo/bar");
  55. AssertEquals (1, nodes.Count);
  56. AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
  57. }
  58. public void TestOneOtherChildElement ()
  59. {
  60. XmlDocument document = new XmlDocument ();
  61. document.LoadXml ("<foo><bar /><baz /></foo>");
  62. XmlNodeList nodes = document.SelectNodes ("/foo/baz");
  63. AssertEquals (1, nodes.Count);
  64. AssertSame (document.DocumentElement.ChildNodes [1], nodes [0]);
  65. }
  66. public void TestTextNode ()
  67. {
  68. XmlDocument document = new XmlDocument ();
  69. document.LoadXml ("<foo>bar</foo>");
  70. XmlNodeList nodes = document.SelectNodes ("/foo/text()");
  71. AssertEquals (1, nodes.Count);
  72. AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
  73. }
  74. public void TestSplitTextNodes ()
  75. {
  76. XmlDocument document = new XmlDocument ();
  77. document.LoadXml ("<foo>bar<baz />quux</foo>");
  78. XmlNodeList nodes = document.SelectNodes ("/foo/text()");
  79. AssertEquals (2, nodes.Count);
  80. AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
  81. AssertSame (document.DocumentElement.ChildNodes [2], nodes [1]);
  82. }
  83. public void TestAbbreviatedParentAxis ()
  84. {
  85. XmlDocument document = new XmlDocument ();
  86. document.LoadXml ("<foo><bar /></foo>");
  87. XmlNodeList nodes = document.SelectNodes ("/foo/bar/..");
  88. AssertEquals (1, nodes.Count);
  89. AssertSame (document.DocumentElement, nodes [0]);
  90. }
  91. public void TestFullParentAxis ()
  92. {
  93. XmlDocument document = new XmlDocument ();
  94. document.LoadXml ("<foo><bar /></foo>");
  95. XmlNodeList nodes = document.SelectNodes ("/foo/bar/parent::node()");
  96. AssertEquals (1, nodes.Count);
  97. AssertSame (document.DocumentElement, nodes [0]);
  98. }
  99. public void TestAbbreviatedAttributeAxis ()
  100. {
  101. XmlDocument document = new XmlDocument ();
  102. document.LoadXml ("<foo bar='baz' />");
  103. XmlNodeList nodes = document.SelectNodes ("/foo/@bar");
  104. AssertEquals (1, nodes.Count);
  105. AssertSame (document.DocumentElement.Attributes ["bar"], nodes [0]);
  106. }
  107. public void TestFullAttributeAxis ()
  108. {
  109. XmlDocument document = new XmlDocument ();
  110. document.LoadXml ("<foo bar='baz' />");
  111. XmlNodeList nodes = document.SelectNodes ("/foo/attribute::bar");
  112. AssertEquals (1, nodes.Count);
  113. AssertSame (document.DocumentElement.Attributes ["bar"], nodes [0]);
  114. }
  115. public void TestAbbreviatedAttributeWildcard ()
  116. {
  117. XmlDocument document = new XmlDocument ();
  118. document.LoadXml ("<foo bar='baz' quux='quuux' />");
  119. XmlNodeList nodes = document.SelectNodes ("/foo/@*");
  120. AssertEquals (2, nodes.Count);
  121. // are the attributes guanteed to be ordered in the node list?
  122. AssertSame (document.DocumentElement.Attributes ["bar"], nodes [0]);
  123. AssertSame (document.DocumentElement.Attributes ["quux"], nodes [1]);
  124. }
  125. public void TestAttributeParent ()
  126. {
  127. XmlDocument document = new XmlDocument ();
  128. document.LoadXml ("<foo bar='baz' />");
  129. XmlNodeList nodes = document.SelectNodes ("/foo/@bar/..");
  130. AssertEquals (1, nodes.Count);
  131. AssertSame (document.DocumentElement, nodes [0]);
  132. }
  133. public void TestUnionOperator ()
  134. {
  135. XmlDocument document = new XmlDocument ();
  136. document.LoadXml ("<foo><bar /><baz /></foo>");
  137. XmlNodeList nodes = document.SelectNodes ("/foo/bar|/foo/baz");
  138. AssertEquals (2, nodes.Count);
  139. AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
  140. AssertSame (document.DocumentElement.ChildNodes [1], nodes [1]);
  141. }
  142. public void TestNodeWildcard ()
  143. {
  144. XmlDocument document = new XmlDocument ();
  145. document.LoadXml ("<foo><bar />baz<quux /></foo>");
  146. XmlNodeList nodes = document.SelectNodes ("/foo/node()");
  147. AssertEquals (3, nodes.Count);
  148. AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
  149. AssertSame (document.DocumentElement.ChildNodes [1], nodes [1]);
  150. AssertSame (document.DocumentElement.ChildNodes [2], nodes [2]);
  151. }
  152. public void TestPositionalPredicate ()
  153. {
  154. XmlDocument document = new XmlDocument ();
  155. document.LoadXml ("<foo><bar>1</bar><bar>2</bar></foo>");
  156. XmlNodeList nodes = document.SelectNodes ("/foo/bar[1]");
  157. AssertEquals (1, nodes.Count);
  158. AssertSame (document.DocumentElement.ChildNodes [0], nodes [0]);
  159. }
  160. public void TestAllFollowingSiblings ()
  161. {
  162. XmlDocument document = new XmlDocument ();
  163. document.LoadXml ("<foo><bar /><baz /><quux /></foo>");
  164. XmlNodeList nodes = document.SelectNodes ("/foo/bar/following-sibling::*");
  165. AssertEquals (2, nodes.Count);
  166. AssertSame (document.DocumentElement.ChildNodes [1], nodes [0]);
  167. AssertSame (document.DocumentElement.ChildNodes [2], nodes [1]);
  168. }
  169. public void TestFollowingSiblingBaz ()
  170. {
  171. XmlDocument document = new XmlDocument ();
  172. document.LoadXml ("<foo><bar /><baz /><quux /></foo>");
  173. XmlNodeList nodes = document.SelectNodes ("/foo/bar/following-sibling::baz");
  174. AssertEquals (1, nodes.Count);
  175. AssertSame (document.DocumentElement.ChildNodes [1], nodes [0]);
  176. }
  177. public void TestFollowingSiblingQuux ()
  178. {
  179. XmlDocument document = new XmlDocument ();
  180. document.LoadXml ("<foo><bar /><baz /><quux /></foo>");
  181. XmlNodeList nodes = document.SelectNodes ("/foo/bar/following-sibling::quux");
  182. AssertEquals (1, nodes.Count);
  183. AssertSame (document.DocumentElement.ChildNodes [2], nodes [0]);
  184. }
  185. public void TestUnion ()
  186. {
  187. XmlDocument document = new XmlDocument ();
  188. document.LoadXml ("<foo />");
  189. XmlNodeList nodes = document.SelectNodes ("(/foo) | (/foo)");
  190. AssertEquals (1, nodes.Count); // bug #27548
  191. AssertSame (document.DocumentElement, nodes [0]);
  192. }
  193. }
  194. }