// @vitest-environment jsdom import { afterEach, beforeAll, describe, expect, it, vi } from 'vitest' import { act, cleanup, fireEvent, render, waitFor } from '@testing-library/react' import React from 'react' vi.mock('../src/renderer/src/terminals', () => { let n = 0 return { Terminal: () => null, lid: () => ++n } }) import { App } from '../src/renderer/src/App' import { ProjectProvider } from '../src/renderer/src/project' beforeAll(() => { globalThis.ResizeObserver = class { observe() {} unobserve() {} disconnect() {} } as never if (!Element.prototype.scrollIntoView) Element.prototype.scrollIntoView = () => {} }) afterEach(() => { cleanup(); localStorage.clear() }) function find(c: HTMLElement, sel: string, text: string): HTMLElement | undefined { return Array.from(c.querySelectorAll(sel)).find((el) => el.textContent?.includes(text)) } async function open(c: HTMLElement, name: string): Promise { const row = await waitFor(() => { const r = find(c, '.tree-row', name) if (!r) throw new Error(`${name} not ready`) return r }) fireEvent.click(row) } function key(k: string, meta = false): void { act(() => { window.dispatchEvent(new KeyboardEvent('keydown', { key: k, metaKey: meta, bubbles: true })) }) } describe('Recent-files navigator (⌘↓)', () => { it('Enter opens the highlighted file', async () => { const c = render().container await open(c, 'composer.json') await open(c, 'README.md') await waitFor(() => expect(find(c, '.tb-crumb', 'README.md')).toBeTruthy()) key('ArrowDown', true) const modal = await waitFor(() => { const m = c.querySelector('.history-modal') if (!m) throw new Error('history not open') return m }) // ⌘↓ pre-selects the previous file (index 1), i.e. composer.json. expect(modal.querySelector('.hist-row.sel')?.textContent).toContain('composer.json') key('Enter') await waitFor(() => expect(c.querySelector('.history-modal')).toBeNull()) await waitFor(() => expect(find(c, '.tb-crumb', 'composer.json')).toBeTruthy()) }) })