XPathNavigatorEvaluateTests.cs 7.7 KB

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