Skip to content

Commit 67020d4

Browse files
committed
test: split groq-test-suite in 10 files
1 parent d39eeef commit 67020d4

File tree

3 files changed

+75
-52
lines changed

3 files changed

+75
-52
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
node_modules
22
/yarn.lock
3-
/test/suite.test.js
3+
/test/suite-*.test.js
44
/test/datasets
55
/groq-test-suite
66
/docs

test/generate.js

+69-45
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
const ndjson = require('ndjson')
77
const fs = require('fs')
8+
const path = require('path')
89
const https = require('https')
910
const semver = require('semver')
1011

@@ -18,43 +19,55 @@ const DISABLED_TESTS = [
1819
/score\(\) function \/ Illegal use/, // we're missing validation here
1920
]
2021

21-
const OUTPUT = process.stdout
22-
const STACK = []
23-
let IDENT = ''
22+
const testFiles = new Array(10).fill(0).map((_, i) =>
23+
fs.openSync(
24+
path.join(__dirname, `suite-${i}.test.js`),
25+
// eslint-disable-next-line no-bitwise
26+
fs.constants.O_TRUNC | fs.constants.O_CREAT | fs.constants.O_WRONLY,
27+
),
28+
)
2429

25-
function write(data) {
26-
OUTPUT.write(`${IDENT + data}\n`)
30+
const STACK = testFiles.map(() => [])
31+
let IDENT = testFiles.map(() => '')
32+
33+
function write(i, data) {
34+
fs.writeSync(testFiles[i], `${IDENT[i] + data}\n`)
2735
}
2836

29-
function openStack(expr) {
37+
function openStack(i, expr) {
3038
const [open, close] = expr.split(/BODY/)
31-
write(open)
32-
STACK.push(close)
33-
IDENT += ' '
39+
write(i, open)
40+
STACK[i].push(close)
41+
IDENT[i] += ' '
3442
}
3543

36-
function closeStack() {
37-
const close = STACK.pop()
38-
IDENT = IDENT.substring(0, IDENT.length - 2)
39-
write(close)
44+
function closeStack(i) {
45+
const close = STACK[i].pop()
46+
if (close) {
47+
IDENT[i] = IDENT[i].substring(0, IDENT[i].length - 2)
48+
write(i, close)
49+
}
4050
}
4151

42-
function space() {
43-
OUTPUT.write('\n')
52+
function space(i) {
53+
fs.writeSync(testFiles[i], '\n')
4454
}
4555

46-
write(`const fs = require('fs')`)
47-
write(`const ndjson = require('ndjson')`)
48-
write(`const tap = require('tap')`)
49-
write(`const {evaluate, parse} = require('../src/1')`)
50-
space()
56+
for (let i = 0; i < testFiles.length; i++) {
57+
write(i, `const fs = require('fs')`)
58+
write(i, `const ndjson = require('ndjson')`)
59+
write(i, `const tap = require('tap')`)
60+
write(i, `const {evaluate, parse} = require('../src/1')`)
61+
space(i)
5162

52-
write(`tap.setTimeout(0)`)
53-
space()
63+
write(i, `tap.setTimeout(0)`)
64+
space(i)
5465

55-
write(`const DATASETS = new Map()`)
66+
write(i, `const DATASETS = new Map()`)
5667

57-
write(`
68+
write(
69+
i,
70+
`
5871
const LOADERS = new Map()
5972
6073
async function loadDocuments(id) {
@@ -117,8 +130,9 @@ function replaceScoreWithPos(val) {
117130
delete entry._score
118131
}
119132
}
120-
`)
121-
133+
`,
134+
)
135+
}
122136
function isDisabled(testName) {
123137
return DISABLED_TESTS.find((t) => (typeof t === 'string' ? t === testName : t.test(testName)))
124138
}
@@ -151,21 +165,26 @@ function cmpString(a, b) {
151165
return 0
152166
}
153167

168+
let i = 0
154169
process.stdin
155170
.pipe(ndjson.parse())
156171
.on('data', (entry) => {
172+
i++
157173
if (entry._type === 'dataset') {
158174
if (entry.documents) {
159175
entry.documents.sort((a, b) => cmpString(a._id, b._id))
160176
} else {
161177
download(entry._id, entry.url)
162178
}
163179

164-
write(`DATASETS.set(${JSON.stringify(entry._id)}, ${JSON.stringify(entry)})`)
165-
space()
180+
for (let i = 0; i < testFiles.length; i++) {
181+
write(i, `DATASETS.set(${JSON.stringify(entry._id)}, ${JSON.stringify(entry)})`)
182+
space(i)
183+
}
166184
}
167185

168186
if (entry._type === 'test') {
187+
const testIndex = i % testFiles.length
169188
const supported = entry.features.every((f) => SUPPORTED_FEATURES.has(f))
170189
if (!supported) return
171190

@@ -182,27 +201,32 @@ process.stdin
182201
return
183202
}
184203

185-
openStack(`tap.test(${JSON.stringify(entry.name)}, async (t) => {BODY})`)
186-
write(`let query = ${JSON.stringify(entry.query)}`)
187-
write(`t.comment(query)`)
204+
openStack(testIndex, `tap.test(${JSON.stringify(entry.name)}, async (t) => {BODY})`)
205+
write(testIndex, `let query = ${JSON.stringify(entry.query)}`)
206+
write(testIndex, `t.comment(query)`)
188207
if (entry.valid) {
189-
write(`let result = ${JSON.stringify(entry.result)}`)
190-
write(`let dataset = await loadDocuments(${JSON.stringify(entry.dataset._ref)})`)
191-
write(`if (!dataset) return`)
192-
write(`let params = ${JSON.stringify(entry.params || {})}`)
193-
write(`let tree = parse(query, {params})`)
194-
write(`let value = await evaluate(tree, {dataset, params})`)
195-
write(`let data = await value.get()`)
196-
write(`data = JSON.parse(JSON.stringify(data))`)
197-
write(`replaceScoreWithPos(data)`)
198-
write(`t.match(data, result)`)
208+
write(testIndex, `let result = ${JSON.stringify(entry.result)}`)
209+
write(testIndex, `let dataset = await loadDocuments(${JSON.stringify(entry.dataset._ref)})`)
210+
write(testIndex, `if (!dataset) return`)
211+
write(testIndex, `let params = ${JSON.stringify(entry.params || {})}`)
212+
write(testIndex, `let tree = parse(query, {params})`)
213+
write(testIndex, `let value = await evaluate(tree, {dataset, params})`)
214+
write(testIndex, `let data = await value.get()`)
215+
write(testIndex, `data = JSON.parse(JSON.stringify(data))`)
216+
write(testIndex, `replaceScoreWithPos(data)`)
217+
write(testIndex, `t.match(data, result)`)
218+
write(testIndex, `t.end()`)
199219
} else {
200-
write(`t.throws(() => parse(query))`)
220+
write(testIndex, `t.throws(() => parse(query))`)
221+
write(testIndex, `t.end()`)
201222
}
202-
closeStack()
203-
space()
223+
closeStack(testIndex)
224+
space(testIndex)
204225
}
205226
})
206227
.on('end', () => {
207-
closeStack()
228+
for (let i = 0; i < testFiles.length; i++) {
229+
closeStack(i)
230+
fs.closeSync(testFiles[i])
231+
}
208232
})

test/generate.sh

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
#!/usr/bin/env bash
2-
set -eo pipefail
2+
set -exo pipefail
33

44
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
5-
RESULT="$DIR"/suite.test.js
65

76
if [[ "$GROQTEST_SUITE" != "" ]]; then
87
echo "Using test suite file: $GROQTEST_SUITE"
9-
node "$DIR"/generate.js < "$GROQTEST_SUITE" >"$RESULT"
8+
node "$DIR"/generate.js < "$GROQTEST_SUITE"
109
else
1110
GROQTEST_SUITE_VERSION=${GROQTEST_SUITE_VERSION:-v0.1.38}
1211
url=https://github.com/sanity-io/groq-test-suite/releases/download/$GROQTEST_SUITE_VERSION/suite.ndjson
1312
echo "Getting test suite: $url"
14-
curl -sfL "$url" | node "$DIR"/generate.js >"$RESULT"
13+
curl -sfL "$url" | node "$DIR"/generate.js
1514
fi
1615

17-
$DIR/../node_modules/.bin/prettier --write "$RESULT"
16+
npx prettier --write $DIR/suite*.test.js
1817

19-
echo "Successfully generated $RESULT"
18+
echo "Successfully generated test suite files."

0 commit comments

Comments
 (0)