diff options
| author | Adam <[email protected]> | 2026-03-13 08:56:48 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-13 08:56:48 -0500 |
| commit | c9e9dbeee1ceb5af3d1b1ce292317390286fe7a0 (patch) | |
| tree | e679df64078db58eadb3cba2d1ac65b170175360 /packages/app/e2e/terminal | |
| parent | b88b323049ed7ad7bf41fbec6ce66247ec4047ab (diff) | |
| download | opencode-c9e9dbeee1ceb5af3d1b1ce292317390286fe7a0.tar.gz opencode-c9e9dbeee1ceb5af3d1b1ce292317390286fe7a0.zip | |
fix(app): terminal cloning without retry (#17354)
Diffstat (limited to 'packages/app/e2e/terminal')
| -rw-r--r-- | packages/app/e2e/terminal/terminal-reconnect.spec.ts | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/packages/app/e2e/terminal/terminal-reconnect.spec.ts b/packages/app/e2e/terminal/terminal-reconnect.spec.ts new file mode 100644 index 000000000..b03ed8956 --- /dev/null +++ b/packages/app/e2e/terminal/terminal-reconnect.spec.ts @@ -0,0 +1,46 @@ +import type { Page } from "@playwright/test" +import { disconnectTerminal, runTerminal, terminalConnects, waitTerminalReady } from "../actions" +import { test, expect } from "../fixtures" +import { terminalSelector } from "../selectors" +import { terminalToggleKey } from "../utils" + +async function open(page: Page) { + const term = page.locator(terminalSelector).first() + const visible = await term.isVisible().catch(() => false) + if (!visible) await page.keyboard.press(terminalToggleKey) + await waitTerminalReady(page, { term }) + return term +} + +test("terminal reconnects without replacing the pty", async ({ page, withProject }) => { + await withProject(async ({ gotoSession }) => { + const name = `OPENCODE_E2E_RECONNECT_${Date.now()}` + const token = `E2E_RECONNECT_${Date.now()}` + + await gotoSession() + + const term = await open(page) + const id = await term.getAttribute("data-pty-id") + if (!id) throw new Error("Active terminal missing data-pty-id") + + const prev = await terminalConnects(page, { term }) + + await runTerminal(page, { + term, + cmd: `export ${name}=${token}; echo ${token}`, + token, + }) + + await disconnectTerminal(page, { term }) + + await expect.poll(() => terminalConnects(page, { term }), { timeout: 15_000 }).toBeGreaterThan(prev) + await expect.poll(() => term.getAttribute("data-pty-id"), { timeout: 5_000 }).toBe(id) + + await runTerminal(page, { + term, + cmd: `echo $${name}`, + token, + timeout: 15_000, + }) + }) +}) |
