75 lines
2.7 KiB
TypeScript
75 lines
2.7 KiB
TypeScript
import { describe, expect, it } from "@suaveplan/testing/runner";
|
|
import { SpritePlayerEvents } from "./events.js";
|
|
|
|
describe("SpritePlayerEvents", () => {
|
|
it("on subscribes and emit dispatches", { timeout: 5000 }, () => {
|
|
const events = new SpritePlayerEvents();
|
|
const seen: string[] = [];
|
|
events.on("play", (p) => seen.push(p.handleId));
|
|
events.emit("play", { handleId: "x", entryName: "hit", startedAt: 0 });
|
|
expect(seen).toEqual(["x"]);
|
|
});
|
|
|
|
it("unsubscribe stops dispatch", { timeout: 5000 }, () => {
|
|
const events = new SpritePlayerEvents();
|
|
const seen: string[] = [];
|
|
const off = events.on("stop", (p) => seen.push(p.handleId));
|
|
events.emit("stop", { handleId: "a", entryName: "x", fadeOutMs: 0 });
|
|
off();
|
|
events.emit("stop", { handleId: "b", entryName: "x", fadeOutMs: 0 });
|
|
expect(seen).toEqual(["a"]);
|
|
});
|
|
|
|
it("voice-stolen carries both handle ids", { timeout: 5000 }, () => {
|
|
const events = new SpritePlayerEvents();
|
|
let payload: { stolenId: string; replacedBy: string } | null = null;
|
|
events.on("voice-stolen", (p) => {
|
|
payload = p;
|
|
});
|
|
events.emit("voice-stolen", {
|
|
stolenId: "a",
|
|
replacedBy: "b",
|
|
entryName: "hit",
|
|
});
|
|
expect(payload).not.toBeNull();
|
|
expect(payload!.stolenId).toBe("a");
|
|
expect(payload!.replacedBy).toBe("b");
|
|
});
|
|
|
|
it("complete event includes duration", { timeout: 5000 }, () => {
|
|
const events = new SpritePlayerEvents();
|
|
const got: number[] = [];
|
|
events.on("complete", (p) => got.push(p.durationMs));
|
|
events.emit("complete", {
|
|
handleId: "x",
|
|
entryName: "hit",
|
|
durationMs: 1000,
|
|
});
|
|
expect(got).toEqual([1000]);
|
|
});
|
|
|
|
it("error event surfaces code and message", { timeout: 5000 }, () => {
|
|
const events = new SpritePlayerEvents();
|
|
let code = "";
|
|
events.on("error", (p) => {
|
|
code = p.code;
|
|
});
|
|
events.emit("error", {
|
|
handleId: "x",
|
|
entryName: "hit",
|
|
code: "AUDIO_SPRITE_PLAYER.PLAYBACK_FAILED",
|
|
message: "boom",
|
|
});
|
|
expect(code).toBe("AUDIO_SPRITE_PLAYER.PLAYBACK_FAILED");
|
|
});
|
|
|
|
it("clear removes every listener", { timeout: 5000 }, () => {
|
|
const events = new SpritePlayerEvents();
|
|
const seen: string[] = [];
|
|
events.on("play", (p) => seen.push(p.handleId));
|
|
events.clear();
|
|
events.emit("play", { handleId: "x", entryName: "x", startedAt: 0 });
|
|
expect(seen).toEqual([]);
|
|
});
|
|
});
|