Skip to content
25 linesCodeBlameRaw
1import assert from "node:assert/strict";
2import { test } from "node:test";
3
4import { MARK_TTL_MS, type Marks, takeMark } from "./one-tab.ts";
5
6function memory(): Marks & { data: Map<string, string> } {
7 const data = new Map<string, string>();
8 return { data, get: (k) => data.get(k) ?? null, set: (k, v) => void data.set(k, v), keys: () => [...data.keys()], remove: (k) => void data.delete(k) };
9}
10
11test("the first tab to claim an arrival pings, and every other tab stays quiet", () => {
12 const shared = memory();
13 assert.equal(takeMark(shared, "msg:1", 1_000), true);
14 assert.equal(takeMark(shared, "msg:1", 1_200), false);
15 assert.equal(takeMark(shared, "msg:2", 1_300), true);
16});
17
18test("old marks are cleared as tabs claim, and other keys are left alone", () => {
19 const shared = memory();
20 shared.set("g1t:pinged:msg:old", "0");
21 shared.set("g1t:pinged:msg:bad", "nope");
22 shared.set("g1t_theme", "dark");
23 takeMark(shared, "msg:new", MARK_TTL_MS + 1);
24 assert.deepEqual([...shared.data.keys()].sort(), ["g1t:pinged:msg:new", "g1t_theme"]);
25});