[Init] Initial commit - NetMesh terminal manager
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
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
This commit is contained in:
58
application/state/sftp/useSftpTabsState.test.ts
Normal file
58
application/state/sftp/useSftpTabsState.test.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
import assert from "node:assert/strict";
|
||||
import test from "node:test";
|
||||
|
||||
import { createEmptyPane } from "./types.ts";
|
||||
import {
|
||||
closeSftpTabStateImmediately,
|
||||
removeSftpTabFromState,
|
||||
} from "./useSftpTabsState.ts";
|
||||
|
||||
test("closing the active SFTP tab selects its nearest remaining neighbor", () => {
|
||||
const left = createEmptyPane("left");
|
||||
const middle = createEmptyPane("middle");
|
||||
const right = createEmptyPane("right");
|
||||
|
||||
assert.deepEqual(removeSftpTabFromState({
|
||||
tabs: [left, middle, right],
|
||||
activeTabId: middle.id,
|
||||
}, middle.id), {
|
||||
tabs: [left, right],
|
||||
activeTabId: right.id,
|
||||
});
|
||||
});
|
||||
|
||||
test("closing a background SFTP tab preserves the active tab", () => {
|
||||
const active = createEmptyPane("active");
|
||||
const background = createEmptyPane("background");
|
||||
|
||||
assert.deepEqual(removeSftpTabFromState({
|
||||
tabs: [active, background],
|
||||
activeTabId: active.id,
|
||||
}, background.id), {
|
||||
tabs: [active],
|
||||
activeTabId: active.id,
|
||||
});
|
||||
});
|
||||
|
||||
test("closing a tab updates the live ref before React commits the state update", () => {
|
||||
const closing = createEmptyPane("closing");
|
||||
const remaining = createEmptyPane("remaining");
|
||||
const initial = {
|
||||
tabs: [closing, remaining],
|
||||
activeTabId: closing.id,
|
||||
};
|
||||
const tabsRef = { current: initial };
|
||||
let queuedUpdate: ((prev: typeof initial) => typeof initial) | undefined;
|
||||
|
||||
closeSftpTabStateImmediately({
|
||||
tabsRef,
|
||||
tabId: closing.id,
|
||||
setTabs: (update) => {
|
||||
queuedUpdate = update;
|
||||
},
|
||||
});
|
||||
|
||||
assert.deepEqual(tabsRef.current.tabs, [remaining]);
|
||||
assert.equal(tabsRef.current.activeTabId, remaining.id);
|
||||
assert.deepEqual(queuedUpdate?.(initial), tabsRef.current);
|
||||
});
|
||||
Reference in New Issue
Block a user