@traqula/test-utils 0.0.24 → 1.0.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.
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Traqula Test utils
2
2
 
3
+ [![npm version](https://badge.fury.io/js/@traqula%2Ftest-utils.svg)](https://www.npmjs.com/package/@traqula/test-utils)
4
+
3
5
  Traqula test utils contains some developer dependencies for testing packages and engines from the Traqula project.
4
6
 
5
7
  ## Installation
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.importSparql11NoteTests = importSparql11NoteTests;
4
4
  const vitest_1 = require("vitest");
5
- function importSparql11NoteTests(parser, dataFactory) {
5
+ function importSparql11NoteTests(parser, DF) {
6
6
  function testErroneousQuery(query, _errorMsg) {
7
7
  return ({ expect }) => {
8
8
  let error;
@@ -53,9 +53,9 @@ function importSparql11NoteTests(parser, dataFactory) {
53
53
  {
54
54
  triples: [
55
55
  {
56
- subject: dataFactory.namedNode('ex:abc#a'),
57
- predicate: dataFactory.namedNode('ex:def#b'),
58
- object: dataFactory.literal(''),
56
+ subject: DF.namedNode('ex:abc#a'),
57
+ predicate: DF.namedNode('ex:def#b'),
58
+ object: DF.literal(''),
59
59
  },
60
60
  ],
61
61
  },
@@ -67,9 +67,9 @@ function importSparql11NoteTests(parser, dataFactory) {
67
67
  expect(parser.parse(query, { prefixes })).toMatchObject({
68
68
  where: [{
69
69
  triples: [{
70
- subject: dataFactory.namedNode('ex:xyz#a'),
71
- predicate: dataFactory.namedNode('ex:def#b'),
72
- object: dataFactory.literal(''),
70
+ subject: DF.namedNode('ex:xyz#a'),
71
+ predicate: DF.namedNode('ex:def#b'),
72
+ object: DF.literal(''),
73
73
  }],
74
74
  },
75
75
  ],
@@ -78,9 +78,9 @@ function importSparql11NoteTests(parser, dataFactory) {
78
78
  expect(parser.parse(query2, { prefixes })).toMatchObject({
79
79
  where: [{
80
80
  triples: [{
81
- subject: dataFactory.namedNode('ex:abc#a'),
82
- predicate: dataFactory.namedNode('ex:def#b'),
83
- object: dataFactory.literal(''),
81
+ subject: DF.namedNode('ex:abc#a'),
82
+ predicate: DF.namedNode('ex:def#b'),
83
+ object: DF.literal(''),
84
84
  }],
85
85
  },
86
86
  ],
@@ -108,7 +108,7 @@ WHERE { ?s ?p ?o }
108
108
  expect(parser.parse(query, context)).toMatchObject({
109
109
  from: {
110
110
  default: [
111
- dataFactory.namedNode('http://ex.org/data.ttl'),
111
+ DF.namedNode('http://ex.org/data.ttl'),
112
112
  ],
113
113
  },
114
114
  });
@@ -116,9 +116,9 @@ WHERE { ?s ?p ?o }
116
116
  vitest_1.it.skip('should use the base IRI', ({ expect }) => {
117
117
  const query = 'SELECT * { <> <#b> "" }';
118
118
  const result = {
119
- subject: dataFactory.namedNode('http://ex.org/'),
120
- predicate: dataFactory.namedNode('http://ex.org/#b'),
121
- object: dataFactory.literal(''),
119
+ subject: DF.namedNode('http://ex.org/'),
120
+ predicate: DF.namedNode('http://ex.org/#b'),
121
+ object: DF.literal(''),
122
122
  };
123
123
  expect(parser.parse(query, context)).toMatchObject({
124
124
  where: [{ triples: [result] }],
@@ -130,9 +130,9 @@ WHERE { ?s ?p ?o }
130
130
  const goodQuery = 'SELECT * { <> <#b> "" }';
131
131
  const context = { baseIRI: 'http://ex2.org/' };
132
132
  const result = {
133
- subject: dataFactory.namedNode('http://ex2.org/'),
134
- predicate: dataFactory.namedNode('http://ex2.org/#b'),
135
- object: dataFactory.literal(''),
133
+ subject: DF.namedNode('http://ex2.org/'),
134
+ predicate: DF.namedNode('http://ex2.org/#b'),
135
+ object: DF.literal(''),
136
136
  };
137
137
  const data = parser.parse(goodQuery, context);
138
138
  expect(data).toMatchObject({
@@ -152,9 +152,9 @@ WHERE { ?s ?p ?o }
152
152
  type: 'bgp',
153
153
  triples: [
154
154
  {
155
- subject: dataFactory.variable('s'),
156
- predicate: dataFactory.variable('p'),
157
- object: dataFactory.variable('o'),
155
+ subject: DF.variable('s'),
156
+ predicate: DF.variable('p'),
157
+ object: DF.variable('o'),
158
158
  },
159
159
  ],
160
160
  },
@@ -164,9 +164,9 @@ WHERE { ?s ?p ?o }
164
164
  type: 'bgp',
165
165
  triples: [
166
166
  {
167
- subject: dataFactory.variable('a'),
168
- predicate: dataFactory.variable('b'),
169
- object: dataFactory.variable('c'),
167
+ subject: DF.variable('a'),
168
+ predicate: DF.variable('b'),
169
+ object: DF.variable('c'),
170
170
  },
171
171
  ],
172
172
  },
@@ -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, dataFactory: 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: dataFactory.namedNode('ex:abc#a'),\n predicate: dataFactory.namedNode('ex:def#b'),\n object: dataFactory.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: dataFactory.namedNode('ex:xyz#a'),\n predicate: dataFactory.namedNode('ex:def#b'),\n object: dataFactory.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: dataFactory.namedNode('ex:abc#a'),\n predicate: dataFactory.namedNode('ex:def#b'),\n object: dataFactory.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 dataFactory.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: dataFactory.namedNode('http://ex.org/'),\n predicate: dataFactory.namedNode('http://ex.org/#b'),\n object: dataFactory.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: dataFactory.namedNode('http://ex2.org/'),\n predicate: dataFactory.namedNode('http://ex2.org/#b'),\n object: dataFactory.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: dataFactory.variable('s'),\n predicate: dataFactory.variable('p'),\n object: dataFactory.variable('o'),\n },\n ],\n },\n ],\n },\n {\n type: 'bgp',\n triples: [\n {\n subject: dataFactory.variable('a'),\n predicate: dataFactory.variable('b'),\n object: dataFactory.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":"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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,62 +1,29 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.sparqlAlgebraTests = sparqlAlgebraTests;
37
4
  exports.sparqlQueries = sparqlQueries;
38
- /* eslint-disable import/no-nodejs-modules,no-sync */
39
- const fs = __importStar(require("node:fs"));
40
- const path = __importStar(require("node:path"));
5
+ /* eslint-disable import/no-nodejs-modules */
6
+ const node_fs_1 = require("node:fs");
7
+ const node_path_1 = require("node:path");
41
8
  const fileUtils_js_1 = require("../fileUtils.js");
42
9
  const utils_js_1 = require("./utils.js");
43
10
  const rootDir = (0, utils_js_1.getStaticFilePath)('algebra');
44
- const rootSparql = path.join(rootDir, 'sparql');
45
- const rootJson = path.join(rootDir, 'algebra');
46
- const rootJsonBlankToVariable = path.join(rootDir, 'algebra-blank-to-var');
11
+ const rootSparql = (0, node_path_1.join)(rootDir, 'sparql');
12
+ const rootJson = (0, node_path_1.join)(rootDir, 'algebra');
13
+ const rootJsonBlankToVariable = (0, node_path_1.join)(rootDir, 'algebra-blank-to-var');
47
14
  function* sparqlAlgebraTests(suite, blankToVariable, getSPARQL) {
48
15
  // Relative path starting from roots declared above.
49
16
  function* subGen(relativePath) {
50
- const absolutePath = path.join(blankToVariable ? rootJsonBlankToVariable : rootJson, relativePath);
51
- if (fs.lstatSync(absolutePath).isDirectory()) {
17
+ const absolutePath = (0, node_path_1.join)(blankToVariable ? rootJsonBlankToVariable : rootJson, relativePath);
18
+ if ((0, node_fs_1.lstatSync)(absolutePath).isDirectory()) {
52
19
  // Recursion
53
- for (const sub of fs.readdirSync(absolutePath)) {
54
- yield* subGen(path.join(relativePath, sub));
20
+ for (const sub of (0, node_fs_1.readdirSync)(absolutePath)) {
21
+ yield* subGen((0, node_path_1.join)(relativePath, sub));
55
22
  }
56
23
  }
57
24
  else {
58
25
  const name = relativePath.replace(/\.json$/u, '');
59
- const sparqlPath = path.join(rootSparql, relativePath.replace(/\.json/u, '.sparql'));
26
+ const sparqlPath = (0, node_path_1.join)(rootSparql, relativePath.replace(/\.json/u, '.sparql'));
60
27
  yield {
61
28
  name,
62
29
  json: JSON.parse((0, fileUtils_js_1.readFileSync)(absolutePath)),
@@ -65,30 +32,30 @@ function* sparqlAlgebraTests(suite, blankToVariable, getSPARQL) {
65
32
  };
66
33
  }
67
34
  }
68
- const subfolders = fs.readdirSync(blankToVariable ? rootJsonBlankToVariable : rootJson);
35
+ const subfolders = (0, node_fs_1.readdirSync)(blankToVariable ? rootJsonBlankToVariable : rootJson);
69
36
  if (subfolders.includes(suite)) {
70
37
  yield* subGen(suite);
71
38
  }
72
39
  }
73
40
  function* sparqlQueries(suite) {
74
41
  function* subGen(relativePath) {
75
- const absolutePath = path.join(rootSparql, relativePath);
76
- if (fs.lstatSync(absolutePath).isDirectory()) {
42
+ const absolutePath = (0, node_path_1.join)(rootSparql, relativePath);
43
+ if ((0, node_fs_1.lstatSync)(absolutePath).isDirectory()) {
77
44
  // Recursion
78
- for (const sub of fs.readdirSync(absolutePath)) {
79
- yield* subGen(path.join(relativePath, sub));
45
+ for (const sub of (0, node_fs_1.readdirSync)(absolutePath)) {
46
+ yield* subGen((0, node_path_1.join)(relativePath, sub));
80
47
  }
81
48
  }
82
49
  else {
83
50
  const name = relativePath.replace(/\.sparql$/u, '');
84
- const content = fs.readFileSync(absolutePath, 'utf-8');
51
+ const content = (0, fileUtils_js_1.readFileSync)(absolutePath, 'utf-8');
85
52
  yield {
86
53
  name,
87
54
  query: content.replaceAll(/\r?\n/gu, '\n'),
88
55
  };
89
56
  }
90
57
  }
91
- const subfolders = fs.readdirSync(rootSparql);
58
+ const subfolders = (0, node_fs_1.readdirSync)(rootSparql);
92
59
  if (subfolders.includes(suite)) {
93
60
  yield* subGen(suite);
94
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"algebraGenerators.js","sourceRoot":"","sources":["../../../../lib/generators/algebraGenerators.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,gDA0BC;AAGD,sCAsBC;AA3ED,qDAAqD;AACrD,4CAA8B;AAC9B,gDAAkC;AAClC,kDAA+C;AAC/C,yCAA+C;AAE/C,MAAM,OAAO,GAAG,IAAA,4BAAiB,EAAC,SAAS,CAAC,CAAC;AAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC/C,MAAM,uBAAuB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;AAe3E,QAAe,CAAC,CAAC,kBAAkB,CAAC,KAAuB,EAAE,eAAwB,EAAE,SAAkB;IAEvG,oDAAoD;IACpD,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAoB;QACnC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACnG,IAAI,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7C,YAAY;YACZ,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC/C,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;YACrF,MAAM;gBACJ,IAAI;gBACJ,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAA,2BAAY,EAAC,YAAY,CAAC,CAAC;gBAC5C,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,IAAA,2BAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;gBAChE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;aAC/B,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxF,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAGD,QAAe,CAAC,CAAC,aAAa,CAAC,KAAuB;IACpD,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAoB;QACnC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACzD,IAAI,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7C,YAAY;YACZ,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC/C,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM;gBACJ,IAAI;gBACJ,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC;aAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC","sourcesContent":["/* eslint-disable import/no-nodejs-modules,no-sync */\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { readFileSync } from '../fileUtils.js';\nimport { getStaticFilePath } from './utils.js';\n\nconst rootDir = getStaticFilePath('algebra');\nconst rootSparql = path.join(rootDir, 'sparql');\nconst rootJson = path.join(rootDir, 'algebra');\nconst rootJsonBlankToVariable = path.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 = path.join(blankToVariable ? rootJsonBlankToVariable : rootJson, relativePath);\n if (fs.lstatSync(absolutePath).isDirectory()) {\n // Recursion\n for (const sub of fs.readdirSync(absolutePath)) {\n yield* subGen(path.join(relativePath, sub));\n }\n } else {\n const name = relativePath.replace(/\\.json$/u, '');\n const sparqlPath = path.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 = fs.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 = path.join(rootSparql, relativePath);\n if (fs.lstatSync(absolutePath).isDirectory()) {\n // Recursion\n for (const sub of fs.readdirSync(absolutePath)) {\n yield* subGen(path.join(relativePath, sub));\n }\n } else {\n const name = relativePath.replace(/\\.sparql$/u, '');\n const content = fs.readFileSync(absolutePath, 'utf-8');\n yield {\n name,\n query: content.replaceAll(/\\r?\\n/gu, '\\n'),\n };\n }\n }\n\n const subfolders = fs.readdirSync(rootSparql);\n if (subfolders.includes(suite)) {\n yield* subGen(suite);\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 { readFileSync } from '../fileUtils.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"]}
@@ -1,87 +1,67 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.positiveTest = positiveTest;
37
4
  exports.negativeTest = negativeTest;
38
- /* eslint-disable import/no-nodejs-modules,no-sync */
39
- const fs = __importStar(require("node:fs"));
5
+ /* eslint-disable import/no-nodejs-modules */
6
+ const node_fs_1 = require("node:fs");
7
+ const node_path_1 = require("node:path");
40
8
  const fileUtils_js_1 = require("../fileUtils.js");
41
9
  const utils_js_1 = require("./utils.js");
42
10
  function* positiveTest(type, filter) {
43
- const dir = (0, utils_js_1.getStaticFilePath)(type);
44
- const statics = fs.readdirSync(dir);
11
+ const astDir = (0, utils_js_1.getStaticFilePath)('ast');
12
+ const jsonSourceTrackedDir = (0, node_path_1.join)(astDir, 'ast-source-tracked', type);
13
+ const jsonNonSourceTrackedDir = (0, node_path_1.join)(astDir, 'ast-no-source-tracked', type);
14
+ const sparqlDir = (0, node_path_1.join)(astDir, 'sparql', type);
15
+ const sparqlGeneratedDir = (0, node_path_1.join)(astDir, 'sparql-generated', type);
16
+ const statics = (0, node_fs_1.readdirSync)(jsonSourceTrackedDir);
45
17
  for (const file of statics) {
46
- if (file.endsWith('.json')) {
47
- if (filter && !filter(file.replace('.json', ''))) {
48
- continue;
49
- }
50
- yield {
51
- name: file.replace(/\.json$/u, ''),
52
- statics: async () => {
53
- const query = await (0, fileUtils_js_1.readFile)(`${dir}/${file.replace('.json', '.sparql')}`);
54
- const result = await (0, fileUtils_js_1.readFile)(`${dir}/${file}`);
55
- let autoGen;
56
- try {
57
- autoGen = await (0, fileUtils_js_1.readFile)(`${dir}/${file.replace('.json', '-generated.sparql')}`);
58
- }
59
- catch {
60
- autoGen = query;
61
- }
62
- const json = JSON.parse(result);
63
- return {
64
- query,
65
- ast: json,
66
- autoGen,
67
- };
68
- },
69
- };
18
+ if (filter && !filter(file.replace('.json', ''))) {
19
+ continue;
70
20
  }
21
+ const name = file.replace(/\.json$/u, '');
22
+ yield {
23
+ name,
24
+ statics: async () => {
25
+ const query = await (0, fileUtils_js_1.readFile)((0, node_path_1.join)(sparqlDir, `${name}.sparql`));
26
+ const sourceTracked = await (0, fileUtils_js_1.readFile)((0, node_path_1.join)(jsonSourceTrackedDir, file));
27
+ let noSourceTracked;
28
+ try {
29
+ noSourceTracked = await (0, fileUtils_js_1.readFile)((0, node_path_1.join)(jsonNonSourceTrackedDir, file));
30
+ }
31
+ catch {
32
+ noSourceTracked = '{}';
33
+ }
34
+ let autoGen;
35
+ try {
36
+ autoGen = await (0, fileUtils_js_1.readFile)((0, node_path_1.join)(sparqlGeneratedDir, `${name}.sparql`));
37
+ }
38
+ catch {
39
+ autoGen = '';
40
+ }
41
+ return {
42
+ query,
43
+ astWithSource: JSON.parse(sourceTracked),
44
+ astNoSource: JSON.parse(noSourceTracked),
45
+ autoGen,
46
+ };
47
+ },
48
+ };
71
49
  }
72
50
  }
73
51
  function* negativeTest(type, filter) {
74
- const dir = (0, utils_js_1.getStaticFilePath)(type);
75
- const statics = fs.readdirSync(dir);
52
+ const astDir = (0, utils_js_1.getStaticFilePath)('ast');
53
+ const sparqlGeneratedDir = (0, node_path_1.join)(astDir, 'sparql', type);
54
+ const statics = (0, node_fs_1.readdirSync)(sparqlGeneratedDir);
76
55
  for (const file of statics) {
77
56
  if (file.endsWith('.sparql')) {
78
57
  if (filter && !filter(file.replace('.sparql', ''))) {
79
58
  continue;
80
59
  }
60
+ const name = file.replace(/\.sparql$/u, '');
81
61
  yield {
82
- name: file.replace(/\.sparql$/u, ''),
62
+ name,
83
63
  statics: async () => {
84
- const query = await (0, fileUtils_js_1.readFile)(`${dir}/${file}`);
64
+ const query = await (0, fileUtils_js_1.readFile)((0, node_path_1.join)(sparqlGeneratedDir, file));
85
65
  return {
86
66
  query,
87
67
  };
@@ -1 +1 @@
1
- {"version":3,"file":"generators.js","sourceRoot":"","sources":["../../../../lib/generators/generators.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,oCAgCC;AASD,oCAsBC;AA7ED,qDAAqD;AACrD,4CAA8B;AAC9B,kDAA2C;AAC3C,yCAA+C;AAW/C,QAAe,CAAC,CAAC,YAAY,CAC3B,IAA2C,EAC3C,MAAkC;IAElC,MAAM,GAAG,GAAG,IAAA,4BAAiB,EAAC,IAAI,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;gBACjD,SAAS;YACX,CAAC;YACD,MAAM;gBACJ,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;gBAClC,OAAO,EAAE,KAAK,IAAG,EAAE;oBACjB,MAAM,KAAK,GAAG,MAAM,IAAA,uBAAQ,EAAC,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;oBAC3E,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAQ,EAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;oBAChD,IAAI,OAAe,CAAC;oBACpB,IAAI,CAAC;wBACH,OAAO,GAAG,MAAM,IAAA,uBAAQ,EAAC,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;oBACnF,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,GAAG,KAAK,CAAC;oBAClB,CAAC;oBACD,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACzC,OAAO;wBACL,KAAK;wBACL,GAAG,EAAE,IAAI;wBACT,OAAO;qBACR,CAAC;gBACJ,CAAC;aACF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AASD,QAAe,CAAC,CAAC,YAAY,CAC3B,IAAiD,EACjD,MAAkC;IAElC,MAAM,GAAG,GAAG,IAAA,4BAAiB,EAAC,IAAI,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;gBACnD,SAAS;YACX,CAAC;YACD,MAAM;gBACJ,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;gBACpC,OAAO,EAAE,KAAK,IAAG,EAAE;oBACjB,MAAM,KAAK,GAAG,MAAM,IAAA,uBAAQ,EAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;oBAC/C,OAAO;wBACL,KAAK;qBACN,CAAC;gBACJ,CAAC;aACF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["/* eslint-disable import/no-nodejs-modules,no-sync */\nimport * as fs from 'node:fs';\nimport { readFile } from '../fileUtils.js';\nimport { getStaticFilePath } from './utils.js';\n\ninterface PositiveTest {\n name: string;\n statics: () => Promise<{\n query: string;\n ast: unknown;\n autoGen: 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 dir = getStaticFilePath(type);\n const statics = fs.readdirSync(dir);\n for (const file of statics) {\n if (file.endsWith('.json')) {\n if (filter && !filter(file.replace('.json', ''))) {\n continue;\n }\n yield {\n name: file.replace(/\\.json$/u, ''),\n statics: async() => {\n const query = await readFile(`${dir}/${file.replace('.json', '.sparql')}`);\n const result = await readFile(`${dir}/${file}`);\n let autoGen: string;\n try {\n autoGen = await readFile(`${dir}/${file.replace('.json', '-generated.sparql')}`);\n } catch {\n autoGen = query;\n }\n const json: unknown = JSON.parse(result);\n return {\n query,\n ast: json,\n autoGen,\n };\n },\n };\n }\n }\n}\n\ninterface 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 dir = getStaticFilePath(type);\n const statics = fs.readdirSync(dir);\n for (const file of statics) {\n if (file.endsWith('.sparql')) {\n if (filter && !filter(file.replace('.sparql', ''))) {\n continue;\n }\n yield {\n name: file.replace(/\\.sparql$/u, ''),\n statics: async() => {\n const query = await readFile(`${dir}/${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 }>;\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 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: string;\n try {\n autoGen = await readFile(join(sparqlGeneratedDir, `${name}.sparql`));\n } catch {\n autoGen = '';\n }\n return {\n query,\n astWithSource: JSON.parse(sourceTracked),\n astNoSource: JSON.parse(noSourceTracked),\n autoGen,\n };\n },\n };\n }\n}\n\ninterface 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"]}
@@ -6,5 +6,5 @@ interface Parser {
6
6
  baseIRI?: string;
7
7
  }) => unknown;
8
8
  }
9
- export declare function importSparql11NoteTests(parser: Parser, dataFactory: DataFactory<BaseQuad>): void;
9
+ export declare function importSparql11NoteTests(parser: Parser, DF: DataFactory<BaseQuad>): void;
10
10
  export {};
@@ -1,5 +1,5 @@
1
1
  import { describe, it } from 'vitest';
2
- export function importSparql11NoteTests(parser, dataFactory) {
2
+ export function importSparql11NoteTests(parser, DF) {
3
3
  function testErroneousQuery(query, _errorMsg) {
4
4
  return ({ expect }) => {
5
5
  let error;
@@ -50,9 +50,9 @@ export function importSparql11NoteTests(parser, dataFactory) {
50
50
  {
51
51
  triples: [
52
52
  {
53
- subject: dataFactory.namedNode('ex:abc#a'),
54
- predicate: dataFactory.namedNode('ex:def#b'),
55
- object: dataFactory.literal(''),
53
+ subject: DF.namedNode('ex:abc#a'),
54
+ predicate: DF.namedNode('ex:def#b'),
55
+ object: DF.literal(''),
56
56
  },
57
57
  ],
58
58
  },
@@ -64,9 +64,9 @@ export function importSparql11NoteTests(parser, dataFactory) {
64
64
  expect(parser.parse(query, { prefixes })).toMatchObject({
65
65
  where: [{
66
66
  triples: [{
67
- subject: dataFactory.namedNode('ex:xyz#a'),
68
- predicate: dataFactory.namedNode('ex:def#b'),
69
- object: dataFactory.literal(''),
67
+ subject: DF.namedNode('ex:xyz#a'),
68
+ predicate: DF.namedNode('ex:def#b'),
69
+ object: DF.literal(''),
70
70
  }],
71
71
  },
72
72
  ],
@@ -75,9 +75,9 @@ export function importSparql11NoteTests(parser, dataFactory) {
75
75
  expect(parser.parse(query2, { prefixes })).toMatchObject({
76
76
  where: [{
77
77
  triples: [{
78
- subject: dataFactory.namedNode('ex:abc#a'),
79
- predicate: dataFactory.namedNode('ex:def#b'),
80
- object: dataFactory.literal(''),
78
+ subject: DF.namedNode('ex:abc#a'),
79
+ predicate: DF.namedNode('ex:def#b'),
80
+ object: DF.literal(''),
81
81
  }],
82
82
  },
83
83
  ],
@@ -105,7 +105,7 @@ WHERE { ?s ?p ?o }
105
105
  expect(parser.parse(query, context)).toMatchObject({
106
106
  from: {
107
107
  default: [
108
- dataFactory.namedNode('http://ex.org/data.ttl'),
108
+ DF.namedNode('http://ex.org/data.ttl'),
109
109
  ],
110
110
  },
111
111
  });
@@ -113,9 +113,9 @@ WHERE { ?s ?p ?o }
113
113
  it.skip('should use the base IRI', ({ expect }) => {
114
114
  const query = 'SELECT * { <> <#b> "" }';
115
115
  const result = {
116
- subject: dataFactory.namedNode('http://ex.org/'),
117
- predicate: dataFactory.namedNode('http://ex.org/#b'),
118
- object: dataFactory.literal(''),
116
+ subject: DF.namedNode('http://ex.org/'),
117
+ predicate: DF.namedNode('http://ex.org/#b'),
118
+ object: DF.literal(''),
119
119
  };
120
120
  expect(parser.parse(query, context)).toMatchObject({
121
121
  where: [{ triples: [result] }],
@@ -127,9 +127,9 @@ WHERE { ?s ?p ?o }
127
127
  const goodQuery = 'SELECT * { <> <#b> "" }';
128
128
  const context = { baseIRI: 'http://ex2.org/' };
129
129
  const result = {
130
- subject: dataFactory.namedNode('http://ex2.org/'),
131
- predicate: dataFactory.namedNode('http://ex2.org/#b'),
132
- object: dataFactory.literal(''),
130
+ subject: DF.namedNode('http://ex2.org/'),
131
+ predicate: DF.namedNode('http://ex2.org/#b'),
132
+ object: DF.literal(''),
133
133
  };
134
134
  const data = parser.parse(goodQuery, context);
135
135
  expect(data).toMatchObject({
@@ -149,9 +149,9 @@ WHERE { ?s ?p ?o }
149
149
  type: 'bgp',
150
150
  triples: [
151
151
  {
152
- subject: dataFactory.variable('s'),
153
- predicate: dataFactory.variable('p'),
154
- object: dataFactory.variable('o'),
152
+ subject: DF.variable('s'),
153
+ predicate: DF.variable('p'),
154
+ object: DF.variable('o'),
155
155
  },
156
156
  ],
157
157
  },
@@ -161,9 +161,9 @@ WHERE { ?s ?p ?o }
161
161
  type: 'bgp',
162
162
  triples: [
163
163
  {
164
- subject: dataFactory.variable('a'),
165
- predicate: dataFactory.variable('b'),
166
- object: dataFactory.variable('c'),
164
+ subject: DF.variable('a'),
165
+ predicate: DF.variable('b'),
166
+ object: DF.variable('c'),
167
167
  },
168
168
  ],
169
169
  },
@@ -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, dataFactory: 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: dataFactory.namedNode('ex:abc#a'),\n predicate: dataFactory.namedNode('ex:def#b'),\n object: dataFactory.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: dataFactory.namedNode('ex:xyz#a'),\n predicate: dataFactory.namedNode('ex:def#b'),\n object: dataFactory.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: dataFactory.namedNode('ex:abc#a'),\n predicate: dataFactory.namedNode('ex:def#b'),\n object: dataFactory.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 dataFactory.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: dataFactory.namedNode('http://ex.org/'),\n predicate: dataFactory.namedNode('http://ex.org/#b'),\n object: dataFactory.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: dataFactory.namedNode('http://ex2.org/'),\n predicate: dataFactory.namedNode('http://ex2.org/#b'),\n object: dataFactory.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: dataFactory.variable('s'),\n predicate: dataFactory.variable('p'),\n object: dataFactory.variable('o'),\n },\n ],\n },\n ],\n },\n {\n type: 'bgp',\n triples: [\n {\n subject: dataFactory.variable('a'),\n predicate: dataFactory.variable('b'),\n object: dataFactory.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,EAAyB;IAC/E,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,IAAI,CAAC,6DAA6D,EAAE,kBAAkB,CACvF,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,IAAI,CAAC,iDAAiD,EAAE,kBAAkB,CAC3E,4CAA4C,EAC5C,mDAAmD,CACpD,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,oDAAoD,EAAE,kBAAkB,CAC9E,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,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YAClD,MAAM,KAAK,GAAG,yBAAyB,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;gBACtD,KAAK,EAAE;oBACL;wBACE,OAAO,EAAE;4BACP;gCACE,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC;gCACjC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC;gCACnC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;6BACvB;yBACF;qBACF;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC,8CAA8C,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACrE,MAAM,KAAK,GAAG,6CAA6C,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;gBACtD,KAAK,EAAE,CAAC;wBACN,OAAO,EAAE,CAAC;gCACR,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC;gCACjC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC;gCACnC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;6BACvB,CAAC;qBACH;iBACA;aACF,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,yBAAyB,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;gBACvD,KAAK,EAAE,CAAC;wBACN,OAAO,EAAE,CAAC;gCACR,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC;gCACjC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC;gCACnC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;6BACvB,CAAC;qBACH;iBACA;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,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,OAAO,GAAG,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;QAE9C,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YAC1C,MAAM,KAAK,GAAG,uBAAuB,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;gBACjD,IAAI,EAAE,gBAAgB;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC,gCAAgC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACvD,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG;;;;CAInB,CAAC;YACI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;gBACjD,IAAI,EAAE;oBACJ,OAAO,EAAE;wBACP,EAAE,CAAC,SAAS,CAAC,wBAAwB,CAAC;qBACvC;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YAChD,MAAM,KAAK,GAAG,yBAAyB,CAAC;YACxC,MAAM,MAAM,GAAG;gBACb,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC;gBACvC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,kBAAkB,CAAC;gBAC3C,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;aACvB,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;gBACjD,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAE,MAAM,CAAE,EAAC,CAAC;aAChC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC,2CAA2C,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YAClE,MAAM,QAAQ,GAAG,kCAAkC,CAAC;YACpD,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAE7D,MAAM,SAAS,GAAG,yBAAyB,CAAC;YAE5C,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG;gBACb,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,iBAAiB,CAAC;gBACxC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC;gBAC5C,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;aACvB,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC;gBACzB,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAE,MAAM,CAAE,EAAC,CAAC;aAChC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,oEAAoE,EAAE,kBAAkB,CAC9F,0BAA0B,EAC1B,4DAA4D,CAC7D,CAAC,CAAC;IAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,EAAE,CAAC,IAAI,CAAC,oCAAoC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YAC3D,MAAM,KAAK,GAAG,0CAA0C,CAAC;YACzD,MAAM,MAAM,GAAG;gBACb;oBACE,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE;wBACR;4BACE,IAAI,EAAE,KAAK;4BACX,OAAO,EAAE;gCACP;oCACE,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;oCACzB,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;oCAC3B,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;iCACzB;6BACF;yBACF;qBACF;iBACF;gBACD;oBACE,IAAI,EAAE,KAAK;oBACX,OAAO,EAAE;wBACP;4BACE,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;4BACzB,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;4BAC3B,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;yBACzB;qBACF;iBACF;aACF,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC,8CAA8C,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACrE,MAAM,KAAK,GAAG,oDAAoD,CAAC;YAEnE,MAAM,MAAM,GAAG;gBACb;oBACE,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,CAAC;4BACT,IAAI,EAAE,KAAK;4BACX,OAAO,EAAE,CAAC;oCACR,OAAO,EAAE;wCACP,QAAQ,EAAE,UAAU;wCACpB,KAAK,EAAE,GAAG;qCACX;oCACD,SAAS,EAAE;wCACT,QAAQ,EAAE,UAAU;wCACpB,KAAK,EAAE,GAAG;qCACX;oCACD,MAAM,EAAE;wCACN,QAAQ,EAAE,UAAU;wCACpB,KAAK,EAAE,GAAG;qCACX;iCACF,CAAC;yBACH,EAAE;4BACD,IAAI,EAAE,KAAK;4BACX,OAAO,EAAE,CAAC;oCACR,OAAO,EAAE;wCACP,QAAQ,EAAE,UAAU;wCACpB,KAAK,EAAE,GAAG;qCACX;oCACD,SAAS,EAAE;wCACT,QAAQ,EAAE,UAAU;wCACpB,KAAK,EAAE,GAAG;qCACX;oCACD,MAAM,EAAE;wCACN,QAAQ,EAAE,UAAU;wCACpB,KAAK,EAAE,GAAG;qCACX;iCACF,CAAC;yBACH,CAAC;iBACH;aACF,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,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,IAAI,CAAC,wEAAwE,EAAE,kBAAkB,CAClG,sEAAsE,EACtE,gEAAgE,CACjE,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC,mFAAmF,EAAE,kBAAkB,CAC7G,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.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,25 +1,25 @@
1
- /* eslint-disable import/no-nodejs-modules,no-sync */
2
- import * as fs from 'node:fs';
3
- import * as path from 'node:path';
1
+ /* eslint-disable import/no-nodejs-modules */
2
+ import { lstatSync, readdirSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
4
  import { readFileSync } from '../fileUtils.js';
5
5
  import { getStaticFilePath } from './utils.js';
6
6
  const rootDir = getStaticFilePath('algebra');
7
- const rootSparql = path.join(rootDir, 'sparql');
8
- const rootJson = path.join(rootDir, 'algebra');
9
- const rootJsonBlankToVariable = path.join(rootDir, 'algebra-blank-to-var');
7
+ const rootSparql = join(rootDir, 'sparql');
8
+ const rootJson = join(rootDir, 'algebra');
9
+ const rootJsonBlankToVariable = join(rootDir, 'algebra-blank-to-var');
10
10
  export function* sparqlAlgebraTests(suite, blankToVariable, getSPARQL) {
11
11
  // Relative path starting from roots declared above.
12
12
  function* subGen(relativePath) {
13
- const absolutePath = path.join(blankToVariable ? rootJsonBlankToVariable : rootJson, relativePath);
14
- if (fs.lstatSync(absolutePath).isDirectory()) {
13
+ const absolutePath = join(blankToVariable ? rootJsonBlankToVariable : rootJson, relativePath);
14
+ if (lstatSync(absolutePath).isDirectory()) {
15
15
  // Recursion
16
- for (const sub of fs.readdirSync(absolutePath)) {
17
- yield* subGen(path.join(relativePath, sub));
16
+ for (const sub of readdirSync(absolutePath)) {
17
+ yield* subGen(join(relativePath, sub));
18
18
  }
19
19
  }
20
20
  else {
21
21
  const name = relativePath.replace(/\.json$/u, '');
22
- const sparqlPath = path.join(rootSparql, relativePath.replace(/\.json/u, '.sparql'));
22
+ const sparqlPath = join(rootSparql, relativePath.replace(/\.json/u, '.sparql'));
23
23
  yield {
24
24
  name,
25
25
  json: JSON.parse(readFileSync(absolutePath)),
@@ -28,30 +28,30 @@ export function* sparqlAlgebraTests(suite, blankToVariable, getSPARQL) {
28
28
  };
29
29
  }
30
30
  }
31
- const subfolders = fs.readdirSync(blankToVariable ? rootJsonBlankToVariable : rootJson);
31
+ const subfolders = readdirSync(blankToVariable ? rootJsonBlankToVariable : rootJson);
32
32
  if (subfolders.includes(suite)) {
33
33
  yield* subGen(suite);
34
34
  }
35
35
  }
36
36
  export function* sparqlQueries(suite) {
37
37
  function* subGen(relativePath) {
38
- const absolutePath = path.join(rootSparql, relativePath);
39
- if (fs.lstatSync(absolutePath).isDirectory()) {
38
+ const absolutePath = join(rootSparql, relativePath);
39
+ if (lstatSync(absolutePath).isDirectory()) {
40
40
  // Recursion
41
- for (const sub of fs.readdirSync(absolutePath)) {
42
- yield* subGen(path.join(relativePath, sub));
41
+ for (const sub of readdirSync(absolutePath)) {
42
+ yield* subGen(join(relativePath, sub));
43
43
  }
44
44
  }
45
45
  else {
46
46
  const name = relativePath.replace(/\.sparql$/u, '');
47
- const content = fs.readFileSync(absolutePath, 'utf-8');
47
+ const content = readFileSync(absolutePath, 'utf-8');
48
48
  yield {
49
49
  name,
50
50
  query: content.replaceAll(/\r?\n/gu, '\n'),
51
51
  };
52
52
  }
53
53
  }
54
- const subfolders = fs.readdirSync(rootSparql);
54
+ const subfolders = readdirSync(rootSparql);
55
55
  if (subfolders.includes(suite)) {
56
56
  yield* subGen(suite);
57
57
  }
@@ -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,no-sync */\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { readFileSync } from '../fileUtils.js';\nimport { getStaticFilePath } from './utils.js';\n\nconst rootDir = getStaticFilePath('algebra');\nconst rootSparql = path.join(rootDir, 'sparql');\nconst rootJson = path.join(rootDir, 'algebra');\nconst rootJsonBlankToVariable = path.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 = path.join(blankToVariable ? rootJsonBlankToVariable : rootJson, relativePath);\n if (fs.lstatSync(absolutePath).isDirectory()) {\n // Recursion\n for (const sub of fs.readdirSync(absolutePath)) {\n yield* subGen(path.join(relativePath, sub));\n }\n } else {\n const name = relativePath.replace(/\\.json$/u, '');\n const sparqlPath = path.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 = fs.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 = path.join(rootSparql, relativePath);\n if (fs.lstatSync(absolutePath).isDirectory()) {\n // Recursion\n for (const sub of fs.readdirSync(absolutePath)) {\n yield* subGen(path.join(relativePath, sub));\n }\n } else {\n const name = relativePath.replace(/\\.sparql$/u, '');\n const content = fs.readFileSync(absolutePath, 'utf-8');\n yield {\n name,\n query: content.replaceAll(/\\r?\\n/gu, '\\n'),\n };\n }\n }\n\n const subfolders = fs.readdirSync(rootSparql);\n if (subfolders.includes(suite)) {\n yield* subGen(suite);\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 { readFileSync } from '../fileUtils.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"]}
@@ -2,7 +2,8 @@ interface PositiveTest {
2
2
  name: string;
3
3
  statics: () => Promise<{
4
4
  query: string;
5
- ast: unknown;
5
+ astWithSource: unknown;
6
+ astNoSource: unknown;
6
7
  autoGen: string;
7
8
  }>;
8
9
  }
@@ -1,50 +1,63 @@
1
- /* eslint-disable import/no-nodejs-modules,no-sync */
2
- import * as fs from 'node:fs';
1
+ /* eslint-disable import/no-nodejs-modules */
2
+ import { readdirSync } from 'node:fs';
3
+ import { join } from 'node:path';
3
4
  import { readFile } from '../fileUtils.js';
4
5
  import { getStaticFilePath } from './utils.js';
5
6
  export function* positiveTest(type, filter) {
6
- const dir = getStaticFilePath(type);
7
- const statics = fs.readdirSync(dir);
7
+ const astDir = getStaticFilePath('ast');
8
+ const jsonSourceTrackedDir = join(astDir, 'ast-source-tracked', type);
9
+ const jsonNonSourceTrackedDir = join(astDir, 'ast-no-source-tracked', type);
10
+ const sparqlDir = join(astDir, 'sparql', type);
11
+ const sparqlGeneratedDir = join(astDir, 'sparql-generated', type);
12
+ const statics = readdirSync(jsonSourceTrackedDir);
8
13
  for (const file of statics) {
9
- if (file.endsWith('.json')) {
10
- if (filter && !filter(file.replace('.json', ''))) {
11
- continue;
12
- }
13
- yield {
14
- name: file.replace(/\.json$/u, ''),
15
- statics: async () => {
16
- const query = await readFile(`${dir}/${file.replace('.json', '.sparql')}`);
17
- const result = await readFile(`${dir}/${file}`);
18
- let autoGen;
19
- try {
20
- autoGen = await readFile(`${dir}/${file.replace('.json', '-generated.sparql')}`);
21
- }
22
- catch {
23
- autoGen = query;
24
- }
25
- const json = JSON.parse(result);
26
- return {
27
- query,
28
- ast: json,
29
- autoGen,
30
- };
31
- },
32
- };
14
+ if (filter && !filter(file.replace('.json', ''))) {
15
+ continue;
33
16
  }
17
+ const name = file.replace(/\.json$/u, '');
18
+ yield {
19
+ name,
20
+ statics: async () => {
21
+ const query = await readFile(join(sparqlDir, `${name}.sparql`));
22
+ const sourceTracked = await readFile(join(jsonSourceTrackedDir, file));
23
+ let noSourceTracked;
24
+ try {
25
+ noSourceTracked = await readFile(join(jsonNonSourceTrackedDir, file));
26
+ }
27
+ catch {
28
+ noSourceTracked = '{}';
29
+ }
30
+ let autoGen;
31
+ try {
32
+ autoGen = await readFile(join(sparqlGeneratedDir, `${name}.sparql`));
33
+ }
34
+ catch {
35
+ autoGen = '';
36
+ }
37
+ return {
38
+ query,
39
+ astWithSource: JSON.parse(sourceTracked),
40
+ astNoSource: JSON.parse(noSourceTracked),
41
+ autoGen,
42
+ };
43
+ },
44
+ };
34
45
  }
35
46
  }
36
47
  export function* negativeTest(type, filter) {
37
- const dir = getStaticFilePath(type);
38
- const statics = fs.readdirSync(dir);
48
+ const astDir = getStaticFilePath('ast');
49
+ const sparqlGeneratedDir = join(astDir, 'sparql', type);
50
+ const statics = readdirSync(sparqlGeneratedDir);
39
51
  for (const file of statics) {
40
52
  if (file.endsWith('.sparql')) {
41
53
  if (filter && !filter(file.replace('.sparql', ''))) {
42
54
  continue;
43
55
  }
56
+ const name = file.replace(/\.sparql$/u, '');
44
57
  yield {
45
- name: file.replace(/\.sparql$/u, ''),
58
+ name,
46
59
  statics: async () => {
47
- const query = await readFile(`${dir}/${file}`);
60
+ const query = await readFile(join(sparqlGeneratedDir, file));
48
61
  return {
49
62
  query,
50
63
  };
@@ -1 +1 @@
1
- {"version":3,"file":"generators.js","sourceRoot":"","sources":["../../../../lib/generators/generators.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAW/C,MAAM,SAAS,CAAC,CAAC,YAAY,CAC3B,IAA2C,EAC3C,MAAkC;IAElC,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;gBACjD,SAAS;YACX,CAAC;YACD,MAAM;gBACJ,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;gBAClC,OAAO,EAAE,KAAK,IAAG,EAAE;oBACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;oBAC3E,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;oBAChD,IAAI,OAAe,CAAC;oBACpB,IAAI,CAAC;wBACH,OAAO,GAAG,MAAM,QAAQ,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;oBACnF,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,GAAG,KAAK,CAAC;oBAClB,CAAC;oBACD,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACzC,OAAO;wBACL,KAAK;wBACL,GAAG,EAAE,IAAI;wBACT,OAAO;qBACR,CAAC;gBACJ,CAAC;aACF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AASD,MAAM,SAAS,CAAC,CAAC,YAAY,CAC3B,IAAiD,EACjD,MAAkC;IAElC,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;gBACnD,SAAS;YACX,CAAC;YACD,MAAM;gBACJ,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;gBACpC,OAAO,EAAE,KAAK,IAAG,EAAE;oBACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;oBAC/C,OAAO;wBACL,KAAK;qBACN,CAAC;gBACJ,CAAC;aACF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["/* eslint-disable import/no-nodejs-modules,no-sync */\nimport * as fs from 'node:fs';\nimport { readFile } from '../fileUtils.js';\nimport { getStaticFilePath } from './utils.js';\n\ninterface PositiveTest {\n name: string;\n statics: () => Promise<{\n query: string;\n ast: unknown;\n autoGen: 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 dir = getStaticFilePath(type);\n const statics = fs.readdirSync(dir);\n for (const file of statics) {\n if (file.endsWith('.json')) {\n if (filter && !filter(file.replace('.json', ''))) {\n continue;\n }\n yield {\n name: file.replace(/\\.json$/u, ''),\n statics: async() => {\n const query = await readFile(`${dir}/${file.replace('.json', '.sparql')}`);\n const result = await readFile(`${dir}/${file}`);\n let autoGen: string;\n try {\n autoGen = await readFile(`${dir}/${file.replace('.json', '-generated.sparql')}`);\n } catch {\n autoGen = query;\n }\n const json: unknown = JSON.parse(result);\n return {\n query,\n ast: json,\n autoGen,\n };\n },\n };\n }\n }\n}\n\ninterface 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 dir = getStaticFilePath(type);\n const statics = fs.readdirSync(dir);\n for (const file of statics) {\n if (file.endsWith('.sparql')) {\n if (filter && !filter(file.replace('.sparql', ''))) {\n continue;\n }\n yield {\n name: file.replace(/\\.sparql$/u, ''),\n statics: async() => {\n const query = await readFile(`${dir}/${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 }>;\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 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: string;\n try {\n autoGen = await readFile(join(sparqlGeneratedDir, `${name}.sparql`));\n } catch {\n autoGen = '';\n }\n return {\n query,\n astWithSource: JSON.parse(sourceTracked),\n astNoSource: JSON.parse(noSourceTracked),\n autoGen,\n };\n },\n };\n }\n}\n\ninterface 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"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@traqula/test-utils",
3
3
  "type": "module",
4
- "version": "0.0.24",
4
+ "version": "1.0.0",
5
5
  "description": "Test utils used by the Traqula monorepo",
6
6
  "lsd:module": true,
7
7
  "license": "MIT",
@@ -48,5 +48,5 @@
48
48
  "devDependencies": {
49
49
  "@rdfjs/types": "^2.0.0"
50
50
  },
51
- "gitHead": "9865fe1fe302819d46e19c6f3250ceef778f434f"
51
+ "gitHead": "9e648d6d9081a3b4f994599fa22116414914746f"
52
52
  }