@@ -58,11 +58,13 @@ export class WPTRunner extends EventEmitter {
58
58
#reportPath
59
59
60
60
#stats = {
61
- completed : 0 ,
62
- failed : 0 ,
63
- success : 0 ,
61
+ completedTests : 0 ,
62
+ failedTests : 0 ,
63
+ passedTests : 0 ,
64
64
expectedFailures : 0 ,
65
- skipped : 0
65
+ failedFiles : 0 ,
66
+ passedFiles : 0 ,
67
+ skippedFiles : 0
66
68
}
67
69
68
70
constructor ( folder , url , { appendReport = false , reportPath } = { } ) {
@@ -158,7 +160,7 @@ export class WPTRunner extends EventEmitter {
158
160
const status = resolveStatusPath ( test , this . #status)
159
161
160
162
if ( status . file . skip || status . topLevel . skip ) {
161
- this . #stats. skipped += 1
163
+ this . #stats. skippedFiles += 1
162
164
163
165
console . log ( colors ( `[${ finishedFiles } /${ total } ] SKIPPED - ${ test } ` , 'yellow' ) )
164
166
console . log ( '=' . repeat ( 96 ) )
@@ -187,19 +189,19 @@ export class WPTRunner extends EventEmitter {
187
189
}
188
190
} )
189
191
190
- let result , report
192
+ const fileUrl = new URL ( `/${ this . #folderName} ${ test . slice ( this . #folderPath. length ) } ` , 'http://wpt' )
193
+ fileUrl . pathname = fileUrl . pathname . replace ( / \. j s $ / , '.html' )
194
+ fileUrl . search = variant
195
+ const result = {
196
+ test : fileUrl . href . slice ( fileUrl . origin . length ) ,
197
+ subtests : [ ] ,
198
+ status : ''
199
+ }
200
+
201
+ let report
191
202
if ( this . #appendReport) {
192
203
report = JSON . parse ( readFileSync ( this . #reportPath) )
193
-
194
- const fileUrl = new URL ( `/${ this . #folderName} ${ test . slice ( this . #folderPath. length ) } ` , 'http://wpt' )
195
- fileUrl . pathname = fileUrl . pathname . replace ( / \. j s $ / , '.html' )
196
- fileUrl . search = variant
197
-
198
- result = {
199
- test : fileUrl . href . slice ( fileUrl . origin . length ) ,
200
- subtests : [ ] ,
201
- status : 'OK'
202
- }
204
+ result . status = 'OK'
203
205
report . results . push ( result )
204
206
}
205
207
@@ -214,8 +216,8 @@ export class WPTRunner extends EventEmitter {
214
216
this . handleTestCompletion ( worker )
215
217
} else if ( message . type === 'error' ) {
216
218
this . #uncaughtExceptions. push ( { error : message . error , test } )
217
- this . #stats. failed += 1
218
- this . #stats. success -= 1
219
+ this . #stats. failedTests += 1
220
+ this . #stats. passedTests -= 1
219
221
}
220
222
} )
221
223
@@ -224,14 +226,27 @@ export class WPTRunner extends EventEmitter {
224
226
signal : AbortSignal . timeout ( timeout )
225
227
} )
226
228
227
- console . log ( colors ( `[${ finishedFiles } /${ total } ] PASSED - ${ test } ` , 'green' ) )
229
+ if ( result . subtests . some ( ( subtest ) => subtest ?. isExpectedFailure === false ) ) {
230
+ this . #stats. failedFiles += 1
231
+ console . log ( colors ( `[${ finishedFiles } /${ total } ] FAILED - ${ test } ` , 'red' ) )
232
+ } else {
233
+ this . #stats. passedFiles += 1
234
+ console . log ( colors ( `[${ finishedFiles } /${ total } ] PASSED - ${ test } ` , 'green' ) )
235
+ }
236
+
228
237
if ( variant ) console . log ( 'Variant:' , variant )
229
- console . log ( `Test took ${ ( performance . now ( ) - start ) . toFixed ( 2 ) } ms` )
238
+ console . log ( `File took ${ ( performance . now ( ) - start ) . toFixed ( 2 ) } ms` )
230
239
console . log ( '=' . repeat ( 96 ) )
231
240
} catch ( e ) {
232
- console . log ( `${ test } timed out after ${ timeout } ms` )
241
+ // If the worker is terminated by the timeout signal, the test is marked as failed
242
+ this . #stats. failedFiles += 1
243
+ console . log ( colors ( `[${ finishedFiles } /${ total } ] FAILED - ${ test } ` , 'red' ) )
244
+
245
+ if ( variant ) console . log ( 'Variant:' , variant )
246
+ console . log ( `File timed out after ${ timeout } ms` )
247
+ console . log ( '=' . repeat ( 96 ) )
233
248
} finally {
234
- if ( result ?. subtests . length > 0 ) {
249
+ if ( this . #appendReport && result ?. subtests . length > 0 ) {
235
250
writeFileSync ( this . #reportPath, JSON . stringify ( report ) )
236
251
}
237
252
@@ -248,50 +263,49 @@ export class WPTRunner extends EventEmitter {
248
263
* Called after a test has succeeded or failed.
249
264
*/
250
265
handleIndividualTestCompletion ( message , status , path , meta , wptResult ) {
251
- const { file, topLevel } = status
252
-
253
- if ( message . type === 'result' ) {
254
- this . #stats. completed += 1
266
+ this . #stats. completedTests += 1
255
267
256
- if ( message . result . status === 1 ) {
257
- let expectedFailure = false
258
- this . #stats. failed += 1
268
+ const { file, topLevel } = status
269
+ const isFailure = message . result . status === 1
259
270
260
- wptResult ?. subtests . push ( {
261
- status : 'FAIL' ,
262
- name : sanitizeUnpairedSurrogates ( message . result . name ) ,
263
- message : sanitizeUnpairedSurrogates ( message . result . message )
264
- } )
271
+ const testResult = {
272
+ status : isFailure ? 'FAIL' : 'PASS' ,
273
+ name : sanitizeUnpairedSurrogates ( message . result . name )
274
+ }
265
275
266
- const name = normalizeName ( message . result . name )
267
-
268
- if ( file . flaky ?. includes ( name ) ) {
269
- expectedFailure = true
270
- this . #stats. expectedFailures += 1
271
- } else if ( file . allowUnexpectedFailures || topLevel . allowUnexpectedFailures || file . fail ?. includes ( name ) ) {
272
- if ( ! file . allowUnexpectedFailures && ! topLevel . allowUnexpectedFailures ) {
273
- if ( Array . isArray ( file . fail ) ) {
274
- this . #statusOutput[ path ] ??= [ ]
275
- this . #statusOutput[ path ] . push ( name )
276
- }
276
+ if ( isFailure ) {
277
+ let isExpectedFailure = false
278
+ this . #stats. failedTests += 1
279
+
280
+ const name = normalizeName ( message . result . name )
281
+ const sanitizedMessage = sanitizeUnpairedSurrogates ( message . result . message )
282
+
283
+ if ( file . flaky ?. includes ( name ) ) {
284
+ isExpectedFailure = true
285
+ this . #stats. expectedFailures += 1
286
+ wptResult ?. subtests . push ( { ...testResult , message : sanitizedMessage , isExpectedFailure } )
287
+ } else if ( file . allowUnexpectedFailures || topLevel . allowUnexpectedFailures || file . fail ?. includes ( name ) ) {
288
+ if ( ! file . allowUnexpectedFailures && ! topLevel . allowUnexpectedFailures ) {
289
+ if ( Array . isArray ( file . fail ) ) {
290
+ this . #statusOutput[ path ] ??= [ ]
291
+ this . #statusOutput[ path ] . push ( name )
277
292
}
278
-
279
- expectedFailure = true
280
- this . #stats. expectedFailures += 1
281
- } else {
282
- process . exitCode = 1
283
- console . error ( message . result )
284
- }
285
- if ( ! expectedFailure ) {
286
- process . _rawDebug ( `Failed test: ${ path } ` )
287
293
}
294
+
295
+ isExpectedFailure = true
296
+ this . #stats. expectedFailures += 1
297
+ wptResult ?. subtests . push ( { ...testResult , message : sanitizedMessage , isExpectedFailure } )
288
298
} else {
289
- wptResult ?. subtests . push ( {
290
- status : 'PASS' ,
291
- name : sanitizeUnpairedSurrogates ( message . result . name )
292
- } )
293
- this . #stats. success += 1
299
+ wptResult ?. subtests . push ( { ...testResult , message : sanitizedMessage , isExpectedFailure } )
300
+ process . exitCode = 1
301
+ console . error ( message . result )
302
+ }
303
+ if ( ! isExpectedFailure ) {
304
+ process . _rawDebug ( `Failed test: ${ path } ` )
294
305
}
306
+ } else {
307
+ this . #stats. passedTests += 1
308
+ wptResult ?. subtests . push ( testResult )
295
309
}
296
310
}
297
311
@@ -313,16 +327,23 @@ export class WPTRunner extends EventEmitter {
313
327
}
314
328
315
329
this . emit ( 'completion' )
316
- const { completed, failed, success, expectedFailures, skipped } = this . #stats
330
+
331
+ const { passedFiles, failedFiles, skippedFiles } = this . #stats
332
+ console . log (
333
+ `File results for folder [${ this . #folderName} ]: ` +
334
+ `completed: ${ this . #files. length } , passed: ${ passedFiles } , failed: ${ failedFiles } , ` +
335
+ `skipped: ${ skippedFiles } `
336
+ )
337
+
338
+ const { completedTests, failedTests, passedTests, expectedFailures } = this . #stats
317
339
console . log (
318
- `[${ this . #folderName} ]: ` +
319
- `completed: ${ completed } , failed: ${ failed } , success : ${ success } , ` +
340
+ `Test results for folder [${ this . #folderName} ]: ` +
341
+ `completed: ${ completedTests } , failed: ${ failedTests } , passed : ${ passedTests } , ` +
320
342
`expected failures: ${ expectedFailures } , ` +
321
- `unexpected failures: ${ failed - expectedFailures } , ` +
322
- `skipped: ${ skipped } `
343
+ `unexpected failures: ${ failedTests - expectedFailures } `
323
344
)
324
345
325
- process . exit ( failed - expectedFailures ? 1 : process . exitCode )
346
+ process . exit ( failedTests - expectedFailures ? 1 : process . exitCode )
326
347
}
327
348
328
349
addInitScript ( code ) {
0 commit comments