This commit is contained in:
2026-08-17 10:43:38 +02:00
parent e126182ae6
commit 3a941480a9
20 changed files with 430 additions and 46 deletions

View File

@@ -0,0 +1,55 @@
// @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<HTMLElement>(sel)).find((el) => el.textContent?.includes(text))
}
async function open(c: HTMLElement, name: string): Promise<void> {
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(<ProjectProvider><App /></ProjectProvider>).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<HTMLElement>('.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())
})
})