50 lines
2.1 KiB
TypeScript
50 lines
2.1 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
import {
|
|
DownloadTally,
|
|
isTranslateRequest,
|
|
isTranslateWorkerMessage,
|
|
} from "../src/worker/translateProtocol";
|
|
|
|
describe("isTranslateRequest", () => {
|
|
test("accepts a well-formed request", () => {
|
|
expect(
|
|
isTranslateRequest({ type: "translate", requestId: "t-1", modelId: "Xenova/opus-mt-da-en", units: ["Hej."] }),
|
|
).toBe(true);
|
|
});
|
|
|
|
test("rejects missing ids and non-string units", () => {
|
|
expect(isTranslateRequest({ type: "translate", modelId: "m", units: [] })).toBe(false);
|
|
expect(isTranslateRequest({ type: "translate", requestId: "t", modelId: "m", units: [1] })).toBe(false);
|
|
expect(isTranslateRequest({ type: "load", requestId: "t", modelId: "m", units: [] })).toBe(false);
|
|
expect(isTranslateRequest(null)).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("isTranslateWorkerMessage", () => {
|
|
test("accepts each reply type", () => {
|
|
for (const message of [
|
|
{ type: "translate-download", requestId: "t", loaded: 1, total: 2 },
|
|
{ type: "translate-progress", requestId: "t", done: 0, total: 3 },
|
|
{ type: "translate-result", requestId: "t", texts: ["Hello."] },
|
|
{ type: "translate-error", requestId: "t", message: "boom" },
|
|
]) {
|
|
expect(isTranslateWorkerMessage(message)).toBe(true);
|
|
}
|
|
});
|
|
|
|
test("rejects malformed replies and Whisper-worker messages", () => {
|
|
expect(isTranslateWorkerMessage({ type: "translate-progress", requestId: "t", done: "1", total: 3 })).toBe(false);
|
|
expect(isTranslateWorkerMessage({ type: "translate-result", texts: [] })).toBe(false);
|
|
expect(isTranslateWorkerMessage({ type: "result", requestId: "t", text: "", chunks: [] })).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("DownloadTally", () => {
|
|
test("sums bytes across files, updating each file in place", () => {
|
|
const tally = new DownloadTally();
|
|
expect(tally.update("onnx/encoder.onnx", 10, 100)).toEqual({ loaded: 10, total: 100 });
|
|
expect(tally.update("onnx/decoder.onnx", 5, 50)).toEqual({ loaded: 15, total: 150 });
|
|
expect(tally.update("onnx/encoder.onnx", 100, 100)).toEqual({ loaded: 105, total: 150 });
|
|
});
|
|
});
|