1
- import { EventEmitter , once } from 'node:events'
1
+ import { EventEmitter } from 'node:events'
2
2
import { readdirSync , readFileSync , statSync } from 'node:fs'
3
3
import { basename , isAbsolute , join , resolve } from 'node:path'
4
4
import { fileURLToPath } from 'node:url'
@@ -77,8 +77,10 @@ export class WPTRunner extends EventEmitter {
77
77
return [ ...files ]
78
78
}
79
79
80
- async run ( ) {
80
+ run ( ) {
81
81
const workerPath = fileURLToPath ( join ( import . meta. url , '../worker.mjs' ) )
82
+ /** @type {Set<Worker> } */
83
+ const activeWorkers = new Set ( )
82
84
83
85
for ( const test of this . #files) {
84
86
const code = test . includes ( '.sub.' )
@@ -99,6 +101,8 @@ export class WPTRunner extends EventEmitter {
99
101
}
100
102
} )
101
103
104
+ activeWorkers . add ( worker )
105
+
102
106
worker . on ( 'message' , ( message ) => {
103
107
if ( message . type === 'result' ) {
104
108
this . handleIndividualTestCompletion ( message , basename ( test ) )
@@ -107,17 +111,14 @@ export class WPTRunner extends EventEmitter {
107
111
}
108
112
} )
109
113
110
- await once ( worker , 'exit' )
111
- }
114
+ worker . once ( 'exit' , ( ) => {
115
+ activeWorkers . delete ( worker )
112
116
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
+ }
121
122
}
122
123
123
124
/**
@@ -156,6 +157,20 @@ export class WPTRunner extends EventEmitter {
156
157
worker . terminate ( )
157
158
}
158
159
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
+
159
174
addInitScript ( code ) {
160
175
this . #initScripts. push ( code )
161
176
}
0 commit comments