XPathNavigatorEvaluateTests.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. //
  2. // MonoTests.System.Xml.XPathNavigatorEvaluateTests
  3. //
  4. // Authors:
  5. // Kral Ferch <[email protected]>
  6. // Martin Willemoes Hansen <[email protected]>
  7. //
  8. // (C) 2002 Kral Ferch
  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 XPathNavigatorEvaluateTests : Assertion
  19. {
  20. XmlDocument document;
  21. XPathNavigator navigator;
  22. XmlDocument document2;
  23. XPathNavigator navigator2;
  24. XmlDocument document3;
  25. XPathNavigator navigator3;
  26. XPathExpression expression;
  27. XPathNodeIterator iterator;
  28. [SetUp]
  29. public void GetReady ()
  30. {
  31. document = new XmlDocument ();
  32. document.LoadXml ("<foo><bar/><baz/><qux/><squonk/></foo>");
  33. navigator = document.CreateNavigator ();
  34. document2 = new XmlDocument ();
  35. document2.LoadXml ("<foo><bar baz='1'/><bar baz='2'/><bar baz='3'/></foo>");
  36. navigator2 = document2.CreateNavigator ();
  37. document3 = new XmlDocument ();
  38. document3.LoadXml ("<foo><bar/><baz/><qux/></foo>");
  39. navigator3 = document3.CreateNavigator ();
  40. }
  41. // Testing Core Funcetion Library functions defined at: http://www.w3.org/TR/xpath#corelib
  42. [Test]
  43. public void CoreFunctionNodeSetLast ()
  44. {
  45. expression = navigator.Compile("last()");
  46. iterator = navigator.Select("/foo");
  47. AssertEquals ("0", navigator.Evaluate ("last()").ToString());
  48. AssertEquals ("0", navigator.Evaluate (expression, null).ToString ());
  49. AssertEquals ("1", navigator.Evaluate (expression, iterator).ToString ());
  50. iterator = navigator.Select("/foo/*");
  51. AssertEquals ("4", navigator.Evaluate (expression, iterator).ToString ());
  52. AssertEquals("3", navigator2.Evaluate ("string(//bar[last()]/@baz)"));
  53. }
  54. [Test]
  55. public void CoreFunctionNodeSetPosition ()
  56. {
  57. expression = navigator.Compile("position()");
  58. iterator = navigator.Select("/foo");
  59. AssertEquals ("0", navigator.Evaluate ("position()").ToString ());
  60. AssertEquals ("0", navigator.Evaluate (expression, null).ToString ());
  61. AssertEquals ("0", navigator.Evaluate (expression, iterator).ToString ());
  62. iterator = navigator.Select("/foo/*");
  63. AssertEquals ("0", navigator.Evaluate (expression, iterator).ToString ());
  64. iterator.MoveNext();
  65. AssertEquals ("1", navigator.Evaluate (expression, iterator).ToString ());
  66. iterator.MoveNext ();
  67. AssertEquals ("2", navigator.Evaluate (expression, iterator).ToString ());
  68. iterator.MoveNext ();
  69. AssertEquals ("3", navigator.Evaluate (expression, iterator).ToString ());
  70. }
  71. [Test]
  72. public void CoreFunctionNodeSetCount ()
  73. {
  74. AssertEquals ("5", navigator.Evaluate ("count(//*)").ToString ());
  75. AssertEquals ("1", navigator.Evaluate ("count(//foo)").ToString ());
  76. AssertEquals ("1", navigator.Evaluate ("count(/foo)").ToString ());
  77. AssertEquals ("1", navigator.Evaluate ("count(/foo/bar)").ToString ());
  78. AssertEquals ("3", navigator2.Evaluate ("count(//bar)").ToString ());
  79. }
  80. public void saveTestCoreFunctionNodeSetID ()
  81. {
  82. document.LoadXml (
  83. "<!DOCTYPE foo [" +
  84. "<!ELEMENT foo (bar)>" +
  85. "<!ELEMENT bar EMPTY>" +
  86. "<!ATTLIST bar baz ID #REQUIRED>" +
  87. "]>" +
  88. "<foo><bar baz='1' qux='hello' /><bar baz='2' qux='world' /></foo>");
  89. navigator = document.CreateNavigator();
  90. AssertEquals ("hello", navigator.Evaluate ("string(id('1')/@qux)").ToString ());
  91. AssertEquals ("world", navigator.Evaluate ("string(id('2')/@qux)").ToString ());
  92. }
  93. [Test]
  94. public void CoreFunctionLocalName ()
  95. {
  96. AssertEquals ("", navigator.Evaluate ("local-name()").ToString ());
  97. AssertEquals ("", navigator.Evaluate ("local-name(/bogus)").ToString ());
  98. AssertEquals ("foo", navigator.Evaluate ("local-name(/foo)").ToString ());
  99. AssertEquals ("bar", navigator3.Evaluate ("local-name(/foo/*)").ToString ());
  100. }
  101. // TODO: umm. Unable to make this return a namespace-uri so far...
  102. [Test]
  103. public void CoreFunctionNamespaceURI ()
  104. {
  105. document.LoadXml ("<foo:bar xmlns:foo='#foo'><foo:baz><foo:qux /></foo:baz></foo:bar>");
  106. navigator = document.CreateNavigator ();
  107. AssertEquals ("", navigator.Evaluate ("namespace-uri()").ToString ());
  108. AssertEquals ("", navigator.Evaluate ("namespace-uri(/bogus)").ToString ());
  109. //AssertEquals("foo", navigator.Evaluate ("namespace-uri(/bar)").ToString ());
  110. AssertEquals ("", navigator2.Evaluate ("namespace-uri(//bar)").ToString ());
  111. }
  112. public void saveTestCoreFunctionString ()
  113. {
  114. document.LoadXml ("<foo>hello<bar>world</bar><baz>how are you</baz></foo>");
  115. navigator = document.CreateNavigator ();
  116. AssertEquals ("world", navigator.Evaluate ("string(/foo/*)").ToString ());
  117. AssertEquals ("NaN", navigator.Evaluate ("string(0 div 0)").ToString ());
  118. try {
  119. navigator.Evaluate ("string(+0)");
  120. Fail ("Expected an XPathException to be thrown.");
  121. } catch (XPathException) {}
  122. AssertEquals ("0", navigator.Evaluate ("string(-0)").ToString ());
  123. AssertEquals ("Infinity", navigator.Evaluate ("string(1 div 0)").ToString ());
  124. AssertEquals ("-Infinity", navigator.Evaluate ("string(-1 div 0)").ToString ());
  125. AssertEquals ("45", navigator.Evaluate ("string(45)").ToString ());
  126. AssertEquals ("-22", navigator.Evaluate ("string(-22)").ToString ());
  127. AssertEquals ("0.25", navigator.Evaluate ("string(.25)").ToString ());
  128. AssertEquals ("-0.25", navigator.Evaluate ("string(-.25)").ToString ());
  129. AssertEquals ("2", navigator.Evaluate ("string(2.0)").ToString ());
  130. AssertEquals ("2.01", navigator.Evaluate ("string(2.01)").ToString ());
  131. AssertEquals ("-3", navigator.Evaluate ("string(-3.0)").ToString ());
  132. AssertEquals ("3.45", navigator.Evaluate ("string(3.45)").ToString ());
  133. // Wonder what this will look like under a different platform.
  134. AssertEquals("0.33333333333333331", navigator.Evaluate ("string(1 div 3)").ToString ());
  135. }
  136. [Test]
  137. public void CoreFunctionConcat ()
  138. {
  139. try {
  140. navigator.Evaluate ("concat()");
  141. Fail ("Expected an XPathException to be thrown.");
  142. } catch (XPathException) {}
  143. try {
  144. navigator.Evaluate ("concat('foo')");
  145. Fail ("Expected an XPathException to be thrown.");
  146. } catch (XPathException) {}
  147. AssertEquals ("foobar", navigator.Evaluate ("concat('foo', 'bar')").ToString ());
  148. AssertEquals ("foobarbaz", navigator.Evaluate ("concat('foo', 'bar', 'baz')").ToString ());
  149. AssertEquals ("foobarbazqux", navigator.Evaluate ("concat('foo', 'bar', 'baz', 'qux')").ToString ());
  150. AssertEquals ("foobarbazquxquux", navigator.Evaluate ("concat('foo', 'bar', 'baz', 'qux', 'quux')").ToString ());
  151. }
  152. [Test]
  153. public void CoreFunctionStartsWith ()
  154. {
  155. try {
  156. navigator.Evaluate ("starts-with()");
  157. Fail ("Expected an XPathException to be thrown.");
  158. } catch (XPathException) {}
  159. try {
  160. navigator.Evaluate ("starts-with('foo')");
  161. Fail ("Expected an XPathException to be thrown.");
  162. } catch (XPathException) {}
  163. try {
  164. navigator.Evaluate ("starts-with('foo', 'bar', 'baz')");
  165. Fail ("Expected an XPathException to be thrown.");
  166. } catch (XPathException) {}
  167. Assert ((bool)navigator.Evaluate ("starts-with('foobar', 'foo')"));
  168. Assert (!(bool)navigator.Evaluate ("starts-with('foobar', 'bar')"));
  169. }
  170. [Test]
  171. public void CoreFunctionContains ()
  172. {
  173. try {
  174. navigator.Evaluate ("contains()");
  175. Fail ("Expected an XPathException to be thrown.");
  176. } catch (XPathException) {}
  177. try {
  178. navigator.Evaluate ("contains('foo')");
  179. Fail ("Expected an XPathException to be thrown.");
  180. } catch (XPathException) {}
  181. try {
  182. navigator.Evaluate ("contains('foobar', 'oob', 'baz')");
  183. Fail ("Expected an XPathException to be thrown.");
  184. } catch (XPathException) {}
  185. Assert ((bool)navigator.Evaluate ("contains('foobar', 'oob')"));
  186. Assert (!(bool)navigator.Evaluate ("contains('foobar', 'baz')"));
  187. }
  188. }
  189. }