Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
82 lines
2.1 KiB
TypeScript
82 lines
2.1 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
|
|
import { connectHostsStaggered } from "./connectHostsStaggered";
|
|
|
|
test("connects the first target synchronously and defers the rest", () => {
|
|
const connected: string[] = [];
|
|
const scheduled: Array<{ delay: number; run: () => void }> = [];
|
|
|
|
connectHostsStaggered(["a", "b", "c"], (h) => connected.push(h), {
|
|
stepMs: 100,
|
|
schedule: (cb, delay) => {
|
|
scheduled.push({ delay, run: cb });
|
|
},
|
|
});
|
|
|
|
// First terminal mounts immediately so a tab appears without waiting.
|
|
assert.deepEqual(connected, ["a"]);
|
|
// The remaining two are deferred, not run on the same frame.
|
|
assert.equal(scheduled.length, 2);
|
|
});
|
|
|
|
test("running the scheduled callbacks connects the rest in order", () => {
|
|
const connected: string[] = [];
|
|
const scheduled: Array<() => void> = [];
|
|
|
|
connectHostsStaggered(["a", "b", "c"], (h) => connected.push(h), {
|
|
schedule: (cb) => {
|
|
scheduled.push(cb);
|
|
},
|
|
});
|
|
|
|
scheduled.forEach((run) => run());
|
|
|
|
assert.deepEqual(connected, ["a", "b", "c"]);
|
|
});
|
|
|
|
test("spreads deferred connects across increasing delays", () => {
|
|
const delays: number[] = [];
|
|
|
|
connectHostsStaggered(["a", "b", "c", "d"], () => {}, {
|
|
stepMs: 80,
|
|
schedule: (_cb, delay) => {
|
|
delays.push(delay);
|
|
},
|
|
});
|
|
|
|
// index 1..n each scheduled one step further out so no two heavy mounts
|
|
// land on the same frame.
|
|
assert.deepEqual(delays, [80, 160, 240]);
|
|
});
|
|
|
|
test("single target connects synchronously with no scheduling", () => {
|
|
const connected: string[] = [];
|
|
let scheduleCalls = 0;
|
|
|
|
connectHostsStaggered(["only"], (h) => connected.push(h), {
|
|
schedule: () => {
|
|
scheduleCalls += 1;
|
|
},
|
|
});
|
|
|
|
assert.deepEqual(connected, ["only"]);
|
|
assert.equal(scheduleCalls, 0);
|
|
});
|
|
|
|
test("empty target list does nothing", () => {
|
|
let connectCalls = 0;
|
|
let scheduleCalls = 0;
|
|
|
|
connectHostsStaggered([], () => {
|
|
connectCalls += 1;
|
|
}, {
|
|
schedule: () => {
|
|
scheduleCalls += 1;
|
|
},
|
|
});
|
|
|
|
assert.equal(connectCalls, 0);
|
|
assert.equal(scheduleCalls, 0);
|
|
});
|