54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import type { ThreadWorkerLike } from "../../src/communicator/worker-thread/worker-thread-communicator.js";
|
|
|
|
interface Listener {
|
|
event: string;
|
|
handler: (event: { data?: unknown; error?: unknown }) => void;
|
|
}
|
|
|
|
export interface FakeThreadWorker extends ThreadWorkerLike {
|
|
deliver(message: unknown): void;
|
|
emitError(error: unknown): void;
|
|
emitExit(): void;
|
|
posted: unknown[];
|
|
terminated: boolean;
|
|
}
|
|
|
|
export function makeFakeThreadWorker(): FakeThreadWorker {
|
|
const listeners: Listener[] = [];
|
|
const worker: FakeThreadWorker = {
|
|
posted: [],
|
|
terminated: false,
|
|
postMessage(message: unknown): void {
|
|
worker.posted.push(message);
|
|
},
|
|
addEventListener(event, handler): void {
|
|
listeners.push({ event, handler });
|
|
},
|
|
terminate(): void {
|
|
worker.terminated = true;
|
|
},
|
|
deliver(message: unknown): void {
|
|
for (const l of listeners) {
|
|
if (l.event === "message") {
|
|
l.handler({ data: message });
|
|
}
|
|
}
|
|
},
|
|
emitError(error: unknown): void {
|
|
for (const l of listeners) {
|
|
if (l.event === "error") {
|
|
l.handler({ error });
|
|
}
|
|
}
|
|
},
|
|
emitExit(): void {
|
|
for (const l of listeners) {
|
|
if (l.event === "exit") {
|
|
l.handler({});
|
|
}
|
|
}
|
|
},
|
|
};
|
|
return worker;
|
|
}
|