5
5
6
6
const ndjson = require ( 'ndjson' )
7
7
const fs = require ( 'fs' )
8
+ const path = require ( 'path' )
8
9
const https = require ( 'https' )
9
10
const semver = require ( 'semver' )
10
11
@@ -18,43 +19,55 @@ const DISABLED_TESTS = [
18
19
/ s c o r e \( \) f u n c t i o n \/ I l l e g a l u s e / , // we're missing validation here
19
20
]
20
21
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
+ )
24
29
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` )
27
35
}
28
36
29
- function openStack ( expr ) {
37
+ function openStack ( i , expr ) {
30
38
const [ open , close ] = expr . split ( / B O D Y / )
31
- write ( open )
32
- STACK . push ( close )
33
- IDENT += ' '
39
+ write ( i , open )
40
+ STACK [ i ] . push ( close )
41
+ IDENT [ i ] += ' '
34
42
}
35
43
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
+ }
40
50
}
41
51
42
- function space ( ) {
43
- OUTPUT . write ( '\n' )
52
+ function space ( i ) {
53
+ fs . writeSync ( testFiles [ i ] , '\n' )
44
54
}
45
55
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 )
51
62
52
- write ( `tap.setTimeout(0)` )
53
- space ( )
63
+ write ( i , `tap.setTimeout(0)` )
64
+ space ( i )
54
65
55
- write ( `const DATASETS = new Map()` )
66
+ write ( i , `const DATASETS = new Map()` )
56
67
57
- write ( `
68
+ write (
69
+ i ,
70
+ `
58
71
const LOADERS = new Map()
59
72
60
73
async function loadDocuments(id) {
@@ -117,8 +130,9 @@ function replaceScoreWithPos(val) {
117
130
delete entry._score
118
131
}
119
132
}
120
- ` )
121
-
133
+ ` ,
134
+ )
135
+ }
122
136
function isDisabled ( testName ) {
123
137
return DISABLED_TESTS . find ( ( t ) => ( typeof t === 'string' ? t === testName : t . test ( testName ) ) )
124
138
}
@@ -151,21 +165,26 @@ function cmpString(a, b) {
151
165
return 0
152
166
}
153
167
168
+ let i = 0
154
169
process . stdin
155
170
. pipe ( ndjson . parse ( ) )
156
171
. on ( 'data' , ( entry ) => {
172
+ i ++
157
173
if ( entry . _type === 'dataset' ) {
158
174
if ( entry . documents ) {
159
175
entry . documents . sort ( ( a , b ) => cmpString ( a . _id , b . _id ) )
160
176
} else {
161
177
download ( entry . _id , entry . url )
162
178
}
163
179
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
+ }
166
184
}
167
185
168
186
if ( entry . _type === 'test' ) {
187
+ const testIndex = i % testFiles . length
169
188
const supported = entry . features . every ( ( f ) => SUPPORTED_FEATURES . has ( f ) )
170
189
if ( ! supported ) return
171
190
@@ -182,27 +201,32 @@ process.stdin
182
201
return
183
202
}
184
203
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)` )
188
207
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()` )
199
219
} else {
200
- write ( `t.throws(() => parse(query))` )
220
+ write ( testIndex , `t.throws(() => parse(query))` )
221
+ write ( testIndex , `t.end()` )
201
222
}
202
- closeStack ( )
203
- space ( )
223
+ closeStack ( testIndex )
224
+ space ( testIndex )
204
225
}
205
226
} )
206
227
. on ( 'end' , ( ) => {
207
- closeStack ( )
228
+ for ( let i = 0 ; i < testFiles . length ; i ++ ) {
229
+ closeStack ( i )
230
+ fs . closeSync ( testFiles [ i ] )
231
+ }
208
232
} )
0 commit comments