From 6eb61db7eabd0b20461bd1a911e76a18c3318af6 Mon Sep 17 00:00:00 2001 From: "paseo-bot[bot]" <266920839+paseo-bot[bot]@users.noreply.github.com> Date: Sat, 10 Oct 2026 14:23:46 +0200 Subject: [PATCH] test(terminal): compare restore with the actual fullscreen exit --- packages/server/src/terminal/terminal.test.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/server/src/terminal/terminal.test.ts b/packages/server/src/terminal/terminal.test.ts index df3abb08a7..0a7920f5bf 100644 --- a/packages/server/src/terminal/terminal.test.ts +++ b/packages/server/src/terminal/terminal.test.ts @@ -568,6 +568,7 @@ describe("createTerminal", () => { }); it("clears restored fullscreen content when the application leaves the alternate screen", async () => { + const exitOutput = "\x1b[?1049lPROMPT"; const session = trackSession( await createTerminal({ workspaceId: "ws-test", @@ -577,23 +578,27 @@ describe("createTerminal", () => { command: process.execPath, args: [ "-e", - "process.stdout.write('SHELL\\r\\n\\x1b[?1049h\\x1b[2J\\x1b[HFULLSCREEN'); setInterval(() => {}, 100000);", + `process.stdout.write('SHELL\\r\\n\\x1b[?1049h\\x1b[2J\\x1b[HFULLSCREEN'); process.stdin.setRawMode(true); process.stdin.on('data', () => process.stdout.write(${JSON.stringify(exitOutput)}));`, ], }), ); const state = await waitForState(session, (current) => getRowText(current, 0) === "FULLSCREEN"); + session.write("q"); + const exited = await waitForState(session, (current) => getRowText(current, 1) === "PROMPT"); + const expected = getLines(exited).join("\n").trim(); + expect(expected).toBe("SHELL\nPROMPT"); const restored = new xterm.Terminal({ cols: 80, rows: 10, allowProposedApi: true }); try { await new Promise((resolve) => restored.write(renderTerminalSnapshotToAnsi(state), resolve), ); expect(restored.buffer.active.getLine(0)?.translateToString(true)).toBe("FULLSCREEN"); - await new Promise((resolve) => restored.write("\x1b[?1049lPROMPT", resolve)); + await new Promise((resolve) => restored.write(exitOutput, resolve)); const visible = Array.from({ length: restored.rows }, (_, row) => restored.buffer.active.getLine(row)?.translateToString(true), ).join("\n"); expect(visible).not.toContain("FULLSCREEN"); - expect(visible.trim()).toBe("PROMPT"); + expect(visible.trim()).toBe(expected); } finally { restored.dispose(); }