@@ -129,7 +129,7 @@ class Series {
129
129
* Runs tests matching the patterns.
130
130
*/
131
131
async runFor ( patterns , name_postfix = '' ) {
132
- let tests = this . build ( {
132
+ let tests = await this . build ( {
133
133
patterns,
134
134
folder : root_folder ,
135
135
virtual_folder : this . invocation ,
@@ -162,19 +162,19 @@ class Series {
162
162
/**
163
163
* Returns tests as an array of { name, func, ... } objects.
164
164
*/
165
- build ( { patterns, folder, virtual_folder, webdriver = '' } ) {
165
+ async build ( { patterns, folder, virtual_folder, webdriver = '' } ) {
166
166
let tests = [ ] ;
167
167
168
168
try {
169
169
let test_module = { } ;
170
170
try {
171
- test_module = this . loadTestMeta ( folder ) ;
171
+ test_module = await this . loadTestMeta ( folder ) ;
172
172
} catch ( e ) {
173
173
// no meta.js
174
174
}
175
175
176
176
let subfolders = test_module . folders ;
177
- let testfiles = test_module . list || this . getTestFileList ( folder ) ;
177
+ let testfiles = test_module . list || ( await this . getTestFileList ( folder ) ) ;
178
178
if ( ! subfolders && testfiles . length == 0 ) {
179
179
throw new Error ( `No tests found in ${ folder } ` ) ;
180
180
}
@@ -189,7 +189,7 @@ class Series {
189
189
testfiles,
190
190
webdriver,
191
191
patterns,
192
- subtests : this . buildSubtests ( {
192
+ subtests : await this . buildSubtests ( {
193
193
patterns,
194
194
folder,
195
195
virtual_folder,
@@ -205,15 +205,15 @@ class Series {
205
205
// Build the tests for webdrivers. Filter the list according traversed
206
206
// webdriver.
207
207
for ( let webdriver of this . webdrivers ) {
208
- let wdtests = this . buildTests ( {
208
+ let wdtests = await this . buildTests ( {
209
209
tests : [ ] ,
210
210
folder,
211
211
virtual_folder : `${ virtual_folder } /${ webdriver } ` ,
212
212
testfiles,
213
213
test_module,
214
214
webdriver,
215
215
patterns,
216
- subtests : this . buildSubtests ( {
216
+ subtests : await this . buildSubtests ( {
217
217
patterns,
218
218
folder,
219
219
virtual_folder : `${ virtual_folder } /${ webdriver } ` ,
@@ -242,24 +242,40 @@ class Series {
242
242
return tests ;
243
243
}
244
244
245
- buildSubtests ( { patterns, folder, virtual_folder, subfolders, webdriver } ) {
245
+ async buildSubtests ( {
246
+ patterns,
247
+ folder,
248
+ virtual_folder,
249
+ subfolders,
250
+ webdriver,
251
+ } ) {
246
252
if ( ! subfolders ) {
247
253
return [ ] ;
248
254
}
249
- return subfolders
250
- . map ( subfolder => ( {
251
- name : ` ${ virtual_folder } / ${ subfolder } ` ,
252
- subtests : this . build ( {
255
+
256
+ let subtests_for_subfolders = await Promise . all (
257
+ subfolders . map ( subfolder =>
258
+ this . build ( {
253
259
patterns,
254
260
folder : `${ folder } /${ subfolder } ` ,
255
261
virtual_folder : `${ virtual_folder } /${ subfolder } ` ,
256
262
webdriver,
257
- } ) ,
263
+ } ) . then ( subtests => ( {
264
+ subfolder,
265
+ subtests,
266
+ } ) )
267
+ )
268
+ ) ;
269
+
270
+ return subtests_for_subfolders
271
+ . map ( ( { subfolder, subtests } ) => ( {
272
+ name : `${ virtual_folder } /${ subfolder } ` ,
273
+ subtests,
258
274
} ) )
259
275
. filter ( t => t . subtests . length > 0 ) ;
260
276
}
261
277
262
- buildTests ( {
278
+ async buildTests ( {
263
279
tests,
264
280
folder,
265
281
virtual_folder,
@@ -313,22 +329,23 @@ class Series {
313
329
314
330
// Tests
315
331
for ( let { name, path } of list ) {
332
+ // Get a test.
316
333
let single_test_module = null ;
317
334
try {
318
- single_test_module = this . loadTest ( path ) ;
335
+ single_test_module = await this . loadTest ( path ) ;
319
336
} catch ( e ) {
320
337
console . error ( e ) ;
321
- throw new Error ( `Failed to load test file : ${ path } ` ) ;
338
+ throw new Error ( `Failed to load test: ${ path } ` ) ;
322
339
}
323
340
324
- let test = single_test_module . test ;
341
+ const test = single_test_module . test ;
325
342
if ( ! test ) {
326
- throw new Error ( `No test function to was found in ${ path } ` ) ;
343
+ throw new Error ( `No test was found in ${ path } ` ) ;
327
344
}
328
345
329
- // If request service is running, then notify it of a test start.
330
- let test_wrap = ( ) =>
331
- Promise . resolve ( servicer . ontest ( name ) ) . then ( ( ) => test ( ) ) ;
346
+ // A function to notify the servicer the test is about to start and then
347
+ // to invoke the test.
348
+ const test_wrap = ( ) => Promise . resolve ( servicer . ontest ( name ) ) . then ( test ) ;
332
349
333
350
let failures_info = Series . failuresInfo ( {
334
351
failures : expected_failures ,
@@ -637,11 +654,11 @@ class Series {
637
654
}
638
655
639
656
loadTestMeta ( folder ) {
640
- return require ( path . join ( root_dir , `${ folder } /meta.js` ) ) ;
657
+ return import ( path . join ( root_dir , `${ folder } /meta.js` ) ) ;
641
658
}
642
659
643
660
loadTest ( fn ) {
644
- return require ( path . join ( root_dir , fn ) ) ;
661
+ return import ( path . join ( root_dir , fn ) ) ;
645
662
}
646
663
647
664
getTestFileList ( folder ) {
0 commit comments