fix: harden web terminal paste and reconnect
- Queue bounded ordered terminal input so acknowledgements remain responsive - Prevent stale sockets and retries from replacing healthy connections - Preserve desktop scrollback behavior and add terminal regression coverage Quality gates: frontend tests (91 passed), typecheck, lint, build, Python compilation, LSP diagnostics. Backend pytest skipped by user request.
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import { getTerminalScrollbackLimit } from "./terminal.tsx";
|
||||
import {
|
||||
getTerminalScrollbackLimit,
|
||||
isCurrentWebSocket,
|
||||
shouldRetryWebSocketClose,
|
||||
} from "./terminal.tsx";
|
||||
|
||||
describe("getTerminalScrollbackLimit", () => {
|
||||
it("retains normal-buffer history for custom mobile swipe scrolling", () => {
|
||||
@@ -10,4 +14,19 @@ describe("getTerminalScrollbackLimit", () => {
|
||||
it("keeps desktop scrollback disabled to prevent stale-frame wheel scrolling", () => {
|
||||
expect(getTerminalScrollbackLimit(false)).toBe(0);
|
||||
});
|
||||
|
||||
it("rejects stale WebSocket callbacks after a replacement connection", () => {
|
||||
const current = {} as WebSocket;
|
||||
const stale = {} as WebSocket;
|
||||
|
||||
expect(isCurrentWebSocket(current, current)).toBe(true);
|
||||
expect(isCurrentWebSocket(current, stale)).toBe(false);
|
||||
});
|
||||
|
||||
it("retries a heartbeat timeout but not a server socket replacement", () => {
|
||||
expect(shouldRetryWebSocketClose(4000, "Heartbeat timeout")).toBe(true);
|
||||
expect(shouldRetryWebSocketClose(4000, "New connection established")).toBe(
|
||||
false,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user