mirror of
https://github.com/nodejs/node.git
synced 2025-08-15 13:48:44 +02:00

PR-URL: https://github.com/nodejs/node/pull/59311 Refs: https://github.com/nodejs/node/issues/58987 Refs: https://github.com/nodejs/node/issues/59310 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
52 lines
1.6 KiB
JavaScript
52 lines
1.6 KiB
JavaScript
/**
|
|
* AudioWorkletProcessor intended for hosting a ShadowRealm and running a test
|
|
* inside of that ShadowRealm.
|
|
*/
|
|
globalThis.TestRunner = class TestRunner extends AudioWorkletProcessor {
|
|
constructor() {
|
|
super();
|
|
this.createShadowRealmAndStartTests();
|
|
}
|
|
|
|
/**
|
|
* Fetch adaptor function intended as a drop-in replacement for fetchAdaptor()
|
|
* (see testharness-shadowrealm-outer.js), but it does not assume fetch() is
|
|
* present in the realm. Instead, it relies on setupFakeFetchOverMessagePort()
|
|
* having been called on the port on the other side of this.port's channel.
|
|
*/
|
|
fetchOverPortExecutor(resource) {
|
|
return (resolve, reject) => {
|
|
const listener = (event) => {
|
|
if (typeof event.data !== "string" || !event.data.startsWith("fetchResult::")) {
|
|
return;
|
|
}
|
|
|
|
const result = event.data.slice("fetchResult::".length);
|
|
if (result.startsWith("success::")) {
|
|
resolve(result.slice("success::".length));
|
|
} else {
|
|
reject(result.slice("fail::".length));
|
|
}
|
|
|
|
this.port.removeEventListener("message", listener);
|
|
}
|
|
this.port.addEventListener("message", listener);
|
|
this.port.start();
|
|
this.port.postMessage(`fetchRequest::${resource}`);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Async method, which is patched over in
|
|
* (test).any.audioworklet-shadowrealm.js; see serve.py
|
|
*/
|
|
async createShadowRealmAndStartTests() {
|
|
throw new Error("Forgot to overwrite this method!");
|
|
}
|
|
|
|
/** Overrides AudioWorkletProcessor.prototype.process() */
|
|
process() {
|
|
return false;
|
|
}
|
|
};
|
|
registerProcessor("test-runner", TestRunner);
|