import { expect, test } from '@playwright/test'; import { SIGNATURE_COPY } from '../src/app/core/content/signature-copy'; test.describe('terminal dock', () => { test('walks collapsed, expanded and maximized and runs the grammar', async ({ page, }, testInfo) => { const copy = SIGNATURE_COPY.de.terminal; await page.goto('/'); const trigger = page.locator('.terminal-dock-trigger'); const panel = page.locator('.terminal-dock-panel'); const input = page.locator('#terminal-dock-input'); const log = page.locator('.terminal-dock-log'); const maximize = page.locator('.terminal-dock-control[aria-pressed]'); await expect(trigger).toBeVisible(); await expect(panel).toHaveCount(0); await trigger.click(); await expect(panel).toBeVisible(); await expect(page.locator('.terminal-dock-prompt')).toContainText(copy.prompt); if (testInfo.project.name === 'mobile') { const box = await panel.boundingBox(); expect(box, 'bottom-sheet panel').toBeTruthy(); expect(box!.width).toBeGreaterThan(300); } else { await maximize.click(); await expect(maximize).toHaveAttribute('aria-pressed', 'true'); await maximize.click(); await expect(maximize).toHaveAttribute('aria-pressed', 'false'); } await input.fill('navigate pitch'); await input.press('Enter'); await page.waitForURL('**/pitch'); await expect(page).toHaveURL(/\/pitch$/); await expect(log).toContainText(`${copy.prompt} navigate pitch`); await input.press('ArrowUp'); await expect(input).toHaveValue('navigate pitch'); await input.fill('history'); await input.press('Enter'); await expect(log).toContainText(copy.historyIntro); await expect(log).toContainText('navigate pitch'); await input.fill('clear'); await input.press('Enter'); await expect(log).toHaveText(copy.clearedMessage); await input.fill('navigate p'); await input.press('Tab'); await expect(log).toContainText('pitch'); await expect(log).toContainText('projects'); await input.fill('navigate nowhere'); await input.press('Enter'); await expect(log).toContainText(copy.validTargetsLabel); await expect(log).toContainText('pitch'); await input.fill('nav'); await input.press('Tab'); await expect(input).toHaveValue('navigate'); }); test('Escape from a panel control collapses the dock and returns focus to the trigger', async ({ page, }) => { const copy = SIGNATURE_COPY.de.terminal; await page.goto('/'); const trigger = page.locator('.terminal-dock-trigger'); const panel = page.locator('.terminal-dock-panel'); await trigger.click(); await expect(panel).toBeVisible(); const collapse = page.getByRole('button', { name: copy.collapseLabel }); await collapse.focus(); await expect(collapse).toBeFocused(); await page.keyboard.press('Escape'); await expect(panel).toHaveCount(0); await expect(trigger).toBeFocused(); }); });