test: playwright smoke (chromium + firefox) for real scroll and dots fallback
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
import { expect, test } from '@playwright/test';
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
c: { next(): void; readonly index: number };
|
||||
}
|
||||
}
|
||||
|
||||
const scrollLeft = () => document.getElementById('t')?.scrollLeft ?? 0;
|
||||
|
||||
test('next() scrolls the track and updates index', async ({ page }) => {
|
||||
await page.goto('/e2e/demo.html');
|
||||
const before = await page.evaluate(scrollLeft);
|
||||
await page.evaluate(() => window.c.next());
|
||||
await page.waitForTimeout(500); // smooth scroll settle
|
||||
const after = await page.evaluate(scrollLeft);
|
||||
expect(after).toBeGreaterThan(before);
|
||||
await expect.poll(() => page.evaluate(() => window.c.index)).toBe(1);
|
||||
});
|
||||
|
||||
test('clicking a dot navigates (fallback path on Firefox)', async ({ page, browserName }) => {
|
||||
// dots() self-gates: on Chromium native ::scroll-marker is present, so it no-ops.
|
||||
// Firefox lacks native markers — the JS fallback is the path that must pass.
|
||||
test.skip(browserName !== 'firefox', 'dots() no-ops where native ::scroll-marker exists');
|
||||
await page.goto('/e2e/demo.html');
|
||||
await page.locator('#dots button').nth(2).click();
|
||||
await page.waitForTimeout(500);
|
||||
await expect.poll(() => page.evaluate(() => window.c.index)).toBe(2);
|
||||
});
|
||||
Reference in New Issue
Block a user