import { test, expect, afterEach, vi } from 'vitest'; import { page, userEvent, server } from 'vitest/browser'; import { createLab } from '../public/model.js'; import '../public/component.css'; let cleanup, user; afterEach(async()=>{try{await user?.cleanup();}finally{cleanup?.();document.body.replaceChildren();}}); for (const width of [1280,390,296]) { test(`Browser Mode: disclosure и клавиатура, viewport ${width}`,async()=>{ await page.viewport(width,800); // Preview 5.1.0 invokes advanceTimers even with real timers (including delay=0). // Keep real time here; advance the mocked clock only when a test actually enables it. user=server.provider==='preview' ? userEvent.setup({advanceTimers:delay=>vi.isFakeTimers()?vi.advanceTimersByTimeAsync(delay):Promise.resolve()}) : userEvent.setup(); const root=document.createElement('main');document.body.append(root);root.className='demo-component'; cleanup=createLab('fixed').mountDisclosure(root); await user.click(page.getByRole('button',{name:'Параметры заказа',exact:true})); await expect.element(page.getByRole('button',{name:'Параметры заказа',exact:true})).toHaveAttribute('aria-expanded','true'); await expect.element(page.getByRole('textbox',{name:'Заметка'})).toHaveFocus(); await user.keyboard('{Escape}'); await expect.element(page.getByRole('button',{name:'Параметры заказа',exact:true})).toHaveFocus(); expect(document.documentElement.scrollWidth).toBeLessThanOrEqual(window.innerWidth); }); }