Files
boss/tests/local-agent-serialized-runner.test.mjs
2026-03-31 21:49:46 +08:00

40 lines
967 B
JavaScript

import test from "node:test";
import assert from "node:assert/strict";
import { createSerializedRunner } from "../local-agent/serialized-runner.mjs";
test("createSerializedRunner coalesces overlapping calls into the same promise", async () => {
let runs = 0;
let release;
const gate = new Promise((resolve) => {
release = resolve;
});
const runner = createSerializedRunner(async () => {
runs += 1;
await gate;
return { runs };
});
const first = runner();
const second = runner();
assert.equal(first, second);
assert.equal(runs, 1);
release();
const result = await first;
assert.deepEqual(result, { runs: 1 });
});
test("createSerializedRunner allows the next call after the current run finishes", async () => {
let runs = 0;
const runner = createSerializedRunner(async () => {
runs += 1;
return runs;
});
assert.equal(await runner(), 1);
assert.equal(await runner(), 2);
assert.equal(runs, 2);
});