// The toast list. Run by `npm test`, which Node runs with its built-in test // runner and type stripping, so the `.ts` module is imported as it is. import assert from "node:assert/strict"; import { test } from "node:test"; import { currentToasts, dismissToast, showToast, subscribeToasts, toastDuration, } from "../src/ui/toast/toasts.ts"; test("an error stays longer than the other tones", () => { assert.ok(toastDuration("error") > toastDuration("ok")); assert.equal(toastDuration("info"), toastDuration("ok")); }); test("a toast is listed with its tone and duration, oldest first", () => { const a = showToast("first", "ok"); const b = showToast("second", "error", 100); const list = currentToasts().filter((t) => t.id === a || t.id === b); assert.deepEqual( list.map((t) => [t.message, t.tone, t.duration]), [ ["first", "ok", toastDuration("ok")], ["second", "error", 100], ], ); dismissToast(a); dismissToast(b); }); test("dismissing removes one toast and tells the subscribers once", () => { const a = showToast("keep"); const b = showToast("drop"); let calls = 0; const stop = subscribeToasts(() => calls++); dismissToast(b); dismissToast(b); assert.equal(calls, 1); assert.ok(currentToasts().some((t) => t.id === a)); assert.ok(!currentToasts().some((t) => t.id === b)); stop(); dismissToast(a); assert.equal(calls, 1); });