/basex-core/src/test/java/org/basex/query/func/ValidateModuleTest.java

https://github.com/JensErat/basex · Java · 247 lines · 166 code · 21 blank · 60 comment · 0 complexity · 27f35d73e70f9154f7f7912c0f909d23 MD5 · raw file

  1. package org.basex.query.func;
  2. import static org.basex.query.QueryError.*;
  3. import static org.basex.query.func.Function.*;
  4. import org.basex.query.*;
  5. import org.junit.*;
  6. /**
  7. * This class tests the functions of the Validation Module.
  8. *
  9. * @author BaseX Team 2005-16, BSD License
  10. * @author Christian Gruen
  11. */
  12. public final class ValidateModuleTest extends AdvancedQueryTest {
  13. /** Test file. */
  14. private static final String DIR = "src/test/resources/";
  15. /** Test file. */
  16. private static final String FILE = DIR + "validate.xml";
  17. /** Test file. */
  18. private static final String XSD = DIR + "validate.xsd";
  19. /** Test file. */
  20. private static final String DTD = DIR + "validate.dtd";
  21. /** Test file. */
  22. private static final String INPUT = DIR + "input.xml";
  23. /** Test method. */
  24. @Test
  25. public void xsd() {
  26. // specify arguments as file paths
  27. query(_VALIDATE_XSD.args(FILE, XSD), "");
  28. // specify arguments as document nodes
  29. query(_VALIDATE_XSD.args(DOC.args(FILE), DOC.args(XSD)), "");
  30. // specify arguments as file contents
  31. query(_VALIDATE_XSD.args(_FILE_READ_TEXT.args(FILE), _FILE_READ_TEXT.args(XSD)), "");
  32. // specify version
  33. query(_VALIDATE_XSD.args(FILE, XSD, "1.0"), "");
  34. // specify main-memory fragments as arguments
  35. query(
  36. "let $doc := <root/> " +
  37. "let $schema := <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'> " +
  38. "<xs:element name='root'/> " +
  39. "</xs:schema> " +
  40. "return validate:xsd($doc, $schema)", "");
  41. // invalid arguments
  42. error(_VALIDATE_XSD.args("unknown"), WHICHRES_X);
  43. error(_VALIDATE_XSD.args(FILE, "unknown.xsd"), WHICHRES_X);
  44. error(_VALIDATE_XSD.args(FILE, XSD, "0.99"), BXVA_XSDVERSION_X);
  45. error(_VALIDATE_XSD.args(FILE), BXVA_FAIL_X);
  46. error(
  47. "let $doc := <root/> " +
  48. "let $schema := <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'> " +
  49. "<xs:element name='unknown'/> " +
  50. "</xs:schema> " +
  51. "return validate:xsd($doc, $schema)", BXVA_FAIL_X);
  52. }
  53. /** Test method. */
  54. @Test
  55. public void xsdInfo() {
  56. // specify arguments as file paths
  57. query(_VALIDATE_XSD_INFO.args(FILE, XSD), "");
  58. // specify arguments as document nodes
  59. query(_VALIDATE_XSD_INFO.args(DOC.args(FILE), DOC.args(XSD)), "");
  60. // specify arguments as file contents
  61. query(_VALIDATE_XSD_INFO.args(_FILE_READ_TEXT.args(FILE),
  62. _FILE_READ_TEXT.args(XSD)), "");
  63. // specify version
  64. query(_VALIDATE_XSD_INFO.args(FILE, XSD, "1.0"), "");
  65. // specify main-memory fragments as arguments
  66. query(
  67. "let $doc := <root/> " +
  68. "let $schema := <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'> " +
  69. "<xs:element name='root'/> " +
  70. "</xs:schema> " +
  71. "return " + _VALIDATE_XSD_INFO.args("$doc", "$schema"), "");
  72. // returned error
  73. query(EXISTS.args(_VALIDATE_XSD_INFO.args(FILE)), "true");
  74. query(EXISTS.args(
  75. "let $doc := <root/> " +
  76. "let $schema := <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'> " +
  77. "<xs:element name='unknown'/> " +
  78. "</xs:schema> " +
  79. "return " + _VALIDATE_XSD_INFO.args("$doc", "$schema")), "true");
  80. // invalid arguments
  81. error(_VALIDATE_XSD_INFO.args("unknown"), WHICHRES_X);
  82. error(_VALIDATE_XSD_INFO.args(FILE, "unknown.xsd"), WHICHRES_X);
  83. error(_VALIDATE_XSD_INFO.args(FILE, XSD, "0.99"), BXVA_XSDVERSION_X);
  84. }
  85. /** Test method. */
  86. @Test
  87. public void xsdReport() {
  88. // check XML result
  89. query(_VALIDATE_XSD_REPORT.args(FILE, XSD), "<report>\n<status>valid</status>\n</report>");
  90. // specify arguments as file paths
  91. query(_VALIDATE_XSD_REPORT.args(FILE, XSD) + "//status/string()", "valid");
  92. // specify arguments as document nodes
  93. query(_VALIDATE_XSD_REPORT.args(DOC.args(FILE), DOC.args(XSD)) + "//status/string()", "valid");
  94. // specify arguments as file contents
  95. query(_VALIDATE_XSD_REPORT.args(_FILE_READ_TEXT.args(FILE), _FILE_READ_TEXT.args(XSD)) +
  96. "//status/string()", "valid");
  97. // check XML result
  98. query(_VALIDATE_XSD_REPORT.args(FILE, XSD, "1.0"),
  99. "<report>\n<status>valid</status>\n</report>");
  100. // specify main-memory fragments as arguments
  101. query(
  102. "let $doc := <root/> " +
  103. "let $schema := <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'> " +
  104. " <xs:element name='root'/> " +
  105. " </xs:schema> " +
  106. "return " + _VALIDATE_XSD_REPORT.args("$doc", "$schema") + "//status/string()", "valid");
  107. // returned error
  108. query(_VALIDATE_XSD_REPORT.args(FILE) + "//status/string()", "invalid");
  109. query(
  110. "let $doc := <root/> " +
  111. "let $schema := <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'> " +
  112. " <xs:element name='unknown'/> " +
  113. " </xs:schema> " +
  114. "return " + _VALIDATE_XSD_REPORT.args("$doc", "$schema") + "//status/string()", "invalid");
  115. // check XML result
  116. query(
  117. "let $doc := <root/> " +
  118. "let $schema := <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'> " +
  119. " <xs:element name='unknown'/> " +
  120. " </xs:schema> " +
  121. "let $report := " + _VALIDATE_XSD_REPORT.args("$doc", "$schema") +
  122. "return $report update (" +
  123. " delete node .//message/text()," +
  124. " for $a in .//@* return replace value of node $a with ''" +
  125. ")",
  126. "<report>\n<status>invalid</status>\n" +
  127. "<message level=\"\" line=\"\" column=\"\"/>\n" +
  128. "</report>");
  129. // check URL attribute
  130. query(EXISTS.args(_VALIDATE_XSD_REPORT.args(INPUT, XSD) + "//@url"), "true");
  131. // invalid arguments
  132. error(_VALIDATE_XSD_REPORT.args("unknown"), WHICHRES_X);
  133. error(_VALIDATE_XSD_REPORT.args(FILE, "unknown.xsd"), WHICHRES_X);
  134. error(_VALIDATE_XSD_REPORT.args(FILE, XSD, "0.99"), BXVA_XSDVERSION_X);
  135. }
  136. /** Test method. */
  137. @Test
  138. public void dtd() {
  139. // specify arguments as file paths
  140. query(_VALIDATE_DTD.args(FILE, DTD), "");
  141. // specify document as document nodes
  142. query(_VALIDATE_DTD.args(DOC.args(FILE), DTD), "");
  143. // specify arguments as file contents
  144. query(_VALIDATE_DTD.args(_FILE_READ_TEXT.args(FILE),
  145. _FILE_READ_TEXT.args(DTD)), "");
  146. // specify main-memory fragments as arguments
  147. query(
  148. "let $doc := <root/> " +
  149. "let $dtd := '<!ELEMENT root (#PCDATA)>' " +
  150. "return validate:dtd($doc, $dtd) ", "");
  151. // invalid arguments
  152. error(_VALIDATE_DTD.args("unknown"), WHICHRES_X);
  153. error(_VALIDATE_DTD.args(FILE, "unknown.dtd"), WHICHRES_X);
  154. error(_VALIDATE_DTD.args(FILE), BXVA_FAIL_X);
  155. error(
  156. "let $doc := <root/> " +
  157. "let $dtd := '<!ELEMENT unknown (#PCDATA)>' " +
  158. "return validate:dtd($doc, $dtd) ", BXVA_FAIL_X);
  159. }
  160. /** Test method. */
  161. @Test
  162. public void dtdInfo() {
  163. // specify arguments as file paths
  164. query(_VALIDATE_DTD_INFO.args(FILE, DTD), "");
  165. // specify document as document nodes
  166. query(_VALIDATE_DTD_INFO.args(DOC.args(FILE), DTD), "");
  167. // specify arguments as file contents
  168. query(_VALIDATE_DTD_INFO.args(_FILE_READ_TEXT.args(FILE),
  169. _FILE_READ_TEXT.args(DTD)), "");
  170. // specify main-memory fragments as arguments
  171. query(
  172. "let $doc := <root/> " +
  173. "let $dtd := '<!ELEMENT root (#PCDATA)>' " +
  174. "return " + _VALIDATE_DTD_INFO.args("$doc", "$dtd"), "");
  175. // returned error
  176. query(EXISTS.args(_VALIDATE_DTD_INFO.args(FILE)), "true");
  177. query(EXISTS.args(
  178. "let $doc := <root/> " +
  179. "let $dtd := '<!ELEMENT unknown (#PCDATA)>' " +
  180. "return " + _VALIDATE_DTD_INFO.args("$doc", "$dtd")), "true");
  181. // invalid arguments
  182. error(_VALIDATE_DTD_INFO.args("unknown"), WHICHRES_X);
  183. error(_VALIDATE_DTD_INFO.args(FILE, "unknown.dtd"), WHICHRES_X);
  184. }
  185. /** Test method. */
  186. @Test
  187. public void dtdReport() {
  188. // check XML result
  189. query(_VALIDATE_DTD_REPORT.args(FILE, DTD), "<report>\n<status>valid</status>\n</report>");
  190. // specify arguments as file paths
  191. query(_VALIDATE_DTD_REPORT.args(FILE, DTD) + "//status/string()", "valid");
  192. // specify document as document nodes
  193. query(_VALIDATE_DTD_REPORT.args(DOC.args(FILE), DTD) + "//status/string()", "valid");
  194. // specify arguments as file contents
  195. query(_VALIDATE_DTD_REPORT.args(_FILE_READ_TEXT.args(FILE), _FILE_READ_TEXT.args(DTD)) +
  196. "//status/string()", "valid");
  197. // specify main-memory fragments as arguments
  198. query(
  199. "let $doc := <root/> " +
  200. "let $dtd := '<!ELEMENT root (#PCDATA)>' " +
  201. "return " + _VALIDATE_DTD_REPORT.args("$doc", "$dtd") + "//status/string()", "valid");
  202. // returned error
  203. query(_VALIDATE_DTD_REPORT.args(FILE) + "//status/string()", "invalid");
  204. query(
  205. "let $doc := <root/> " +
  206. "let $dtd := '<!ELEMENT unknown (#PCDATA)>' " +
  207. "return " + _VALIDATE_DTD_REPORT.args("$doc", "$dtd") + "//status/string()", "invalid");
  208. // check XML result
  209. query(
  210. "let $doc := <root/> " +
  211. "let $schema := '<!ELEMENT unknown (#PCDATA)>' " +
  212. "let $report := " + _VALIDATE_DTD_REPORT.args("$doc", "$schema") +
  213. "return $report update (" +
  214. " delete node .//message/text()," +
  215. " for $a in .//@* return replace value of node $a with ''" +
  216. ")",
  217. "<report>\n<status>invalid</status>\n" +
  218. "<message level=\"\" line=\"\" column=\"\"/>\n" +
  219. "</report>");
  220. // check URL attribute
  221. query(EXISTS.args(_VALIDATE_DTD_REPORT.args(INPUT, DTD) + "//@url"), "true");
  222. // invalid arguments
  223. error(_VALIDATE_DTD_REPORT.args("unknown"), WHICHRES_X);
  224. error(_VALIDATE_DTD_REPORT.args(FILE, "unknown.dtd"), WHICHRES_X);
  225. }
  226. }