|
|
@@ -94,9 +94,20 @@ describe('web e2e: Mermaid chat previews', () => {
|
|
|
expect(await page.locator('pre code').allTextContents()).toContain(INVALID)
|
|
|
expect(await images.first().evaluate(node => decodeURIComponent((node as HTMLImageElement).src))).toContain('共享渲染器')
|
|
|
const first = page.locator('.md-code-block').first()
|
|
|
+ const controls = first.locator('[class*="bannerWrap"]')
|
|
|
+ expect(await first.getByText('mermaid', { exact: true }).count()).toBe(0)
|
|
|
+ await page.mouse.move(0, 0)
|
|
|
+ expect(await controls.evaluate(node => getComputedStyle(node).opacity)).toBe('0')
|
|
|
+ await first.hover()
|
|
|
+ expect(await controls.evaluate(node => getComputedStyle(node).opacity)).toBe('1')
|
|
|
await first.getByRole('button', { name: 'Copy', exact: true }).click()
|
|
|
expect(await page.evaluate(() => navigator.clipboard.readText())).toBe(FLOW)
|
|
|
- await first.getByRole('button', { name: 'Source', exact: true }).click()
|
|
|
+ await page.mouse.move(0, 0)
|
|
|
+ await first.getByRole('button', { name: 'Source', exact: true }).focus()
|
|
|
+ expect(await controls.evaluate(node => getComputedStyle(node).opacity)).toBe('1')
|
|
|
+ await page.keyboard.press('Enter')
|
|
|
+ expect(await first.getByRole('button', { name: 'Preview', exact: true })
|
|
|
+ .evaluate(node => node === document.activeElement)).toBe(true)
|
|
|
expect(await first.locator('pre code').textContent()).toBe(FLOW)
|
|
|
await first.getByRole('button', { name: 'Preview', exact: true }).click()
|
|
|
await first.getByRole('img').waitFor()
|
|
|
@@ -106,6 +117,8 @@ describe('web e2e: Mermaid chat previews', () => {
|
|
|
expect(dialogs).toEqual([])
|
|
|
expect(tripwire.pageErrors).toEqual([])
|
|
|
expect(tripwire.warnings).toEqual([])
|
|
|
+ await page.getByRole('heading', { name: 'Mermaid previews' }).click()
|
|
|
+ await page.mouse.move(0, 0)
|
|
|
const snapshot = (await captureStableAria(page, '[class*="centerCol"]', scaffold.workspaceCwd))
|
|
|
.split(SEED_ID).join('{{seededId}}')
|
|
|
await compareOrRefreshGolden(join(SNAPSHOT_DIR, 'ui.expected.md'), snapshot, MODE)
|
|
|
@@ -113,11 +126,19 @@ describe('web e2e: Mermaid chat previews', () => {
|
|
|
}, 60_000)
|
|
|
|
|
|
it.skipIf(MODE === 'record')('localizes the preview and failure states in Chinese', async () => {
|
|
|
- const page = await browser.newPage({ viewport: { width: 1680, height: 1000 }, locale: 'zh-CN', timezoneId: 'Asia/Shanghai' })
|
|
|
+ const page = await browser.newPage({ viewport: { width: 1680, height: 1000 }, locale: 'zh-CN', timezoneId: 'Asia/Shanghai', hasTouch: true })
|
|
|
await openConversation(page, scaffold)
|
|
|
await expect.poll(() => page.getByRole('img', { name: 'Mermaid 图表' }).count(), { timeout: 20_000 }).toBe(3)
|
|
|
expect(await page.getByRole('button', { name: '源码', exact: true }).count()).toBe(4)
|
|
|
+ const controls = page.locator('.md-code-block').first().locator('[class*="bannerWrap"]')
|
|
|
+ expect(await controls.evaluate(node => getComputedStyle(node).opacity)).toBe('1')
|
|
|
+ expect(await page.getByRole('button', { name: '源码', exact: true }).first()
|
|
|
+ .evaluate(node => node.getBoundingClientRect().width)).toBe(44)
|
|
|
expect(await page.getByText('无法渲染此图表,源码如下。', { exact: true }).count()).toBe(1)
|
|
|
+ const firstImage = page.getByRole('img', { name: 'Mermaid 图表' }).first()
|
|
|
+ await expect.poll(() => firstImage.evaluate(node => (node as HTMLImageElement).naturalWidth)).toBeGreaterThan(0)
|
|
|
+ expect(await controls.evaluate(node => node.getBoundingClientRect().top))
|
|
|
+ .toBeGreaterThanOrEqual(await firstImage.evaluate(node => node.getBoundingClientRect().bottom))
|
|
|
const snapshot = (await captureStableAria(page, '[class*="centerCol"]', scaffold.workspaceCwd))
|
|
|
.split(SEED_ID).join('{{seededId}}')
|
|
|
await compareOrRefreshGolden(join(SNAPSHOT_DIR, 'zh.expected.md'), snapshot, MODE)
|