Source code

Revision control

Copy as Markdown

Other Tools

/**
* 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);