1- import type {
2- ReadyEvent ,
3- ResultEvent ,
4- } from "../../shared/src/interfaces/test-runner" ;
1+ import type { ReadyEvent } from "../../shared/src/interfaces/test-runner" ;
52import type {
63 InitEvent ,
74 TestEvent ,
@@ -15,6 +12,7 @@ import {
1512 TEST_EVALUATOR_SCRIPT_ID ,
1613 TEST_EVALUATOR_HOOKS_ID ,
1714} from "../../shared/src/ids" ;
15+ import { post } from "./awaitable-post" ;
1816
1917interface Runner {
2018 init ( opts ?: InitOptions ) : Promise < void > ;
@@ -143,22 +141,13 @@ ${opts.source}`;
143141 }
144142
145143 runTest ( test : string ) {
146- const result = new Promise < Pass | Fail > ( ( resolve ) => {
147- const listener = ( event : ResultEvent ) => {
148- if (
149- event . origin === "null" &&
150- event . source === this . #testEvaluator. contentWindow
151- ) {
152- window . removeEventListener ( "message" , listener ) ;
153- resolve ( event . data . value ) ;
154- }
155- } ;
156-
157- window . addEventListener ( "message" , listener ) ;
158- } ) ;
159-
160- const msg : TestEvent [ "data" ] = { type : "test" , value : test } ;
161- this . #testEvaluator. contentWindow ?. postMessage ( msg , "*" ) ;
144+ const result = post < { value : Pass | Fail } > ( {
145+ messenger : this . #testEvaluator. contentWindow ! ,
146+ message : {
147+ type : "test" ,
148+ value : test ,
149+ } as TestEvent [ "data" ] ,
150+ } ) . then ( ( { value } ) => value ) ;
162151
163152 return result ;
164153 }
@@ -222,21 +211,16 @@ export class WorkerTestRunner implements Runner {
222211 } ) ;
223212 } , timeout ) ;
224213 } ) ;
225- const result = new Promise < Pass | Fail > ( ( resolve ) => {
226- const listener = ( event : ResultEvent ) => {
227- this . #testEvaluator. removeEventListener ( "message" , listener ) ;
228- // TODO: differentiate between messages
229- resolve ( event . data . value ) ;
230- } ;
231-
232- this . #testEvaluator. addEventListener ( "message" , listener ) ;
233- } ) ;
234214
235215 const msg : TestEvent [ "data" ] = {
236216 type : "test" ,
237217 value : test ,
238218 } ;
239- this . #testEvaluator. postMessage ( msg ) ;
219+
220+ const result = post < { value : Pass | Fail } > ( {
221+ messenger : this . #testEvaluator,
222+ message : msg ,
223+ } ) . then ( ( { value } ) => value ) ;
240224
241225 try {
242226 return await Promise . race ( [ result , terminate ] ) ;
0 commit comments