40 lines
967 B
JavaScript
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);
|
|
});
|