hermes --tui launches the native OpenTUI engine (Bun) when HERMES_TUI_ENGINE=opentui (env) or display.tui_engine=opentui (config); Ink stays the default and the shipping path is untouched. - _resolve_tui_engine() (env > config > ink); refuses opentui on Windows/Termux (no Bun) -> falls back to ink with a notice. - _make_opentui_argv() -> [bun, src/entry.real.tsx] (no build step). - _bun_bin() with HERMES_BUN override. - Branch at top of _make_tui_argv BEFORE _ensure_tui_node (Bun-only host must not bootstrap Node). - Gate _launch_tui NODE_OPTIONS/--max-old-space-size on engine==ink (Bun is JSC; the V8 flag errors/ignores). Verified end-to-end via tmux: real hermes --tui -> Bun -> OpenTUI -> real Python gateway streamed a real reply. No-flag default still ink.
43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
import { cleanup, render, screen } from '@testing-library/react'
|
|
import { afterEach, describe, expect, it, vi } from 'vitest'
|
|
|
|
import { I18nProvider } from '@/i18n'
|
|
|
|
import { ComposerTriggerPopover } from './trigger-popover'
|
|
|
|
function renderPopover(kind: '@' | '/', loading = false) {
|
|
const onHover = vi.fn()
|
|
const onPick = vi.fn()
|
|
|
|
const rendered = render(
|
|
<I18nProvider configClient={null} initialLocale="zh">
|
|
<ComposerTriggerPopover activeIndex={0} items={[]} kind={kind} loading={loading} onHover={onHover} onPick={onPick} />
|
|
</I18nProvider>
|
|
)
|
|
|
|
return { ...rendered, onHover, onPick }
|
|
}
|
|
|
|
describe('ComposerTriggerPopover i18n', () => {
|
|
afterEach(() => {
|
|
cleanup()
|
|
})
|
|
|
|
it('renders localized empty lookup copy for @ references', () => {
|
|
const { container } = renderPopover('@')
|
|
|
|
expect(screen.getByText('没有匹配项。')).toBeTruthy()
|
|
expect(container.textContent).toContain('试试')
|
|
expect(container.textContent).toContain('@file:')
|
|
expect(container.textContent).toContain('或')
|
|
expect(container.textContent).toContain('@folder:')
|
|
})
|
|
|
|
it('renders localized loading copy for slash commands', () => {
|
|
const { container } = renderPopover('/', true)
|
|
|
|
expect(screen.getByText('查找中…')).toBeTruthy()
|
|
expect(container.textContent).toContain('/help')
|
|
})
|
|
})
|