mirror of
https://github.com/deepseek-ai/deepseek-harness.git
synced 2026-09-14 04:01:35 +00:00
73 lines
3.2 KiB
TypeScript
73 lines
3.2 KiB
TypeScript
// The built shared Web/Electron composer hides guidance as soon as a draft contains whitespace.
|
|
import { fileURLToPath } from 'node:url'
|
|
import { chromium, type Page } from 'playwright'
|
|
import { expect, it } from 'vitest'
|
|
import { assertFixtureInventory, compareOrRefreshGolden, launchWebScaffold, watchConsole, webSnapshotMode } from './scaffold.ts'
|
|
import { connectFreshWorkspace, newEnglishPage, saveFailureShot } from './support.ts'
|
|
|
|
it('hides the placeholder for typed and pasted spaces and restores it after deletion', async () => {
|
|
const scaffold = await launchWebScaffold({})
|
|
try {
|
|
const browser = await chromium.launch()
|
|
let failurePage: Page | undefined
|
|
try {
|
|
const page = await newEnglishPage(browser)
|
|
failurePage = page
|
|
const tripwire = watchConsole(page)
|
|
await page.goto(scaffold.authenticatedUrl)
|
|
await connectFreshWorkspace(page, scaffold.workspaceCwd, 'composer-placeholder')
|
|
const input = page.locator('[data-composer-input][contenteditable="true"]').first()
|
|
const placeholder = page.locator('[data-composer-placeholder]').first()
|
|
const observations: string[] = []
|
|
const observe = async (label: string, visible: boolean) => {
|
|
await expect.poll(() => placeholder.isVisible()).toBe(visible)
|
|
observations.push(`- ${label}: placeholder ${visible ? 'visible' : 'hidden'}`)
|
|
}
|
|
const clear = async () => {
|
|
await input.click()
|
|
await page.keyboard.press('ControlOrMeta+KeyA')
|
|
await page.keyboard.press('Backspace')
|
|
}
|
|
await observe('Empty draft', true)
|
|
await input.click()
|
|
await page.keyboard.press('Space')
|
|
await observe('Single space', false)
|
|
await page.keyboard.press('Space')
|
|
await page.keyboard.press('Space')
|
|
await observe('Consecutive spaces', false)
|
|
await page.keyboard.press('Tab')
|
|
await input.click()
|
|
await observe('Focus restored', false)
|
|
const draftMarkup = await input.innerHTML()
|
|
await page.keyboard.press('Enter')
|
|
expect(await input.innerHTML()).toBe(draftMarkup)
|
|
await observe('Whitespace submission rejected', false)
|
|
await clear()
|
|
await observe('All content deleted', true)
|
|
await page.context().grantPermissions(['clipboard-read', 'clipboard-write'])
|
|
await page.evaluate(() => navigator.clipboard.writeText(' '))
|
|
await page.keyboard.press('ControlOrMeta+KeyV')
|
|
await expect.poll(() => input.textContent()).toBe(' ')
|
|
await observe('Pasted spaces', false)
|
|
await clear()
|
|
await observe('Pasted content deleted', true)
|
|
await assertFixtureInventory(
|
|
fileURLToPath(new URL('./expected/composer-placeholder', import.meta.url)), ['visibility.expected.md'],
|
|
)
|
|
expect(tripwire.pageErrors).toEqual([])
|
|
expect(tripwire.warnings).toEqual([])
|
|
await compareOrRefreshGolden(
|
|
fileURLToPath(new URL('./expected/composer-placeholder/visibility.expected.md', import.meta.url)),
|
|
observations.join('\n'), webSnapshotMode(),
|
|
)
|
|
} catch (error) {
|
|
if (failurePage !== undefined) await saveFailureShot(failurePage, 'web-e2e-composer-placeholder')
|
|
throw error
|
|
} finally {
|
|
await browser.close()
|
|
}
|
|
} finally {
|
|
await scaffold.close()
|
|
}
|
|
})
|