| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- 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, project }) => {
- await project.open()
- const name = `OPENCODE_E2E_RECONNECT_${Date.now()}`
- const token = `E2E_RECONNECT_${Date.now()}`
- await project.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,
- })
- })
|