@traqula/test-utils 1.0.4 → 1.0.6-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/dist/cjs/lib/Sparql11NotesTest.js +16 -168
  2. package/dist/cjs/lib/Sparql11NotesTest.js.map +1 -1
  3. package/dist/cjs/lib/generators/algebraGenerators.js +13 -15
  4. package/dist/cjs/lib/generators/algebraGenerators.js.map +1 -1
  5. package/dist/cjs/lib/generators/generators.js +13 -15
  6. package/dist/cjs/lib/generators/generators.js.map +1 -1
  7. package/dist/cjs/lib/generators/utils.js +3 -2
  8. package/dist/cjs/lib/generators/utils.js.map +1 -1
  9. package/dist/cjs/lib/matchers/toEqualParsedQuery.js +3 -3
  10. package/dist/cjs/lib/matchers/toEqualParsedQuery.js.map +1 -1
  11. package/dist/esm/lib/Sparql11NotesTest.d.ts +1 -1
  12. package/dist/esm/lib/Sparql11NotesTest.js +16 -168
  13. package/dist/esm/lib/Sparql11NotesTest.js.map +1 -1
  14. package/dist/esm/lib/generators/algebraGenerators.js +13 -15
  15. package/dist/esm/lib/generators/algebraGenerators.js.map +1 -1
  16. package/dist/esm/lib/generators/generators.js +13 -15
  17. package/dist/esm/lib/generators/generators.js.map +1 -1
  18. package/dist/esm/lib/generators/utils.js +3 -2
  19. package/dist/esm/lib/generators/utils.js.map +1 -1
  20. package/dist/esm/lib/matchers/toEqualParsedQuery.js +3 -3
  21. package/dist/esm/lib/matchers/toEqualParsedQuery.js.map +1 -1
  22. package/package.json +3 -3
  23. package/statics/algebra/algebra/sparql12/sparql-1-2-ar-langdir.json +44 -0
  24. package/statics/algebra/algebra/sparql12/sparql-1-2-en-langdir.json +44 -0
  25. package/statics/algebra/algebra-blank-to-var/sparql12/sparql-1-2-ar-langdir.json +44 -0
  26. package/statics/algebra/algebra-blank-to-var/sparql12/sparql-1-2-en-langdir.json +44 -0
  27. package/statics/algebra/sparql/sparql12/sparql-1-2-ar-langdir.sparql +1 -0
  28. package/statics/algebra/sparql/sparql12/sparql-1-2-en-langdir.sparql +1 -0
  29. package/statics/ast/ast-source-tracked/sparql-1-1/add-silent.json +69 -0
  30. package/statics/ast/ast-source-tracked/sparql-1-1/additive-neg-div.json +156 -0
  31. package/statics/ast/ast-source-tracked/sparql-1-1/additive-pos-mult.json +156 -0
  32. package/statics/ast/ast-source-tracked/sparql-1-1/ask-basic.json +86 -0
  33. package/statics/ast/ast-source-tracked/sparql-1-1/base-declaration.json +116 -0
  34. package/statics/ast/ast-source-tracked/sparql-1-1/blank-node-path.json +141 -0
  35. package/statics/ast/ast-source-tracked/sparql-1-1/blank-node-subject.json +96 -0
  36. package/statics/ast/ast-source-tracked/sparql-1-1/bnode-nil.json +89 -0
  37. package/statics/ast/ast-source-tracked/sparql-1-1/collection-object.json +169 -0
  38. package/statics/ast/ast-source-tracked/sparql-1-1/collection-path-subject.json +233 -0
  39. package/statics/ast/ast-source-tracked/sparql-1-1/collection-subject.json +169 -0
  40. package/statics/ast/ast-source-tracked/sparql-1-1/construct-empty-template.json +94 -0
  41. package/statics/ast/ast-source-tracked/sparql-1-1/count-select.json +130 -0
  42. package/statics/ast/ast-source-tracked/sparql-1-1/delete-only.json +149 -0
  43. package/statics/ast/ast-source-tracked/sparql-1-1/delete-where.json +81 -0
  44. package/statics/ast/ast-source-tracked/sparql-1-1/distinct-extension-function.json +171 -0
  45. package/statics/ast/ast-source-tracked/sparql-1-1/drop-named.json +40 -0
  46. package/statics/ast/ast-source-tracked/sparql-1-1/escape-backspace.json +96 -0
  47. package/statics/ast/ast-source-tracked/sparql-1-1/escape-cr.json +96 -0
  48. package/statics/ast/ast-source-tracked/sparql-1-1/escape-formfeed.json +96 -0
  49. package/statics/ast/ast-source-tracked/sparql-1-1/escape-tab.json +96 -0
  50. package/statics/ast/ast-source-tracked/sparql-1-1/filter-neg-div.json +197 -0
  51. package/statics/ast/ast-source-tracked/sparql-1-1/filter-neg-mult.json +175 -0
  52. package/statics/ast/ast-source-tracked/sparql-1-1/filter-pos-div.json +205 -0
  53. package/statics/ast/ast-source-tracked/sparql-1-1/filter-pos-mult.json +205 -0
  54. package/statics/ast/ast-source-tracked/sparql-1-1/func-nil-args.json +77 -0
  55. package/statics/ast/ast-source-tracked/sparql-1-1/graph-empty-insert.json +58 -0
  56. package/statics/ast/ast-source-tracked/sparql-1-1/group-by-bind-expr.json +137 -0
  57. package/statics/ast/ast-source-tracked/sparql-1-1/group-by-bind-var.json +189 -0
  58. package/statics/ast/ast-source-tracked/sparql-1-1/inv-nps-path.json +150 -0
  59. package/statics/ast/ast-source-tracked/sparql-1-1/literal-newline.json +96 -0
  60. package/statics/ast/ast-source-tracked/sparql-1-1/load-silent.json +41 -0
  61. package/statics/ast/ast-source-tracked/sparql-1-1/minus-optional.json +216 -0
  62. package/statics/ast/ast-source-tracked/sparql-1-1/multiple-updates.json +144 -0
  63. package/statics/ast/ast-source-tracked/sparql-1-1/negated-inverse-path.json +118 -0
  64. package/statics/ast/ast-source-tracked/sparql-1-1/order-by-var.json +126 -0
  65. package/statics/ast/ast-source-tracked/sparql-1-1/prefix-only-iri.json +118 -0
  66. package/statics/ast/ast-source-tracked/sparql-1-1/quads-after-graph.json +148 -0
  67. package/statics/ast/ast-source-tracked/sparql-1-1/replace-four-args.json +130 -0
  68. package/statics/ast/ast-source-tracked/sparql-1-1/replace-three-args.json +120 -0
  69. package/statics/ast/ast-source-tracked/sparql-1-1/unary-minus.json +108 -0
  70. package/statics/ast/ast-source-tracked/sparql-1-1/unary-plus.json +108 -0
  71. package/statics/ast/ast-source-tracked/sparql-1-1/values-at-end.json +131 -0
  72. package/statics/ast/ast-source-tracked/sparql-1-1/values-in-where.json +106 -0
  73. package/statics/ast/ast-source-tracked/sparql-1-2/reified-triple-explicit-reifier.json +155 -0
  74. package/statics/ast/ast-source-tracked/sparql-1-2/reified-triple-no-reifier.json +153 -0
  75. package/statics/ast/ast-source-tracked/sparql-1-2/reified-triple-tilde-no-id.json +153 -0
  76. package/statics/ast/ast-source-tracked/sparql-1-2/unary-minus-12.json +108 -0
  77. package/statics/ast/ast-source-tracked/sparql-1-2/unary-plus-12.json +108 -0
  78. package/statics/ast/ast-source-tracked/sparql-1-2/version-decl.json +108 -0
  79. package/statics/ast/ast-source-tracked/sparql-1-2/version-with-prefix.json +128 -0
  80. package/statics/ast/sparql/sparql-1-1/add-silent.sparql +1 -0
  81. package/statics/ast/sparql/sparql-1-1/additive-neg-div.sparql +1 -0
  82. package/statics/ast/sparql/sparql-1-1/additive-pos-mult.sparql +1 -0
  83. package/statics/ast/sparql/sparql-1-1/ask-basic.sparql +1 -0
  84. package/statics/ast/sparql/sparql-1-1/base-declaration.sparql +1 -0
  85. package/statics/ast/sparql/sparql-1-1/blank-node-path.sparql +1 -0
  86. package/statics/ast/sparql/sparql-1-1/blank-node-subject.sparql +1 -0
  87. package/statics/ast/sparql/sparql-1-1/bnode-nil.sparql +1 -0
  88. package/statics/ast/sparql/sparql-1-1/collection-object.sparql +1 -0
  89. package/statics/ast/sparql/sparql-1-1/collection-path-subject.sparql +1 -0
  90. package/statics/ast/sparql/sparql-1-1/collection-subject.sparql +1 -0
  91. package/statics/ast/sparql/sparql-1-1/construct-empty-template.sparql +1 -0
  92. package/statics/ast/sparql/sparql-1-1/count-select.sparql +1 -0
  93. package/statics/ast/sparql/sparql-1-1/delete-only.sparql +1 -0
  94. package/statics/ast/sparql/sparql-1-1/delete-where.sparql +1 -0
  95. package/statics/ast/sparql/sparql-1-1/distinct-extension-function.sparql +1 -0
  96. package/statics/ast/sparql/sparql-1-1/drop-named.sparql +1 -0
  97. package/statics/ast/sparql/sparql-1-1/escape-backspace.sparql +1 -0
  98. package/statics/ast/sparql/sparql-1-1/escape-cr.sparql +1 -0
  99. package/statics/ast/sparql/sparql-1-1/escape-formfeed.sparql +1 -0
  100. package/statics/ast/sparql/sparql-1-1/escape-tab.sparql +1 -0
  101. package/statics/ast/sparql/sparql-1-1/filter-neg-div.sparql +1 -0
  102. package/statics/ast/sparql/sparql-1-1/filter-neg-mult.sparql +1 -0
  103. package/statics/ast/sparql/sparql-1-1/filter-pos-div.sparql +1 -0
  104. package/statics/ast/sparql/sparql-1-1/filter-pos-mult.sparql +1 -0
  105. package/statics/ast/sparql/sparql-1-1/func-nil-args.sparql +1 -0
  106. package/statics/ast/sparql/sparql-1-1/graph-empty-insert.sparql +1 -0
  107. package/statics/ast/sparql/sparql-1-1/group-by-bind-expr.sparql +1 -0
  108. package/statics/ast/sparql/sparql-1-1/group-by-bind-var.sparql +1 -0
  109. package/statics/ast/sparql/sparql-1-1/inv-nps-path.sparql +1 -0
  110. package/statics/ast/sparql/sparql-1-1/literal-newline.sparql +1 -0
  111. package/statics/ast/sparql/sparql-1-1/load-silent.sparql +1 -0
  112. package/statics/ast/sparql/sparql-1-1/minus-optional.sparql +1 -0
  113. package/statics/ast/sparql/sparql-1-1/multiple-updates.sparql +1 -0
  114. package/statics/ast/sparql/sparql-1-1/negated-inverse-path.sparql +1 -0
  115. package/statics/ast/sparql/sparql-1-1/order-by-var.sparql +1 -0
  116. package/statics/ast/sparql/sparql-1-1/prefix-only-iri.sparql +1 -0
  117. package/statics/ast/sparql/sparql-1-1/quads-after-graph.sparql +1 -0
  118. package/statics/ast/sparql/sparql-1-1/replace-four-args.sparql +1 -0
  119. package/statics/ast/sparql/sparql-1-1/replace-three-args.sparql +1 -0
  120. package/statics/ast/sparql/sparql-1-1/unary-minus.sparql +1 -0
  121. package/statics/ast/sparql/sparql-1-1/unary-plus.sparql +1 -0
  122. package/statics/ast/sparql/sparql-1-1/values-at-end.sparql +1 -0
  123. package/statics/ast/sparql/sparql-1-1/values-in-where.sparql +1 -0
  124. package/statics/ast/sparql/sparql-1-2/reified-triple-explicit-reifier.sparql +1 -0
  125. package/statics/ast/sparql/sparql-1-2/reified-triple-no-reifier.sparql +1 -0
  126. package/statics/ast/sparql/sparql-1-2/reified-triple-tilde-no-id.sparql +1 -0
  127. package/statics/ast/sparql/sparql-1-2/unary-minus-12.sparql +1 -0
  128. package/statics/ast/sparql/sparql-1-2/unary-plus-12.sparql +1 -0
  129. package/statics/ast/sparql/sparql-1-2/version-decl.sparql +1 -0
  130. package/statics/ast/sparql/sparql-1-2/version-with-prefix.sparql +1 -0
  131. package/statics/ast/sparql-generated/sparql-1-1/add-silent.sparql +1 -0
  132. package/statics/ast/sparql-generated/sparql-1-1/additive-neg-div.sparql +3 -0
  133. package/statics/ast/sparql-generated/sparql-1-1/additive-pos-mult.sparql +3 -0
  134. package/statics/ast/sparql-generated/sparql-1-1/ask-basic.sparql +3 -0
  135. package/statics/ast/sparql-generated/sparql-1-1/base-declaration.sparql +4 -0
  136. package/statics/ast/sparql-generated/sparql-1-1/blank-node-path.sparql +5 -0
  137. package/statics/ast/sparql-generated/sparql-1-1/blank-node-subject.sparql +3 -0
  138. package/statics/ast/sparql-generated/sparql-1-1/bnode-nil.sparql +3 -0
  139. package/statics/ast/sparql-generated/sparql-1-1/collection-object.sparql +3 -0
  140. package/statics/ast/sparql-generated/sparql-1-1/collection-path-subject.sparql +3 -0
  141. package/statics/ast/sparql-generated/sparql-1-1/collection-subject.sparql +3 -0
  142. package/statics/ast/sparql-generated/sparql-1-1/construct-empty-template.sparql +5 -0
  143. package/statics/ast/sparql-generated/sparql-1-1/count-select.sparql +3 -0
  144. package/statics/ast/sparql-generated/sparql-1-1/delete-only.sparql +6 -0
  145. package/statics/ast/sparql-generated/sparql-1-1/delete-where.sparql +3 -0
  146. package/statics/ast/sparql-generated/sparql-1-1/distinct-extension-function.sparql +4 -0
  147. package/statics/ast/sparql-generated/sparql-1-1/drop-named.sparql +1 -0
  148. package/statics/ast/sparql-generated/sparql-1-1/escape-backspace.sparql +3 -0
  149. package/statics/ast/sparql-generated/sparql-1-1/escape-cr.sparql +3 -0
  150. package/statics/ast/sparql-generated/sparql-1-1/escape-formfeed.sparql +3 -0
  151. package/statics/ast/sparql-generated/sparql-1-1/escape-tab.sparql +3 -0
  152. package/statics/ast/sparql-generated/sparql-1-1/filter-neg-div.sparql +4 -0
  153. package/statics/ast/sparql-generated/sparql-1-1/filter-neg-mult.sparql +4 -0
  154. package/statics/ast/sparql-generated/sparql-1-1/filter-pos-div.sparql +4 -0
  155. package/statics/ast/sparql-generated/sparql-1-1/filter-pos-mult.sparql +4 -0
  156. package/statics/ast/sparql-generated/sparql-1-1/func-nil-args.sparql +3 -0
  157. package/statics/ast/sparql-generated/sparql-1-1/graph-empty-insert.sparql +4 -0
  158. package/statics/ast/sparql-generated/sparql-1-1/group-by-bind-expr.sparql +4 -0
  159. package/statics/ast/sparql-generated/sparql-1-1/group-by-bind-var.sparql +5 -0
  160. package/statics/ast/sparql-generated/sparql-1-1/inv-nps-path.sparql +3 -0
  161. package/statics/ast/sparql-generated/sparql-1-1/literal-newline.sparql +3 -0
  162. package/statics/ast/sparql-generated/sparql-1-1/load-silent.sparql +1 -0
  163. package/statics/ast/sparql-generated/sparql-1-1/minus-optional.sparql +9 -0
  164. package/statics/ast/sparql-generated/sparql-1-1/multiple-updates.sparql +7 -0
  165. package/statics/ast/sparql-generated/sparql-1-1/negated-inverse-path.sparql +3 -0
  166. package/statics/ast/sparql-generated/sparql-1-1/order-by-var.sparql +4 -0
  167. package/statics/ast/sparql-generated/sparql-1-1/prefix-only-iri.sparql +4 -0
  168. package/statics/ast/sparql-generated/sparql-1-1/quads-after-graph.sparql +6 -0
  169. package/statics/ast/sparql-generated/sparql-1-1/replace-four-args.sparql +3 -0
  170. package/statics/ast/sparql-generated/sparql-1-1/replace-three-args.sparql +3 -0
  171. package/statics/ast/sparql-generated/sparql-1-1/unary-minus.sparql +3 -0
  172. package/statics/ast/sparql-generated/sparql-1-1/unary-plus.sparql +3 -0
  173. package/statics/ast/sparql-generated/sparql-1-1/values-at-end.sparql +6 -0
  174. package/statics/ast/sparql-generated/sparql-1-1/values-in-where.sparql +6 -0
  175. package/statics/ast/sparql-generated/sparql-1-2/reified-triple-explicit-reifier.sparql +4 -0
  176. package/statics/ast/sparql-generated/sparql-1-2/reified-triple-no-reifier.sparql +4 -0
  177. package/statics/ast/sparql-generated/sparql-1-2/reified-triple-tilde-no-id.sparql +4 -0
  178. package/statics/ast/sparql-generated/sparql-1-2/unary-minus-12.sparql +3 -0
  179. package/statics/ast/sparql-generated/sparql-1-2/unary-plus-12.sparql +3 -0
  180. package/statics/ast/sparql-generated/sparql-1-2/version-decl.sparql +4 -0
  181. package/statics/ast/sparql-generated/sparql-1-2/version-with-prefix.sparql +5 -0
  182. package/statics/ast/sparql-generated-compact/sparql-1-1/add-silent.sparql +1 -0
  183. package/statics/ast/sparql-generated-compact/sparql-1-1/additive-neg-div.sparql +1 -0
  184. package/statics/ast/sparql-generated-compact/sparql-1-1/additive-pos-mult.sparql +1 -0
  185. package/statics/ast/sparql-generated-compact/sparql-1-1/ask-basic.sparql +1 -0
  186. package/statics/ast/sparql-generated-compact/sparql-1-1/base-declaration.sparql +1 -0
  187. package/statics/ast/sparql-generated-compact/sparql-1-1/blank-node-path.sparql +1 -0
  188. package/statics/ast/sparql-generated-compact/sparql-1-1/blank-node-subject.sparql +1 -0
  189. package/statics/ast/sparql-generated-compact/sparql-1-1/bnode-nil.sparql +1 -0
  190. package/statics/ast/sparql-generated-compact/sparql-1-1/collection-object.sparql +1 -0
  191. package/statics/ast/sparql-generated-compact/sparql-1-1/collection-path-subject.sparql +1 -0
  192. package/statics/ast/sparql-generated-compact/sparql-1-1/collection-subject.sparql +1 -0
  193. package/statics/ast/sparql-generated-compact/sparql-1-1/construct-empty-template.sparql +1 -0
  194. package/statics/ast/sparql-generated-compact/sparql-1-1/count-select.sparql +1 -0
  195. package/statics/ast/sparql-generated-compact/sparql-1-1/delete-only.sparql +1 -0
  196. package/statics/ast/sparql-generated-compact/sparql-1-1/delete-where.sparql +1 -0
  197. package/statics/ast/sparql-generated-compact/sparql-1-1/distinct-extension-function.sparql +1 -0
  198. package/statics/ast/sparql-generated-compact/sparql-1-1/drop-named.sparql +1 -0
  199. package/statics/ast/sparql-generated-compact/sparql-1-1/escape-backspace.sparql +1 -0
  200. package/statics/ast/sparql-generated-compact/sparql-1-1/escape-cr.sparql +1 -0
  201. package/statics/ast/sparql-generated-compact/sparql-1-1/escape-formfeed.sparql +1 -0
  202. package/statics/ast/sparql-generated-compact/sparql-1-1/escape-tab.sparql +1 -0
  203. package/statics/ast/sparql-generated-compact/sparql-1-1/filter-neg-div.sparql +1 -0
  204. package/statics/ast/sparql-generated-compact/sparql-1-1/filter-neg-mult.sparql +1 -0
  205. package/statics/ast/sparql-generated-compact/sparql-1-1/filter-pos-div.sparql +1 -0
  206. package/statics/ast/sparql-generated-compact/sparql-1-1/filter-pos-mult.sparql +1 -0
  207. package/statics/ast/sparql-generated-compact/sparql-1-1/func-nil-args.sparql +1 -0
  208. package/statics/ast/sparql-generated-compact/sparql-1-1/graph-empty-insert.sparql +1 -0
  209. package/statics/ast/sparql-generated-compact/sparql-1-1/group-by-bind-expr.sparql +1 -0
  210. package/statics/ast/sparql-generated-compact/sparql-1-1/group-by-bind-var.sparql +1 -0
  211. package/statics/ast/sparql-generated-compact/sparql-1-1/in.sparql +1 -1
  212. package/statics/ast/sparql-generated-compact/sparql-1-1/inv-nps-path.sparql +1 -0
  213. package/statics/ast/sparql-generated-compact/sparql-1-1/literal-newline.sparql +1 -0
  214. package/statics/ast/sparql-generated-compact/sparql-1-1/load-silent.sparql +1 -0
  215. package/statics/ast/sparql-generated-compact/sparql-1-1/minus-optional.sparql +1 -0
  216. package/statics/ast/sparql-generated-compact/sparql-1-1/multiple-updates.sparql +1 -0
  217. package/statics/ast/sparql-generated-compact/sparql-1-1/negated-inverse-path.sparql +1 -0
  218. package/statics/ast/sparql-generated-compact/sparql-1-1/order-by-var.sparql +1 -0
  219. package/statics/ast/sparql-generated-compact/sparql-1-1/prefix-only-iri.sparql +1 -0
  220. package/statics/ast/sparql-generated-compact/sparql-1-1/quads-after-graph.sparql +1 -0
  221. package/statics/ast/sparql-generated-compact/sparql-1-1/replace-four-args.sparql +1 -0
  222. package/statics/ast/sparql-generated-compact/sparql-1-1/replace-three-args.sparql +1 -0
  223. package/statics/ast/sparql-generated-compact/sparql-1-1/unary-minus.sparql +1 -0
  224. package/statics/ast/sparql-generated-compact/sparql-1-1/unary-plus.sparql +1 -0
  225. package/statics/ast/sparql-generated-compact/sparql-1-1/values-at-end.sparql +1 -0
  226. package/statics/ast/sparql-generated-compact/sparql-1-1/values-in-where.sparql +1 -0
  227. package/statics/ast/sparql-generated-compact/sparql-1-2/reified-triple-explicit-reifier.sparql +1 -0
  228. package/statics/ast/sparql-generated-compact/sparql-1-2/reified-triple-no-reifier.sparql +1 -0
  229. package/statics/ast/sparql-generated-compact/sparql-1-2/reified-triple-tilde-no-id.sparql +1 -0
  230. package/statics/ast/sparql-generated-compact/sparql-1-2/unary-minus-12.sparql +1 -0
  231. package/statics/ast/sparql-generated-compact/sparql-1-2/unary-plus-12.sparql +1 -0
  232. package/statics/ast/sparql-generated-compact/sparql-1-2/version-decl.sparql +1 -0
  233. package/statics/ast/sparql-generated-compact/sparql-1-2/version-with-prefix.sparql +1 -0
@@ -1,5 +1,5 @@
1
1
  import { describe, it } from 'vitest';
2
- export function importSparql11NoteTests(parser, DF) {
2
+ export function importSparql11NoteTests(parser, _DF) {
3
3
  function testErroneousQuery(query, _errorMsg) {
4
4
  return ({ expect }) => {
5
5
  let error;
@@ -15,15 +15,15 @@ export function importSparql11NoteTests(parser, DF) {
15
15
  };
16
16
  }
17
17
  it('should throw an error on an invalid query', testErroneousQuery('invalid', 'Parse error on line 1'));
18
- it.skip('should throw an error on a projection of ungrouped variable', testErroneousQuery('PREFIX : <http://www.example.org/> SELECT ?o WHERE { ?s ?p ?o } GROUP BY ?s', 'Projection of ungrouped variable (?o)'));
18
+ it('should throw an error on a projection of ungrouped variable', testErroneousQuery('PREFIX : <http://www.example.org/> SELECT ?o WHERE { ?s ?p ?o } GROUP BY ?s', 'Projection of ungrouped variable (?o)'));
19
19
  it('should throw an error on a values class with LESS variables than value', testErroneousQuery('SELECT * WHERE { } VALUES ( ?S ) { ( true false ) }', 'Number of dataBlockValues does not match number of variables. Too much values.'));
20
20
  it('should throw an error on a values class with MORE variables than value', testErroneousQuery('SELECT * WHERE { } VALUES ( ?S ?O ) { ( true ) }', 'Number of dataBlockValues does not match number of variables. Too few values.'));
21
21
  it('should NOT throw on a values class with correct amount of values', ({ expect }) => {
22
22
  const query = 'SELECT * WHERE { } VALUES ( ?S ) { ( true ) }';
23
23
  expect(parser.parse(query)).toMatchObject({});
24
24
  });
25
- it.skip('should throw an error on an invalid selectscope', testErroneousQuery('SELECT (1 AS ?X ) { SELECT (2 AS ?X ) {} }', 'Target id of \'AS\' (?X) already used in subquery'));
26
- it.skip('should throw an error on bind to variable in scope', testErroneousQuery('SELECT * { ?s ?p ?o BIND(?o AS ?o) }', 'Target id of \'AS\' (?X) already used in subquery'));
25
+ it('should throw an error on an invalid selectscope', testErroneousQuery('SELECT (1 AS ?X ) { SELECT (2 AS ?X ) {} }', 'Target id of \'AS\' (?X) already used in subquery'));
26
+ it('should throw an error on bind to variable in scope', testErroneousQuery('SELECT * { ?s ?p ?o BIND(?o AS ?o) }', 'Target id of \'AS\' (?X) already used in subquery'));
27
27
  it('should parse when not ending in newline', ({ expect }) => {
28
28
  const query = 'select?s{?s?p?o}#wow, what a query';
29
29
  expect(parser.parse(query)).toMatchObject({});
@@ -43,175 +43,23 @@ export function importSparql11NoteTests(parser, DF) {
43
43
  it('should throw an error on an aggregate function within an aggregate function', testErroneousQuery('SELECT (SUM(COUNT(?lprice)) AS ?totalPrice) { }', 'An aggregate function is not allowed within an aggregate function'));
44
44
  describe('with pre-defined prefixes', () => {
45
45
  const prefixes = { a: 'ex:abc#', b: 'ex:def#' };
46
- it.skip('should use those prefixes', ({ expect }) => {
47
- const query = 'SELECT * { a:a b:b "" }';
48
- expect(parser.parse(query, { prefixes })).toMatchObject({
49
- where: [
50
- {
51
- triples: [
52
- {
53
- subject: DF.namedNode('ex:abc#a'),
54
- predicate: DF.namedNode('ex:def#b'),
55
- object: DF.literal(''),
56
- },
57
- ],
58
- },
59
- ],
60
- });
61
- });
62
- it.skip('should allow temporarily overriding prefixes', ({ expect }) => {
63
- const query = 'PREFIX a: <ex:xyz#> SELECT * { a:a b:b "" }';
64
- expect(parser.parse(query, { prefixes })).toMatchObject({
65
- where: [{
66
- triples: [{
67
- subject: DF.namedNode('ex:xyz#a'),
68
- predicate: DF.namedNode('ex:def#b'),
69
- object: DF.literal(''),
70
- }],
71
- },
72
- ],
73
- });
74
- const query2 = 'SELECT * { a:a b:b "" }';
75
- expect(parser.parse(query2, { prefixes })).toMatchObject({
76
- where: [{
77
- triples: [{
78
- subject: DF.namedNode('ex:abc#a'),
79
- predicate: DF.namedNode('ex:def#b'),
80
- object: DF.literal(''),
81
- }],
82
- },
83
- ],
84
- });
85
- });
46
+ it.todo('should use those prefixes');
47
+ it.todo('should allow temporarily overriding prefixes');
86
48
  it('should not change the original prefixes', ({ expect }) => {
87
49
  expect(prefixes).toEqual({ a: 'ex:abc#', b: 'ex:def#' });
88
50
  });
89
51
  });
90
52
  describe('with pre-defined base IRI', () => {
91
- const context = { baseIRI: 'http://ex.org/' };
92
- it.skip('contains the base', ({ expect }) => {
93
- const query = 'SELECT * { ?s ?p ?o }';
94
- expect(parser.parse(query, context)).toMatchObject({
95
- base: 'http://ex.org/',
96
- });
97
- });
98
- it.skip('using prefixed as relative iri', ({ expect }) => {
99
- const context = { baseIRI: 'http://ex.org/apl' };
100
- const query = `
101
- CONSTRUCT
102
- FROM <data.ttl>
103
- WHERE { ?s ?p ?o }
104
- `;
105
- expect(parser.parse(query, context)).toMatchObject({
106
- from: {
107
- default: [
108
- DF.namedNode('http://ex.org/data.ttl'),
109
- ],
110
- },
111
- });
112
- });
113
- it.skip('should use the base IRI', ({ expect }) => {
114
- const query = 'SELECT * { <> <#b> "" }';
115
- const result = {
116
- subject: DF.namedNode('http://ex.org/'),
117
- predicate: DF.namedNode('http://ex.org/#b'),
118
- object: DF.literal(''),
119
- };
120
- expect(parser.parse(query, context)).toMatchObject({
121
- where: [{ triples: [result] }],
122
- });
123
- });
124
- it.skip('should work after a previous query failed', ({ expect }) => {
125
- const badQuery = 'SELECT * { <> <#b> "" } invalid!';
126
- expect(() => parser.parse(badQuery, context)).toThrow(Error);
127
- const goodQuery = 'SELECT * { <> <#b> "" }';
128
- const context = { baseIRI: 'http://ex2.org/' };
129
- const result = {
130
- subject: DF.namedNode('http://ex2.org/'),
131
- predicate: DF.namedNode('http://ex2.org/#b'),
132
- object: DF.literal(''),
133
- };
134
- const data = parser.parse(goodQuery, context);
135
- expect(data).toMatchObject({
136
- where: [{ triples: [result] }],
137
- });
138
- });
53
+ const _context = { baseIRI: 'http://ex.org/' };
54
+ it.todo('contains the base');
55
+ it.todo('using prefixed as relative iri');
56
+ it.todo('should use the base IRI');
57
+ it.todo('should work after a previous query failed');
139
58
  });
140
- it.skip('should throw an error on relative IRIs if no base IRI is specified', testErroneousQuery('SELECT * { <a> <b> <c> }', 'Cannot resolve relative IRI a because no base IRI was set.'));
59
+ it.todo('should throw an error on relative IRIs if no base IRI is specified');
141
60
  describe('with group collapsing disabled', () => {
142
- it.skip('should keep explicit pattern group', ({ expect }) => {
143
- const query = 'SELECT * WHERE { { ?s ?p ?o } ?a ?b ?c }';
144
- const result = [
145
- {
146
- type: 'group',
147
- patterns: [
148
- {
149
- type: 'bgp',
150
- triples: [
151
- {
152
- subject: DF.variable('s'),
153
- predicate: DF.variable('p'),
154
- object: DF.variable('o'),
155
- },
156
- ],
157
- },
158
- ],
159
- },
160
- {
161
- type: 'bgp',
162
- triples: [
163
- {
164
- subject: DF.variable('a'),
165
- predicate: DF.variable('b'),
166
- object: DF.variable('c'),
167
- },
168
- ],
169
- },
170
- ];
171
- expect(parser.parse(query)).toMatchObject({ where: result });
172
- });
173
- it.skip('should still collapse immediate union groups', ({ expect }) => {
174
- const query = 'SELECT * WHERE { { ?s ?p ?o } UNION { ?a ?b ?c } }';
175
- const result = [
176
- {
177
- type: 'union',
178
- patterns: [{
179
- type: 'bgp',
180
- triples: [{
181
- subject: {
182
- termType: 'Variable',
183
- value: 's',
184
- },
185
- predicate: {
186
- termType: 'Variable',
187
- value: 'p',
188
- },
189
- object: {
190
- termType: 'Variable',
191
- value: 'o',
192
- },
193
- }],
194
- }, {
195
- type: 'bgp',
196
- triples: [{
197
- subject: {
198
- termType: 'Variable',
199
- value: 'a',
200
- },
201
- predicate: {
202
- termType: 'Variable',
203
- value: 'b',
204
- },
205
- object: {
206
- termType: 'Variable',
207
- value: 'c',
208
- },
209
- }],
210
- }],
211
- },
212
- ];
213
- expect(parser.parse(query)).toMatchObject({ where: result });
214
- });
61
+ it.todo('should keep explicit pattern group');
62
+ it.todo('should still collapse immediate union groups');
215
63
  });
216
64
  describe('for update queries', () => {
217
65
  it('should throw an error on blank nodes in DELETE clause', testErroneousQuery('DELETE { ?a <ex:knows> [] . } WHERE { ?a <ex:knows> "Alan" . }', 'Detected illegal blank node in BGP'));
@@ -230,8 +78,8 @@ WHERE { ?s ?p ?o }
230
78
  // Todo: add proper test
231
79
  expect(parser.parse(query)).toMatchObject({});
232
80
  });
233
- it.skip('should throw an error on reused blank nodes across INSERT DATA clauses', testErroneousQuery('INSERT DATA { _:a <ex:p> <ex:o> }; INSERT DATA { _:a <ex:p> <ex:o> }', 'Detected reuse blank node across different INSERT DATA clauses'));
234
- it.skip('should throw an error on reused blank nodes across INSERT DATA clauses with GRAPH', testErroneousQuery('INSERT DATA { _:a <ex:p> <ex:o> }; INSERT DATA { GRAPH <ex:g> { _:a <ex:p> <ex:o> } }', 'Detected reuse blank node across different INSERT DATA clauses'));
81
+ it('should throw an error on reused blank nodes across INSERT DATA clauses', testErroneousQuery('INSERT DATA { _:a <ex:p> <ex:o> }; INSERT DATA { _:a <ex:p> <ex:o> }', 'Detected reuse blank node across different INSERT DATA clauses'));
82
+ it('should throw an error on reused blank nodes across INSERT DATA clauses with GRAPH', testErroneousQuery('INSERT DATA { _:a <ex:p> <ex:o> }; INSERT DATA { GRAPH <ex:g> { _:a <ex:p> <ex:o> } }', 'Detected reuse blank node across different INSERT DATA clauses'));
235
83
  it('should not throw on comment between INSERT and DATA', ({ expect }) => {
236
84
  const query = `INSERT
237
85
  # Comment
@@ -1 +1 @@
1
- {"version":3,"file":"Sparql11NotesTest.js","sourceRoot":"","sources":["../../../lib/Sparql11NotesTest.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BaseQuad } from '@rdfjs/types';\nimport type { DataFactory } from 'rdf-data-factory';\nimport { describe, it } from 'vitest';\nimport type { TestFunction } from 'vitest';\n\ninterface Parser {\n parse: (query: string, context?: { prefixes?: Record<string, string>; baseIRI?: string }) => unknown;\n}\n\nexport function importSparql11NoteTests(parser: Parser, DF: DataFactory<BaseQuad>): void {\n function testErroneousQuery(query: string, _errorMsg: string): TestFunction<object> {\n return ({ expect }) => {\n let error: any;\n try {\n parser.parse(query);\n } catch (e) {\n error = e;\n }\n expect(error).not.toBeUndefined();\n expect(error).toBeInstanceOf(Error);\n // Expect(error.message).toContain(errorMsg);\n };\n }\n\n it('should throw an error on an invalid query', testErroneousQuery('invalid', 'Parse error on line 1'));\n\n it.skip('should throw an error on a projection of ungrouped variable', testErroneousQuery(\n 'PREFIX : <http://www.example.org/> SELECT ?o WHERE { ?s ?p ?o } GROUP BY ?s',\n 'Projection of ungrouped variable (?o)',\n ));\n\n it('should throw an error on a values class with LESS variables than value', testErroneousQuery(\n 'SELECT * WHERE { } VALUES ( ?S ) { ( true false ) }',\n 'Number of dataBlockValues does not match number of variables. Too much values.',\n ));\n\n it('should throw an error on a values class with MORE variables than value', testErroneousQuery(\n 'SELECT * WHERE { } VALUES ( ?S ?O ) { ( true ) }',\n 'Number of dataBlockValues does not match number of variables. Too few values.',\n ));\n\n it('should NOT throw on a values class with correct amount of values', ({ expect }) => {\n const query = 'SELECT * WHERE { } VALUES ( ?S ) { ( true ) }';\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it.skip('should throw an error on an invalid selectscope', testErroneousQuery(\n 'SELECT (1 AS ?X ) { SELECT (2 AS ?X ) {} }',\n 'Target id of \\'AS\\' (?X) already used in subquery',\n ));\n\n it.skip('should throw an error on bind to variable in scope', testErroneousQuery(\n 'SELECT * { ?s ?p ?o BIND(?o AS ?o) }',\n 'Target id of \\'AS\\' (?X) already used in subquery',\n ));\n\n it('should parse when not ending in newline', ({ expect }) => {\n const query = 'select?s{?s?p?o}#wow, what a query';\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should preserve BGP and filter pattern order', ({ expect }) => {\n const query = 'SELECT * { ?s ?p \"1\" . FILTER(true) . ?s ?p \"2\" }';\n expect(parser.parse(query)).toMatchObject({\n where: {\n patterns: [\n { subType: 'bgp' },\n { subType: 'filter' },\n { subType: 'bgp' },\n ],\n },\n });\n });\n\n it('should throw an error on an aggregate function within an aggregate function', testErroneousQuery(\n 'SELECT (SUM(COUNT(?lprice)) AS ?totalPrice) { }',\n 'An aggregate function is not allowed within an aggregate function',\n ));\n\n describe('with pre-defined prefixes', () => {\n const prefixes = { a: 'ex:abc#', b: 'ex:def#' };\n\n it.skip('should use those prefixes', ({ expect }) => {\n const query = 'SELECT * { a:a b:b \"\" }';\n expect(parser.parse(query, { prefixes })).toMatchObject({\n where: [\n {\n triples: [\n {\n subject: DF.namedNode('ex:abc#a'),\n predicate: DF.namedNode('ex:def#b'),\n object: DF.literal(''),\n },\n ],\n },\n ],\n });\n });\n\n it.skip('should allow temporarily overriding prefixes', ({ expect }) => {\n const query = 'PREFIX a: <ex:xyz#> SELECT * { a:a b:b \"\" }';\n expect(parser.parse(query, { prefixes })).toMatchObject({\n where: [{\n triples: [{\n subject: DF.namedNode('ex:xyz#a'),\n predicate: DF.namedNode('ex:def#b'),\n object: DF.literal(''),\n }],\n },\n ],\n });\n\n const query2 = 'SELECT * { a:a b:b \"\" }';\n expect(parser.parse(query2, { prefixes })).toMatchObject({\n where: [{\n triples: [{\n subject: DF.namedNode('ex:abc#a'),\n predicate: DF.namedNode('ex:def#b'),\n object: DF.literal(''),\n }],\n },\n ],\n });\n });\n\n it('should not change the original prefixes', ({ expect }) => {\n expect(prefixes).toEqual({ a: 'ex:abc#', b: 'ex:def#' });\n });\n });\n\n describe('with pre-defined base IRI', () => {\n const context = { baseIRI: 'http://ex.org/' };\n\n it.skip('contains the base', ({ expect }) => {\n const query = 'SELECT * { ?s ?p ?o }';\n expect(parser.parse(query, context)).toMatchObject({\n base: 'http://ex.org/',\n });\n });\n\n it.skip('using prefixed as relative iri', ({ expect }) => {\n const context = { baseIRI: 'http://ex.org/apl' };\n const query = `\nCONSTRUCT\nFROM <data.ttl>\nWHERE { ?s ?p ?o }\n`;\n expect(parser.parse(query, context)).toMatchObject({\n from: {\n default: [\n DF.namedNode('http://ex.org/data.ttl'),\n ],\n },\n });\n });\n\n it.skip('should use the base IRI', ({ expect }) => {\n const query = 'SELECT * { <> <#b> \"\" }';\n const result = {\n subject: DF.namedNode('http://ex.org/'),\n predicate: DF.namedNode('http://ex.org/#b'),\n object: DF.literal(''),\n };\n\n expect(parser.parse(query, context)).toMatchObject({\n where: [{ triples: [ result ]}],\n });\n });\n\n it.skip('should work after a previous query failed', ({ expect }) => {\n const badQuery = 'SELECT * { <> <#b> \"\" } invalid!';\n expect(() => parser.parse(badQuery, context)).toThrow(Error);\n\n const goodQuery = 'SELECT * { <> <#b> \"\" }';\n\n const context = { baseIRI: 'http://ex2.org/' };\n const result = {\n subject: DF.namedNode('http://ex2.org/'),\n predicate: DF.namedNode('http://ex2.org/#b'),\n object: DF.literal(''),\n };\n const data = parser.parse(goodQuery, context);\n expect(data).toMatchObject({\n where: [{ triples: [ result ]}],\n });\n });\n });\n\n it.skip('should throw an error on relative IRIs if no base IRI is specified', testErroneousQuery(\n 'SELECT * { <a> <b> <c> }',\n 'Cannot resolve relative IRI a because no base IRI was set.',\n ));\n\n describe('with group collapsing disabled', () => {\n it.skip('should keep explicit pattern group', ({ expect }) => {\n const query = 'SELECT * WHERE { { ?s ?p ?o } ?a ?b ?c }';\n const result = [\n {\n type: 'group',\n patterns: [\n {\n type: 'bgp',\n triples: [\n {\n subject: DF.variable('s'),\n predicate: DF.variable('p'),\n object: DF.variable('o'),\n },\n ],\n },\n ],\n },\n {\n type: 'bgp',\n triples: [\n {\n subject: DF.variable('a'),\n predicate: DF.variable('b'),\n object: DF.variable('c'),\n },\n ],\n },\n ];\n\n expect(parser.parse(query)).toMatchObject({ where: result });\n });\n\n it.skip('should still collapse immediate union groups', ({ expect }) => {\n const query = 'SELECT * WHERE { { ?s ?p ?o } UNION { ?a ?b ?c } }';\n\n const result = [\n {\n type: 'union',\n patterns: [{\n type: 'bgp',\n triples: [{\n subject: {\n termType: 'Variable',\n value: 's',\n },\n predicate: {\n termType: 'Variable',\n value: 'p',\n },\n object: {\n termType: 'Variable',\n value: 'o',\n },\n }],\n }, {\n type: 'bgp',\n triples: [{\n subject: {\n termType: 'Variable',\n value: 'a',\n },\n predicate: {\n termType: 'Variable',\n value: 'b',\n },\n object: {\n termType: 'Variable',\n value: 'c',\n },\n }],\n }],\n },\n ];\n\n expect(parser.parse(query)).toMatchObject({ where: result });\n });\n });\n\n describe('for update queries', () => {\n it('should throw an error on blank nodes in DELETE clause', testErroneousQuery(\n 'DELETE { ?a <ex:knows> [] . } WHERE { ?a <ex:knows> \"Alan\" . }',\n 'Detected illegal blank node in BGP',\n ));\n\n it('should not throw on blank nodes in INSERT clause', ({ expect }) => {\n const query = 'INSERT { ?a <ex:knows> [] . } WHERE { ?a <ex:knows> \"Alan\" . }';\n // TODO: add proper test\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should throw an error on blank nodes in compact DELETE clause', testErroneousQuery(\n 'DELETE WHERE { _:a <ex:p> <ex:o> }',\n 'Detected illegal blank node in BGP',\n ));\n\n it('should throw an error on variables in DELETE DATA clause', testErroneousQuery(\n 'DELETE DATA { ?a <ex:p> <ex:o> }',\n 'Detected illegal variable in BGP',\n ));\n\n it('should throw an error on blank nodes in DELETE DATA clause', testErroneousQuery(\n 'DELETE DATA { _:a <ex:p> <ex:o> }',\n 'Detected illegal blank node in BGP',\n ));\n\n it('should throw an error on variables in DELETE DATA clause with GRAPH', testErroneousQuery(\n 'DELETE DATA { GRAPH ?a { <ex:s> <ex:p> <ex:o> } }',\n 'Detected illegal variable in GRAPH',\n ));\n\n it('should throw an error on variables in INSERT DATA clause', testErroneousQuery(\n 'INSERT DATA { ?a <ex:p> <ex:o> }',\n 'Detected illegal variable in BGP',\n ));\n\n it('should not throw on reused blank nodes in one INSERT DATA clause', ({ expect }) => {\n const query = 'INSERT DATA { _:a <ex:p> <ex:o> . _:a <ex:p> <ex:o> . }';\n // Todo: add proper test\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it.skip('should throw an error on reused blank nodes across INSERT DATA clauses', testErroneousQuery(\n 'INSERT DATA { _:a <ex:p> <ex:o> }; INSERT DATA { _:a <ex:p> <ex:o> }',\n 'Detected reuse blank node across different INSERT DATA clauses',\n ));\n\n it.skip('should throw an error on reused blank nodes across INSERT DATA clauses with GRAPH', testErroneousQuery(\n 'INSERT DATA { _:a <ex:p> <ex:o> }; INSERT DATA { GRAPH <ex:g> { _:a <ex:p> <ex:o> } }',\n 'Detected reuse blank node across different INSERT DATA clauses',\n ));\n\n it('should not throw on comment between INSERT and DATA', ({ expect }) => {\n const query = `INSERT\n# Comment\nDATA { GRAPH <ex:G> { <ex:s> <ex:p> 'o1', 'o2', 'o3' } }`;\n // TODO: add proper test\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should not throw on comment after INSERT that could be confused with DATA', ({ expect }) => {\n const query = `INSERT # DATA\nDATA { GRAPH <ex:G> { <ex:s> <ex:p> 'o1', 'o2', 'o3' } }`;\n // TODO: add proper test\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should throw an error on commented DATA after INSERT', testErroneousQuery(\n 'INSERT # DATA { GRAPH <ex:G> { <ex:s> <ex:p> \\'o1\\', \\'o2\\', \\'o3\\' } }',\n 'Parse error',\n ));\n });\n\n it('should throw an error on unicode codepoint escaping in literal with partial surrogate pair', testErroneousQuery(\n 'SELECT * WHERE { ?s <ex:p> \\'\\uD800\\' }',\n 'Invalid unicode codepoint of surrogate pair without corresponding codepoint',\n ));\n\n it(\n 'should not throw an error on unicode codepoint escaping in literal with complete surrogate pair',\n ({ expect }) => {\n const query = 'SELECT * WHERE { ?s <ex:p> \\'\\uD800\\uDFFF\\' }';\n // TODO: add proper test\n expect(parser.parse(query)).toMatchObject({});\n },\n );\n}\n"]}
1
+ {"version":3,"file":"Sparql11NotesTest.js","sourceRoot":"","sources":["../../../lib/Sparql11NotesTest.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAOtC,MAAM,UAAU,uBAAuB,CAAC,MAAc,EAAE,GAA0B;IAChF,SAAS,kBAAkB,CAAC,KAAa,EAAE,SAAiB;QAC1D,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACpB,IAAI,KAAU,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,KAAK,GAAG,CAAC,CAAC;YACZ,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACpC,6CAA6C;QAC/C,CAAC,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,2CAA2C,EAAE,kBAAkB,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAExG,EAAE,CAAC,6DAA6D,EAAE,kBAAkB,CAClF,6EAA6E,EAC7E,uCAAuC,CACxC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,kBAAkB,CAC7F,sDAAsD,EACtD,gFAAgF,CACjF,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,kBAAkB,CAC7F,kDAAkD,EAClD,+EAA+E,CAChF,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACpF,MAAM,KAAK,GAAG,+CAA+C,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,kBAAkB,CACtE,4CAA4C,EAC5C,mDAAmD,CACpD,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,kBAAkB,CACzE,sCAAsC,EACtC,mDAAmD,CACpD,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC3D,MAAM,KAAK,GAAG,oCAAoC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAChE,MAAM,KAAK,GAAG,oDAAoD,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC;YACxC,KAAK,EAAE;gBACL,QAAQ,EAAE;oBACR,EAAE,OAAO,EAAE,KAAK,EAAE;oBAClB,EAAE,OAAO,EAAE,QAAQ,EAAE;oBACrB,EAAE,OAAO,EAAE,KAAK,EAAE;iBACnB;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,kBAAkB,CAClG,iDAAiD,EACjD,mEAAmE,CACpE,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;QAEhD,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAErC,EAAE,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAExD,EAAE,CAAC,yCAAyC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YAC3D,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;QAE/C,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAE7B,EAAE,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAE1C,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAEnC,EAAE,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;IAE9E,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,EAAE,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAE9C,EAAE,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,uDAAuD,EAAE,kBAAkB,CAC5E,gEAAgE,EAChE,oCAAoC,CACrC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACpE,MAAM,KAAK,GAAG,gEAAgE,CAAC;YAC/E,wBAAwB;YACxB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,kBAAkB,CACpF,oCAAoC,EACpC,oCAAoC,CACrC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,kBAAkB,CAC/E,kCAAkC,EAClC,kCAAkC,CACnC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,kBAAkB,CACjF,mCAAmC,EACnC,oCAAoC,CACrC,CAAC,CAAC;QAEH,EAAE,CAAC,qEAAqE,EAAE,kBAAkB,CAC1F,mDAAmD,EACnD,oCAAoC,CACrC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,kBAAkB,CAC/E,kCAAkC,EAClC,kCAAkC,CACnC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACpF,MAAM,KAAK,GAAG,yDAAyD,CAAC;YACxE,wBAAwB;YACxB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE,kBAAkB,CAC7F,sEAAsE,EACtE,gEAAgE,CACjE,CAAC,CAAC;QAEH,EAAE,CAAC,mFAAmF,EAAE,kBAAkB,CACxG,uFAAuF,EACvF,gEAAgE,CACjE,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACvE,MAAM,KAAK,GAAG;;yDAEqC,CAAC;YACpD,wBAAwB;YACxB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2EAA2E,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YAC7F,MAAM,KAAK,GAAG;yDACqC,CAAC;YACpD,wBAAwB;YACxB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,kBAAkB,CAC3E,yEAAyE,EACzE,aAAa,CACd,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4FAA4F,EAAE,kBAAkB,CACjH,yCAAyC,EACzC,6EAA6E,CAC9E,CAAC,CAAC;IAEH,EAAE,CACA,iGAAiG,EACjG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACb,MAAM,KAAK,GAAG,+CAA+C,CAAC;QAC9D,wBAAwB;QACxB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC,CACF,CAAC;AACJ,CAAC","sourcesContent":["import type { BaseQuad } from '@rdfjs/types';\nimport type { DataFactory } from 'rdf-data-factory';\nimport { describe, it } from 'vitest';\nimport type { TestFunction } from 'vitest';\n\ninterface Parser {\n parse: (query: string, context?: { prefixes?: Record<string, string>; baseIRI?: string }) => unknown;\n}\n\nexport function importSparql11NoteTests(parser: Parser, _DF: DataFactory<BaseQuad>): void {\n function testErroneousQuery(query: string, _errorMsg: string): TestFunction<object> {\n return ({ expect }) => {\n let error: any;\n try {\n parser.parse(query);\n } catch (e) {\n error = e;\n }\n expect(error).not.toBeUndefined();\n expect(error).toBeInstanceOf(Error);\n // Expect(error.message).toContain(errorMsg);\n };\n }\n\n it('should throw an error on an invalid query', testErroneousQuery('invalid', 'Parse error on line 1'));\n\n it('should throw an error on a projection of ungrouped variable', testErroneousQuery(\n 'PREFIX : <http://www.example.org/> SELECT ?o WHERE { ?s ?p ?o } GROUP BY ?s',\n 'Projection of ungrouped variable (?o)',\n ));\n\n it('should throw an error on a values class with LESS variables than value', testErroneousQuery(\n 'SELECT * WHERE { } VALUES ( ?S ) { ( true false ) }',\n 'Number of dataBlockValues does not match number of variables. Too much values.',\n ));\n\n it('should throw an error on a values class with MORE variables than value', testErroneousQuery(\n 'SELECT * WHERE { } VALUES ( ?S ?O ) { ( true ) }',\n 'Number of dataBlockValues does not match number of variables. Too few values.',\n ));\n\n it('should NOT throw on a values class with correct amount of values', ({ expect }) => {\n const query = 'SELECT * WHERE { } VALUES ( ?S ) { ( true ) }';\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should throw an error on an invalid selectscope', testErroneousQuery(\n 'SELECT (1 AS ?X ) { SELECT (2 AS ?X ) {} }',\n 'Target id of \\'AS\\' (?X) already used in subquery',\n ));\n\n it('should throw an error on bind to variable in scope', testErroneousQuery(\n 'SELECT * { ?s ?p ?o BIND(?o AS ?o) }',\n 'Target id of \\'AS\\' (?X) already used in subquery',\n ));\n\n it('should parse when not ending in newline', ({ expect }) => {\n const query = 'select?s{?s?p?o}#wow, what a query';\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should preserve BGP and filter pattern order', ({ expect }) => {\n const query = 'SELECT * { ?s ?p \"1\" . FILTER(true) . ?s ?p \"2\" }';\n expect(parser.parse(query)).toMatchObject({\n where: {\n patterns: [\n { subType: 'bgp' },\n { subType: 'filter' },\n { subType: 'bgp' },\n ],\n },\n });\n });\n\n it('should throw an error on an aggregate function within an aggregate function', testErroneousQuery(\n 'SELECT (SUM(COUNT(?lprice)) AS ?totalPrice) { }',\n 'An aggregate function is not allowed within an aggregate function',\n ));\n\n describe('with pre-defined prefixes', () => {\n const prefixes = { a: 'ex:abc#', b: 'ex:def#' };\n\n it.todo('should use those prefixes');\n\n it.todo('should allow temporarily overriding prefixes');\n\n it('should not change the original prefixes', ({ expect }) => {\n expect(prefixes).toEqual({ a: 'ex:abc#', b: 'ex:def#' });\n });\n });\n\n describe('with pre-defined base IRI', () => {\n const _context = { baseIRI: 'http://ex.org/' };\n\n it.todo('contains the base');\n\n it.todo('using prefixed as relative iri');\n\n it.todo('should use the base IRI');\n\n it.todo('should work after a previous query failed');\n });\n\n it.todo('should throw an error on relative IRIs if no base IRI is specified');\n\n describe('with group collapsing disabled', () => {\n it.todo('should keep explicit pattern group');\n\n it.todo('should still collapse immediate union groups');\n });\n\n describe('for update queries', () => {\n it('should throw an error on blank nodes in DELETE clause', testErroneousQuery(\n 'DELETE { ?a <ex:knows> [] . } WHERE { ?a <ex:knows> \"Alan\" . }',\n 'Detected illegal blank node in BGP',\n ));\n\n it('should not throw on blank nodes in INSERT clause', ({ expect }) => {\n const query = 'INSERT { ?a <ex:knows> [] . } WHERE { ?a <ex:knows> \"Alan\" . }';\n // TODO: add proper test\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should throw an error on blank nodes in compact DELETE clause', testErroneousQuery(\n 'DELETE WHERE { _:a <ex:p> <ex:o> }',\n 'Detected illegal blank node in BGP',\n ));\n\n it('should throw an error on variables in DELETE DATA clause', testErroneousQuery(\n 'DELETE DATA { ?a <ex:p> <ex:o> }',\n 'Detected illegal variable in BGP',\n ));\n\n it('should throw an error on blank nodes in DELETE DATA clause', testErroneousQuery(\n 'DELETE DATA { _:a <ex:p> <ex:o> }',\n 'Detected illegal blank node in BGP',\n ));\n\n it('should throw an error on variables in DELETE DATA clause with GRAPH', testErroneousQuery(\n 'DELETE DATA { GRAPH ?a { <ex:s> <ex:p> <ex:o> } }',\n 'Detected illegal variable in GRAPH',\n ));\n\n it('should throw an error on variables in INSERT DATA clause', testErroneousQuery(\n 'INSERT DATA { ?a <ex:p> <ex:o> }',\n 'Detected illegal variable in BGP',\n ));\n\n it('should not throw on reused blank nodes in one INSERT DATA clause', ({ expect }) => {\n const query = 'INSERT DATA { _:a <ex:p> <ex:o> . _:a <ex:p> <ex:o> . }';\n // Todo: add proper test\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should throw an error on reused blank nodes across INSERT DATA clauses', testErroneousQuery(\n 'INSERT DATA { _:a <ex:p> <ex:o> }; INSERT DATA { _:a <ex:p> <ex:o> }',\n 'Detected reuse blank node across different INSERT DATA clauses',\n ));\n\n it('should throw an error on reused blank nodes across INSERT DATA clauses with GRAPH', testErroneousQuery(\n 'INSERT DATA { _:a <ex:p> <ex:o> }; INSERT DATA { GRAPH <ex:g> { _:a <ex:p> <ex:o> } }',\n 'Detected reuse blank node across different INSERT DATA clauses',\n ));\n\n it('should not throw on comment between INSERT and DATA', ({ expect }) => {\n const query = `INSERT\n# Comment\nDATA { GRAPH <ex:G> { <ex:s> <ex:p> 'o1', 'o2', 'o3' } }`;\n // TODO: add proper test\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should not throw on comment after INSERT that could be confused with DATA', ({ expect }) => {\n const query = `INSERT # DATA\nDATA { GRAPH <ex:G> { <ex:s> <ex:p> 'o1', 'o2', 'o3' } }`;\n // TODO: add proper test\n expect(parser.parse(query)).toMatchObject({});\n });\n\n it('should throw an error on commented DATA after INSERT', testErroneousQuery(\n 'INSERT # DATA { GRAPH <ex:G> { <ex:s> <ex:p> \\'o1\\', \\'o2\\', \\'o3\\' } }',\n 'Parse error',\n ));\n });\n\n it('should throw an error on unicode codepoint escaping in literal with partial surrogate pair', testErroneousQuery(\n 'SELECT * WHERE { ?s <ex:p> \\'\\uD800\\' }',\n 'Invalid unicode codepoint of surrogate pair without corresponding codepoint',\n ));\n\n it(\n 'should not throw an error on unicode codepoint escaping in literal with complete surrogate pair',\n ({ expect }) => {\n const query = 'SELECT * WHERE { ?s <ex:p> \\'\\uD800\\uDFFF\\' }';\n // TODO: add proper test\n expect(parser.parse(query)).toMatchObject({});\n },\n );\n}\n"]}
@@ -60,22 +60,20 @@ export function* sparqlAlgebraNegativeTests(suite, filter) {
60
60
  const astDir = getStaticFilePath('algebra');
61
61
  const sparqlDir = join(astDir, 'sparql', suite);
62
62
  const statics = readdirSync(sparqlDir);
63
- for (const file of statics) {
64
- if (file.endsWith('.sparql')) {
65
- if (filter && !filter(file.replace('.sparql', ''))) {
66
- continue;
67
- }
68
- const name = file.replace(/\.sparql$/u, '');
69
- yield {
70
- name,
71
- statics: async () => {
72
- const query = await readFile(join(sparqlDir, file));
73
- return {
74
- query,
75
- };
76
- },
77
- };
63
+ for (const file of statics.filter(f => f.endsWith('.sparql'))) {
64
+ if (filter && !filter(file.replace('.sparql', ''))) {
65
+ continue;
78
66
  }
67
+ const name = file.replace(/\.sparql$/u, '');
68
+ yield {
69
+ name,
70
+ statics: async () => {
71
+ const query = await readFile(join(sparqlDir, file));
72
+ return {
73
+ query,
74
+ };
75
+ },
76
+ };
79
77
  }
80
78
  }
81
79
  //# sourceMappingURL=algebraGenerators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"algebraGenerators.js","sourceRoot":"","sources":["../../../../lib/generators/algebraGenerators.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-nodejs-modules */\nimport { lstatSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { readFile, readFileSync } from '../fileUtils.js';\nimport type { NegativeTest } from './generators.js';\nimport { getStaticFilePath } from './utils.js';\n\nconst rootDir = getStaticFilePath('algebra');\nconst rootSparql = join(rootDir, 'sparql');\nconst rootJson = join(rootDir, 'algebra');\nconst rootJsonBlankToVariable = join(rootDir, 'algebra-blank-to-var');\n\nexport interface algebraTestGen {\n name: string;\n json: unknown;\n quads: boolean;\n sparql: string | undefined;\n}\n\nexport type AlgebraTestSuite = 'dawg-syntax' | 'sparql-1.1' | 'sparql11-query' | 'sparql12';\n\nexport function sparqlAlgebraTests(suites: AlgebraTestSuite, blankToVariable: boolean, getSPARQL: true):\nGenerator<algebraTestGen & { sparql: string }>;\nexport function sparqlAlgebraTests(suites: AlgebraTestSuite, blankToVariable: boolean, getSPARQL: boolean):\nGenerator<algebraTestGen>;\nexport function* sparqlAlgebraTests(suite: AlgebraTestSuite, blankToVariable: boolean, getSPARQL: boolean):\nGenerator<algebraTestGen> {\n // Relative path starting from roots declared above.\n function* subGen(relativePath: string): Generator<algebraTestGen> {\n const absolutePath = join(blankToVariable ? rootJsonBlankToVariable : rootJson, relativePath);\n if (lstatSync(absolutePath).isDirectory()) {\n // Recursion\n for (const sub of readdirSync(absolutePath)) {\n yield* subGen(join(relativePath, sub));\n }\n } else {\n const name = relativePath.replace(/\\.json$/u, '');\n const sparqlPath = join(rootSparql, relativePath.replace(/\\.json/u, '.sparql'));\n yield {\n name,\n json: JSON.parse(readFileSync(absolutePath)),\n sparql: getSPARQL ? readFileSync(sparqlPath, 'utf8') : undefined,\n quads: name.endsWith('-quads'),\n };\n }\n }\n\n const subfolders = readdirSync(blankToVariable ? rootJsonBlankToVariable : rootJson);\n if (subfolders.includes(suite)) {\n yield* subGen(suite);\n }\n}\n\ntype GenQuery = { query: string; name: string };\nexport function* sparqlQueries(suite: AlgebraTestSuite): Generator<GenQuery> {\n function* subGen(relativePath: string): Generator<GenQuery> {\n const absolutePath = join(rootSparql, relativePath);\n if (lstatSync(absolutePath).isDirectory()) {\n // Recursion\n for (const sub of readdirSync(absolutePath)) {\n yield* subGen(join(relativePath, sub));\n }\n } else {\n const name = relativePath.replace(/\\.sparql$/u, '');\n const content = readFileSync(absolutePath, 'utf-8');\n yield {\n name,\n query: content.replaceAll(/\\r?\\n/gu, '\\n'),\n };\n }\n }\n\n const subfolders = readdirSync(rootSparql);\n if (subfolders.includes(suite)) {\n yield* subGen(suite);\n }\n}\n\nexport type NegativeAlgebraSuite = 'sparql-1.1-negative' | 'sparql-1.2-negative';\n\nexport function* sparqlAlgebraNegativeTests(\n suite: NegativeAlgebraSuite,\n filter?: (name: string) => boolean,\n): Generator<NegativeTest> {\n const astDir = getStaticFilePath('algebra');\n const sparqlDir = join(astDir, 'sparql', suite);\n const statics = readdirSync(sparqlDir);\n for (const file of statics) {\n if (file.endsWith('.sparql')) {\n if (filter && !filter(file.replace('.sparql', ''))) {\n continue;\n }\n const name = file.replace(/\\.sparql$/u, '');\n yield {\n name,\n statics: async() => {\n const query = await readFile(join(sparqlDir, file));\n return {\n query,\n };\n },\n };\n }\n }\n}\n"]}
1
+ {"version":3,"file":"algebraGenerators.js","sourceRoot":"","sources":["../../../../lib/generators/algebraGenerators.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-nodejs-modules */\nimport { lstatSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { readFile, readFileSync } from '../fileUtils.js';\nimport type { NegativeTest } from './generators.js';\nimport { getStaticFilePath } from './utils.js';\n\nconst rootDir = getStaticFilePath('algebra');\nconst rootSparql = join(rootDir, 'sparql');\nconst rootJson = join(rootDir, 'algebra');\nconst rootJsonBlankToVariable = join(rootDir, 'algebra-blank-to-var');\n\nexport interface algebraTestGen {\n name: string;\n json: unknown;\n quads: boolean;\n sparql: string | undefined;\n}\n\nexport type AlgebraTestSuite = 'dawg-syntax' | 'sparql-1.1' | 'sparql11-query' | 'sparql12';\n\nexport function sparqlAlgebraTests(suites: AlgebraTestSuite, blankToVariable: boolean, getSPARQL: true):\nGenerator<algebraTestGen & { sparql: string }>;\nexport function sparqlAlgebraTests(suites: AlgebraTestSuite, blankToVariable: boolean, getSPARQL: boolean):\nGenerator<algebraTestGen>;\nexport function* sparqlAlgebraTests(suite: AlgebraTestSuite, blankToVariable: boolean, getSPARQL: boolean):\nGenerator<algebraTestGen> {\n // Relative path starting from roots declared above.\n function* subGen(relativePath: string): Generator<algebraTestGen> {\n const absolutePath = join(blankToVariable ? rootJsonBlankToVariable : rootJson, relativePath);\n if (lstatSync(absolutePath).isDirectory()) {\n // Recursion\n for (const sub of readdirSync(absolutePath)) {\n yield* subGen(join(relativePath, sub));\n }\n } else {\n const name = relativePath.replace(/\\.json$/u, '');\n const sparqlPath = join(rootSparql, relativePath.replace(/\\.json/u, '.sparql'));\n yield {\n name,\n json: JSON.parse(readFileSync(absolutePath)),\n sparql: getSPARQL ? readFileSync(sparqlPath, 'utf8') : undefined,\n quads: name.endsWith('-quads'),\n };\n }\n }\n\n const subfolders = readdirSync(blankToVariable ? rootJsonBlankToVariable : rootJson);\n if (subfolders.includes(suite)) {\n yield* subGen(suite);\n }\n}\n\ntype GenQuery = { query: string; name: string };\nexport function* sparqlQueries(suite: AlgebraTestSuite): Generator<GenQuery> {\n function* subGen(relativePath: string): Generator<GenQuery> {\n const absolutePath = join(rootSparql, relativePath);\n if (lstatSync(absolutePath).isDirectory()) {\n // Recursion\n for (const sub of readdirSync(absolutePath)) {\n yield* subGen(join(relativePath, sub));\n }\n } else {\n const name = relativePath.replace(/\\.sparql$/u, '');\n const content = readFileSync(absolutePath, 'utf-8');\n yield {\n name,\n query: content.replaceAll(/\\r?\\n/gu, '\\n'),\n };\n }\n }\n\n const subfolders = readdirSync(rootSparql);\n if (subfolders.includes(suite)) {\n yield* subGen(suite);\n }\n}\n\nexport type NegativeAlgebraSuite = 'sparql-1.1-negative' | 'sparql-1.2-negative';\n\nexport function* sparqlAlgebraNegativeTests(\n suite: NegativeAlgebraSuite,\n filter?: (name: string) => boolean,\n): Generator<NegativeTest> {\n const astDir = getStaticFilePath('algebra');\n const sparqlDir = join(astDir, 'sparql', suite);\n const statics = readdirSync(sparqlDir);\n for (const file of statics.filter(f => f.endsWith('.sparql'))) {\n if (filter && !filter(file.replace('.sparql', ''))) {\n continue;\n }\n const name = file.replace(/\\.sparql$/u, '');\n yield {\n name,\n statics: async() => {\n const query = await readFile(join(sparqlDir, file));\n return {\n query,\n };\n },\n };\n }\n}\n"]}
@@ -52,23 +52,21 @@ export function* positiveTest(type, filter) {
52
52
  export function* negativeTest(type, filter) {
53
53
  const astDir = getStaticFilePath('ast');
54
54
  const sparqlGeneratedDir = join(astDir, 'sparql', type);
55
- const statics = readdirSync(sparqlGeneratedDir);
55
+ const statics = readdirSync(sparqlGeneratedDir).filter(f => f.endsWith('.sparql'));
56
56
  for (const file of statics) {
57
- if (file.endsWith('.sparql')) {
58
- if (filter && !filter(file.replace('.sparql', ''))) {
59
- continue;
60
- }
61
- const name = file.replace(/\.sparql$/u, '');
62
- yield {
63
- name,
64
- statics: async () => {
65
- const query = await readFile(join(sparqlGeneratedDir, file));
66
- return {
67
- query,
68
- };
69
- },
70
- };
57
+ if (filter && !filter(file.replace('.sparql', ''))) {
58
+ continue;
71
59
  }
60
+ const name = file.replace(/\.sparql$/u, '');
61
+ yield {
62
+ name,
63
+ statics: async () => {
64
+ const query = await readFile(join(sparqlGeneratedDir, file));
65
+ return {
66
+ query,
67
+ };
68
+ },
69
+ };
72
70
  }
73
71
  }
74
72
  //# sourceMappingURL=generators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generators.js","sourceRoot":"","sources":["../../../../lib/generators/generators.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-nodejs-modules */\nimport { readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { readFile } from '../fileUtils.js';\nimport { getStaticFilePath } from './utils.js';\n\ninterface PositiveTest {\n name: string;\n statics: () => Promise<{\n query: string;\n astWithSource: unknown;\n astNoSource: unknown;\n autoGen: string;\n autoGenCompact: string;\n }>;\n}\n\nexport function* positiveTest(\n type: 'paths' | 'sparql-1-1' | 'sparql-1-2',\n filter?: (name: string) => boolean,\n): Generator<PositiveTest> {\n const astDir = getStaticFilePath('ast');\n const jsonSourceTrackedDir = join(astDir, 'ast-source-tracked', type);\n const jsonNonSourceTrackedDir = join(astDir, 'ast-no-source-tracked', type);\n const sparqlDir = join(astDir, 'sparql', type);\n const sparqlGeneratedDir = join(astDir, 'sparql-generated', type);\n const sparqlGenCompactDir = join(astDir, 'sparql-generated-compact', type);\n const statics = readdirSync(jsonSourceTrackedDir);\n for (const file of statics) {\n if (filter && !filter(file.replace('.json', ''))) {\n continue;\n }\n const name = file.replace(/\\.json$/u, '');\n yield {\n name,\n statics: async() => {\n const query = await readFile(join(sparqlDir, `${name}.sparql`));\n const sourceTracked = await readFile(join(jsonSourceTrackedDir, file));\n let noSourceTracked: string;\n try {\n noSourceTracked = await readFile(join(jsonNonSourceTrackedDir, file));\n } catch {\n noSourceTracked = '{}';\n }\n let autoGen = '';\n try {\n autoGen = await readFile(join(sparqlGeneratedDir, `${name}.sparql`));\n } catch { /* Already initialized */ }\n let autoGenCompact = '';\n try {\n autoGenCompact = await readFile(join(sparqlGenCompactDir, `${name}.sparql`));\n } catch { /* Already initialized */ }\n return {\n query,\n astWithSource: JSON.parse(sourceTracked),\n astNoSource: JSON.parse(noSourceTracked),\n autoGen,\n autoGenCompact,\n };\n },\n };\n }\n}\n\nexport interface NegativeTest {\n name: string;\n statics: () => Promise<{\n query: string;\n }>;\n}\n\nexport function* negativeTest(\n type: 'sparql-1-1-invalid' | 'sparql-1-2-invalid',\n filter?: (name: string) => boolean,\n): Generator<NegativeTest> {\n const astDir = getStaticFilePath('ast');\n const sparqlGeneratedDir = join(astDir, 'sparql', type);\n const statics = readdirSync(sparqlGeneratedDir);\n for (const file of statics) {\n if (file.endsWith('.sparql')) {\n if (filter && !filter(file.replace('.sparql', ''))) {\n continue;\n }\n const name = file.replace(/\\.sparql$/u, '');\n yield {\n name,\n statics: async() => {\n const query = await readFile(join(sparqlGeneratedDir, file));\n return {\n query,\n };\n },\n };\n }\n }\n}\n"]}
1
+ {"version":3,"file":"generators.js","sourceRoot":"","sources":["../../../../lib/generators/generators.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-nodejs-modules */\nimport { readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { readFile } from '../fileUtils.js';\nimport { getStaticFilePath } from './utils.js';\n\ninterface PositiveTest {\n name: string;\n statics: () => Promise<{\n query: string;\n astWithSource: unknown;\n astNoSource: unknown;\n autoGen: string;\n autoGenCompact: string;\n }>;\n}\n\nexport function* positiveTest(\n type: 'paths' | 'sparql-1-1' | 'sparql-1-2',\n filter?: (name: string) => boolean,\n): Generator<PositiveTest> {\n const astDir = getStaticFilePath('ast');\n const jsonSourceTrackedDir = join(astDir, 'ast-source-tracked', type);\n const jsonNonSourceTrackedDir = join(astDir, 'ast-no-source-tracked', type);\n const sparqlDir = join(astDir, 'sparql', type);\n const sparqlGeneratedDir = join(astDir, 'sparql-generated', type);\n const sparqlGenCompactDir = join(astDir, 'sparql-generated-compact', type);\n const statics = readdirSync(jsonSourceTrackedDir);\n for (const file of statics) {\n if (filter && !filter(file.replace('.json', ''))) {\n continue;\n }\n const name = file.replace(/\\.json$/u, '');\n yield {\n name,\n statics: async() => {\n const query = await readFile(join(sparqlDir, `${name}.sparql`));\n const sourceTracked = await readFile(join(jsonSourceTrackedDir, file));\n let noSourceTracked: string;\n try {\n noSourceTracked = await readFile(join(jsonNonSourceTrackedDir, file));\n } catch {\n noSourceTracked = '{}';\n }\n let autoGen = '';\n try {\n autoGen = await readFile(join(sparqlGeneratedDir, `${name}.sparql`));\n } catch { /* Already initialized */ }\n let autoGenCompact = '';\n try {\n autoGenCompact = await readFile(join(sparqlGenCompactDir, `${name}.sparql`));\n } catch { /* Already initialized */ }\n return {\n query,\n astWithSource: JSON.parse(sourceTracked),\n astNoSource: JSON.parse(noSourceTracked),\n autoGen,\n autoGenCompact,\n };\n },\n };\n }\n}\n\nexport interface NegativeTest {\n name: string;\n statics: () => Promise<{\n query: string;\n }>;\n}\n\nexport function* negativeTest(\n type: 'sparql-1-1-invalid' | 'sparql-1-2-invalid',\n filter?: (name: string) => boolean,\n): Generator<NegativeTest> {\n const astDir = getStaticFilePath('ast');\n const sparqlGeneratedDir = join(astDir, 'sparql', type);\n const statics = readdirSync(sparqlGeneratedDir).filter(f => f.endsWith('.sparql'));\n for (const file of statics) {\n if (filter && !filter(file.replace('.sparql', ''))) {\n continue;\n }\n const name = file.replace(/\\.sparql$/u, '');\n yield {\n name,\n statics: async() => {\n const query = await readFile(join(sparqlGeneratedDir, file));\n return {\n query,\n };\n },\n };\n }\n}\n"]}
@@ -1,7 +1,8 @@
1
1
  /* eslint-disable import/no-nodejs-modules */
2
2
  import path from 'node:path';
3
- // Note that this path is correct AFTER tsc conversion
4
- const staticsPath = path.join(__dirname, '..', '..', '..', '..', 'statics');
3
+ // Path.resolve() returns process.cwd() the monorepo root when running via vitest.
4
+ // This avoids __dirname (CJS-only) and import.meta.url (ESM-only).
5
+ const staticsPath = path.resolve('packages/test-utils/statics');
5
6
  export function getStaticFilePath(...paths) {
6
7
  return path.join(staticsPath, ...paths);
7
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../lib/generators/utils.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,sDAAsD;AACtD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAE5E,MAAM,UAAU,iBAAiB,CAAC,GAAG,KAAe;IAClD,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC;AAC1C,CAAC","sourcesContent":["/* eslint-disable import/no-nodejs-modules */\nimport path from 'node:path';\n\n// Note that this path is correct AFTER tsc conversion\nconst staticsPath = path.join(__dirname, '..', '..', '..', '..', 'statics');\n\nexport function getStaticFilePath(...paths: string[]): string {\n return path.join(staticsPath, ...paths);\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../lib/generators/utils.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,oFAAoF;AACpF,mEAAmE;AACnE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAEhE,MAAM,UAAU,iBAAiB,CAAC,GAAG,KAAe;IAClD,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC;AAC1C,CAAC","sourcesContent":["/* eslint-disable import/no-nodejs-modules */\nimport path from 'node:path';\n\n// Path.resolve() returns process.cwd() the monorepo root when running via vitest.\n// This avoids __dirname (CJS-only) and import.meta.url (ESM-only).\nconst staticsPath = path.resolve('packages/test-utils/statics');\n\nexport function getStaticFilePath(...paths: string[]): string {\n return path.join(staticsPath, ...paths);\n}\n"]}
@@ -10,7 +10,7 @@ expect.extend({
10
10
  const diffString = this.utils.diff(expected, received, {
11
11
  expand: this.expand,
12
12
  });
13
- return (`${this.utils.matcherHint('toEqualParsedQuery')}\n\n${diffString && diffString.includes('- Expect') ?
13
+ return (`${this.utils.matcherHint('toEqualParsedQuery')}\n\n${diffString ?
14
14
  `Difference:\n\n${diffString}` :
15
15
  `Expected: ${this.utils.printExpected(expected)}\n` +
16
16
  `Received: ${this.utils.printReceived(received)}`}`);
@@ -27,7 +27,7 @@ expect.extend({
27
27
  const diffString = this.utils.diff(expected, received, {
28
28
  expand: this.expand,
29
29
  });
30
- return (`${this.utils.matcherHint('toEqualParsedQuery')}\n\n${diffString && diffString.includes('- Expect') ?
30
+ return (`${this.utils.matcherHint('toEqualParsedQuery')}\n\n${diffString ?
31
31
  `Difference:\n\n${diffString}` :
32
32
  `Expected: ${this.utils.printExpected(expected)}\n` +
33
33
  `Received: ${this.utils.printReceived(received)}`}`);
@@ -96,7 +96,7 @@ function objectsEqual(received, expected, selector, ignoreKeys) {
96
96
  }
97
97
  // If true, the value is a term. With ts annotation
98
98
  function isTerm(value) {
99
- return false;
99
+ return typeof value === 'object' && value !== null && 'termType' in value && 'equals' in value;
100
100
  }
101
101
  function isPrimitive(value) {
102
102
  return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
@@ -1 +1 @@
1
- {"version":3,"file":"toEqualParsedQuery.js","sourceRoot":"","sources":["../../../../lib/matchers/toEqualParsedQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,CAAC,MAAM,CAAC;IACZ,kBAAkB,CAAC,QAAiB,EAAE,QAAiB;QACrD,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC;YAClB,GAAG,EAAE,CACH,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAChD,MAAM;gBACN,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI;gBACnD,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACnD,GAAG,EAAE;gBACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE;oBACrD,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC,CAAC;gBACH,OAAO,CACL,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAChD,OACA,UAAU,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;oBAC7C,kBAAkB,UAAU,EAAE,CAAC,CAAC;oBAChC,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI;wBACnD,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,CACpD,CAAC;YACJ,CAAC,CAAC;QAEN,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,0BAA0B,CACxB,QAAiB,EACjB,QAAkC,EAClC,UAAoB,EACpB,QAAiB;QAEjB,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC;YAClB,GAAG,EAAE,CACL,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAC9C,MAAM;gBACN,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI;gBACnD,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACnD,GAAG,EAAE;gBACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE;oBACrD,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC,CAAC;gBACH,OAAO,CACP,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAC9C,OACE,UAAU,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;oBAC7C,kBAAkB,UAAU,EAAE,CAAC,CAAC;oBAChC,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI;wBACnD,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,CACtD,CAAC;YACJ,CAAC,CAAC;QAEN,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC;AAEH,sEAAsE;AACtE,SAAS,YAAY,CACnB,QAAiB,EACjB,QAAiB,EACjB,QAAkC,EAClC,UAAoB;IAEpB,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzE,OAAO,QAAQ,KAAK,QAAQ,CAAC;IAC/B,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrB,6CAA6C;QAC7C,0BAA0B;QAC1B,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrB,6CAA6C;QAC7C,0BAA0B;QAC1B,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,QAAQ;IACR,OAAO;IACP,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,MAAM,CAAE,CAAC,EAAE,OAAO,CAAE,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YAChD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;gBAC9D,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,qBAAqB;QACrB,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpG,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE3C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,IAAI,eAAe,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChD,SAAS;YACX,CAAC;YACD,6CAA6C;YAC7C,0BAA0B;YAC1B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;gBACtE,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,8EAA8E;QAC9E,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,6CAA6C;YAC7C,0BAA0B;YAC1B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;gBACtE,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,mDAAmD;AACnD,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,CAAC;AAC9F,CAAC","sourcesContent":["import { expect } from 'vitest';\n\nexpect.extend({\n toEqualParsedQuery(received: unknown, expected: unknown) {\n const pass = objectsEqual(received, expected, () => false, []);\n const message = pass ?\n () =>\n `${this.utils.matcherHint('toEqualParsedQuery')\n }\\n\\n` +\n `Expected: ${this.utils.printExpected(expected)}\\n` +\n `Received: ${this.utils.printReceived(received)}` :\n () => {\n const diffString = this.utils.diff(expected, received, {\n expand: this.expand,\n });\n return (\n `${this.utils.matcherHint('toEqualParsedQuery')\n }\\n\\n${\n diffString && diffString.includes('- Expect') ?\n `Difference:\\n\\n${diffString}` :\n `Expected: ${this.utils.printExpected(expected)}\\n` +\n `Received: ${this.utils.printReceived(received)}`}`\n );\n };\n\n return { pass, message };\n },\n toEqualParsedQueryIgnoring(\n received: unknown,\n selector: (obj: object) => boolean,\n ignoreKeys: string[],\n expected: unknown,\n ) {\n const pass = objectsEqual(received, expected, selector, ignoreKeys);\n const message = pass ?\n () =>\n `${this.utils.matcherHint('toEqualParsedQuery')\n }\\n\\n` +\n `Expected: ${this.utils.printExpected(expected)}\\n` +\n `Received: ${this.utils.printReceived(received)}` :\n () => {\n const diffString = this.utils.diff(expected, received, {\n expand: this.expand,\n });\n return (\n `${this.utils.matcherHint('toEqualParsedQuery')\n }\\n\\n${\n diffString && diffString.includes('- Expect') ?\n `Difference:\\n\\n${diffString}` :\n `Expected: ${this.utils.printExpected(expected)}\\n` +\n `Received: ${this.utils.printReceived(received)}`}`\n );\n };\n\n return { pass, message };\n },\n});\n\n// We cannot use native instanceOf to test whether expected is a Term!\nfunction objectsEqual(\n received: unknown,\n expected: unknown,\n selector: (obj: object) => boolean,\n ignoreKeys: string[],\n): boolean {\n if (received === undefined || received === null || isPrimitive(received)) {\n return received === expected;\n }\n\n if (isTerm(received)) {\n // eslint-disable-next-line ts/ban-ts-comment\n // @ts-expect-error TS2345\n return received.equals(expected);\n }\n if (isTerm(expected)) {\n // eslint-disable-next-line ts/ban-ts-comment\n // @ts-expect-error TS2345\n return expected.equals(received);\n }\n // York\n // test\n if (Array.isArray(received)) {\n if (!Array.isArray(expected)) {\n return false;\n }\n if (received.length !== expected.length) {\n return false;\n }\n for (const [ i, element ] of received.entries()) {\n if (!objectsEqual(element, expected[i], selector, ignoreKeys)) {\n return false;\n }\n }\n } else {\n // Received == object\n if (expected === undefined || expected === null || isPrimitive(expected) || Array.isArray(expected)) {\n return false;\n }\n const keys_first = Object.keys(received);\n const receivedMatches = selector(received);\n\n for (const key of keys_first) {\n if (receivedMatches && ignoreKeys.includes(key)) {\n continue;\n }\n // eslint-disable-next-line ts/ban-ts-comment\n // @ts-expect-error TS7053\n if (!objectsEqual(received[key], expected[key], selector, ignoreKeys)) {\n return false;\n }\n }\n\n // We do this to make sure that we are not missing keys in the received object\n const keys_second = Object.keys(expected);\n for (const key of keys_second) {\n // eslint-disable-next-line ts/ban-ts-comment\n // @ts-expect-error TS7053\n if (!objectsEqual(received[key], expected[key], selector, ignoreKeys)) {\n return false;\n }\n }\n }\n return true;\n}\n\n// If true, the value is a term. With ts annotation\nfunction isTerm(value: unknown): value is { equals: (other: { termType: unknown } | undefined | null) => boolean } {\n return false;\n}\n\nfunction isPrimitive(value: unknown): value is string | number | boolean {\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';\n}\n"]}
1
+ {"version":3,"file":"toEqualParsedQuery.js","sourceRoot":"","sources":["../../../../lib/matchers/toEqualParsedQuery.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from 'vitest';\n\nexpect.extend({\n toEqualParsedQuery(received: unknown, expected: unknown) {\n const pass = objectsEqual(received, expected, () => false, []);\n const message = pass ?\n () =>\n `${this.utils.matcherHint('toEqualParsedQuery')\n }\\n\\n` +\n `Expected: ${this.utils.printExpected(expected)}\\n` +\n `Received: ${this.utils.printReceived(received)}` :\n () => {\n const diffString = this.utils.diff(expected, received, {\n expand: this.expand,\n });\n return (\n `${this.utils.matcherHint('toEqualParsedQuery')\n }\\n\\n${\n diffString ?\n `Difference:\\n\\n${diffString}` :\n `Expected: ${this.utils.printExpected(expected)}\\n` +\n `Received: ${this.utils.printReceived(received)}`}`\n );\n };\n\n return { pass, message };\n },\n toEqualParsedQueryIgnoring(\n received: unknown,\n selector: (obj: object) => boolean,\n ignoreKeys: string[],\n expected: unknown,\n ) {\n const pass = objectsEqual(received, expected, selector, ignoreKeys);\n const message = pass ?\n () =>\n `${this.utils.matcherHint('toEqualParsedQuery')\n }\\n\\n` +\n `Expected: ${this.utils.printExpected(expected)}\\n` +\n `Received: ${this.utils.printReceived(received)}` :\n () => {\n const diffString = this.utils.diff(expected, received, {\n expand: this.expand,\n });\n return (\n `${this.utils.matcherHint('toEqualParsedQuery')\n }\\n\\n${\n diffString ?\n `Difference:\\n\\n${diffString}` :\n `Expected: ${this.utils.printExpected(expected)}\\n` +\n `Received: ${this.utils.printReceived(received)}`}`\n );\n };\n\n return { pass, message };\n },\n});\n\n// We cannot use native instanceOf to test whether expected is a Term!\nfunction objectsEqual(\n received: unknown,\n expected: unknown,\n selector: (obj: object) => boolean,\n ignoreKeys: string[],\n): boolean {\n if (received === undefined || received === null || isPrimitive(received)) {\n return received === expected;\n }\n\n if (isTerm(received)) {\n // eslint-disable-next-line ts/ban-ts-comment\n // @ts-expect-error TS2345\n return received.equals(expected);\n }\n if (isTerm(expected)) {\n // eslint-disable-next-line ts/ban-ts-comment\n // @ts-expect-error TS2345\n return expected.equals(received);\n }\n // York\n // test\n if (Array.isArray(received)) {\n if (!Array.isArray(expected)) {\n return false;\n }\n if (received.length !== expected.length) {\n return false;\n }\n for (const [ i, element ] of received.entries()) {\n if (!objectsEqual(element, expected[i], selector, ignoreKeys)) {\n return false;\n }\n }\n } else {\n // Received == object\n if (expected === undefined || expected === null || isPrimitive(expected) || Array.isArray(expected)) {\n return false;\n }\n const keys_first = Object.keys(received);\n const receivedMatches = selector(received);\n\n for (const key of keys_first) {\n if (receivedMatches && ignoreKeys.includes(key)) {\n continue;\n }\n // eslint-disable-next-line ts/ban-ts-comment\n // @ts-expect-error TS7053\n if (!objectsEqual(received[key], expected[key], selector, ignoreKeys)) {\n return false;\n }\n }\n\n // We do this to make sure that we are not missing keys in the received object\n const keys_second = Object.keys(expected);\n for (const key of keys_second) {\n // eslint-disable-next-line ts/ban-ts-comment\n // @ts-expect-error TS7053\n if (!objectsEqual(received[key], expected[key], selector, ignoreKeys)) {\n return false;\n }\n }\n }\n return true;\n}\n\n// If true, the value is a term. With ts annotation\nfunction isTerm(value: unknown): value is { equals: (other: { termType: unknown } | undefined | null) => boolean } {\n return typeof value === 'object' && value !== null && 'termType' in value && 'equals' in value;\n}\n\nfunction isPrimitive(value: unknown): value is string | number | boolean {\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@traqula/test-utils",
3
3
  "type": "module",
4
- "version": "1.0.4",
4
+ "version": "1.0.6-alpha.0",
5
5
  "description": "Test utils used by the Traqula monorepo",
6
6
  "lsd:module": true,
7
7
  "license": "MIT",
@@ -44,10 +44,10 @@
44
44
  },
45
45
  "dependencies": {
46
46
  "rdf-data-factory": "^2.0.1",
47
- "vitest": "^4.0.18"
47
+ "vitest": "^4.1.3"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@rdfjs/types": "^2.0.0"
51
51
  },
52
- "gitHead": "c00a5a57a5677e1c74e573373a183602493b6868"
52
+ "gitHead": "a16a69211af2e4e126dbeaa263c05923820a6ed0"
53
53
  }
@@ -0,0 +1,44 @@
1
+ {
2
+ "type": "project",
3
+ "input": {
4
+ "type": "bgp",
5
+ "patterns": [
6
+ {
7
+ "type": "pattern",
8
+ "termType": "Quad",
9
+ "subject": {
10
+ "termType": "Variable",
11
+ "value": "s"
12
+ },
13
+ "predicate": {
14
+ "termType": "Variable",
15
+ "value": "p"
16
+ },
17
+ "object": {
18
+ "termType": "Literal",
19
+ "value": "مرحبا",
20
+ "language": "ar",
21
+ "direction": "rtl",
22
+ "datatype": {
23
+ "termType": "NamedNode",
24
+ "value": "http://www.w3.org/1999/02/22-rdf-syntax-ns#dirLangString"
25
+ }
26
+ },
27
+ "graph": {
28
+ "termType": "DefaultGraph",
29
+ "value": ""
30
+ }
31
+ }
32
+ ]
33
+ },
34
+ "variables": [
35
+ {
36
+ "termType": "Variable",
37
+ "value": "p"
38
+ },
39
+ {
40
+ "termType": "Variable",
41
+ "value": "s"
42
+ }
43
+ ]
44
+ }