import { expect, onTestFinished, test } from 'vitest'
import { commands, page } from 'vitest/browser'
// tests for full snapshot/replay integration.
// partly extracted from artifact metadata tests in
// test/browser/fixtures/trace/*.test.ts
test('simple', async () => {
document.body.innerHTML = ''
await page.getByRole('button').mark('Render simple')
document.body.innerHTML = ''
await page.getByRole('button').mark('Render another')
})
test('switch-target', async () => {
document.body.innerHTML = ''
await page.getByRole('button').mark('Render switch target')
})
test('multiple-match', async () => {
document.body.innerHTML = ''
await page.getByRole('button').mark('Render multiple')
})
test('popover', async () => {
document.body.innerHTML = '
Popover content
'
const popover = document.querySelector('[popover]')!
const popoverContent = page.getByText('Popover content')
await popoverContent.mark('Render closed popover')
popover.showPopover()
await popoverContent.mark('Render open popover')
})
test('pseudo-state', async () => {
document.body.innerHTML = `
`
await page.getByRole('button', { name: 'Test hover 1' }).hover()
await page.getByRole('button', { name: 'Test hover 2' }).click()
await page.getByPlaceholder('focus-placeholder').click()
await page.getByPlaceholder('focus-placeholder').fill('focus-done')
await page.getByPlaceholder('focus-within-placeholder').fill('focus-within-done')
await (commands as any).mousedown('.test-active')
await page.getByRole('button', { name: 'Test active' }).mark('Test active')
await page.getByPlaceholder('focus-visible-placeholder').fill('focus-visible-done')
})
test('css-link', async () => {
const link = document.createElement('link')
link.rel = 'stylesheet'
link.href = '/assets/trace-style.css'
document.head.append(link)
onTestFinished(() => {
link.remove()
})
document.body.innerHTML = ''
await expect.element(page.getByRole('button', { name: 'Linked CSS' }))
.toHaveStyle({ color: 'rgb(50, 100, 255)' })
})
test('image', async () => {
document.body.innerHTML = '
'
await expect.element(page.getByAltText('local trace asset'))
.not
.toHaveProperty('naturalWidth', 0)
await page.getByAltText('local trace asset').mark('Render image')
})
test('zoom', async () => {
// three centered buttons on a grid background with a border to see zoom and cutoff
await page.viewport(400, 600)
document.body.innerHTML = `
0,0
400,600
`
await page.mark('Render zoom')
})