1- import { EventEmitter , once } from 'node:events'
1+ import { EventEmitter } from 'node:events'
22import { readdirSync , readFileSync , statSync } from 'node:fs'
33import { basename , isAbsolute , join , resolve } from 'node:path'
44import { fileURLToPath } from 'node:url'
@@ -77,8 +77,10 @@ export class WPTRunner extends EventEmitter {
7777 return [ ...files ]
7878 }
7979
80- async run ( ) {
80+ run ( ) {
8181 const workerPath = fileURLToPath ( join ( import . meta. url , '../worker.mjs' ) )
82+ /** @type {Set<Worker> } */
83+ const activeWorkers = new Set ( )
8284
8385 for ( const test of this . #files) {
8486 const code = test . includes ( '.sub.' )
@@ -99,6 +101,8 @@ export class WPTRunner extends EventEmitter {
99101 }
100102 } )
101103
104+ activeWorkers . add ( worker )
105+
102106 worker . on ( 'message' , ( message ) => {
103107 if ( message . type === 'result' ) {
104108 this . handleIndividualTestCompletion ( message , basename ( test ) )
@@ -107,17 +111,14 @@ export class WPTRunner extends EventEmitter {
107111 }
108112 } )
109113
110- await once ( worker , 'exit' )
111- }
114+ worker . once ( 'exit' , ( ) => {
115+ activeWorkers . delete ( worker )
112116
113- this . emit ( 'completion' )
114- const { completed, failed, success, expectedFailures } = this . #stats
115- console . log (
116- `[${ this . #folderName} ]: ` +
117- `Completed: ${ completed } , failed: ${ failed } , success: ${ success } , ` +
118- `expected failures: ${ expectedFailures } , ` +
119- `unexpected failures: ${ failed - expectedFailures } `
120- )
117+ if ( activeWorkers . size === 0 ) {
118+ this . handleRunnerCompletion ( )
119+ }
120+ } )
121+ }
121122 }
122123
123124 /**
@@ -156,6 +157,20 @@ export class WPTRunner extends EventEmitter {
156157 worker . terminate ( )
157158 }
158159
160+ /**
161+ * Called after every test has completed.
162+ */
163+ handleRunnerCompletion ( ) {
164+ this . emit ( 'completion' )
165+ const { completed, failed, success, expectedFailures } = this . #stats
166+ console . log (
167+ `[${ this . #folderName} ]: ` +
168+ `Completed: ${ completed } , failed: ${ failed } , success: ${ success } , ` +
169+ `expected failures: ${ expectedFailures } , ` +
170+ `unexpected failures: ${ failed - expectedFailures } `
171+ )
172+ }
173+
159174 addInitScript ( code ) {
160175 this . #initScripts. push ( code )
161176 }
0 commit comments