Files
anomalyco_opencode/packages/opencode/test/cli/run/footer.menu.test.ts
T
Simon Klee ca1f041b02 tui: add preview margin to menu scrolling
The footer menu now starts scrolling before the selection reaches
the viewport edge, keeping surrounding items visible for context.
Extract offset logic into pure helpers and add tests.

Simplify theme primary color selection to use fixed ansi colors
instead of a contrast/chroma heuristic, and suppress diff
backgrounds in scrollback mode for cleaner rendering.
2026-05-07 22:05:32 +02:00

44 lines
1.1 KiB
TypeScript

import { expect, test } from "bun:test"
import { createRoot } from "solid-js"
import { FOOTER_MENU_ROWS, createFooterMenuState } from "@/cli/cmd/run/footer.menu"
function mount(count: number, limit = FOOTER_MENU_ROWS) {
let dispose!: () => void
let menu!: ReturnType<typeof createFooterMenuState>
createRoot((nextDispose) => {
dispose = nextDispose
menu = createFooterMenuState({ count: () => count, limit })
return null
})
return { menu, dispose }
}
test("footer menu scrolls before the selected row hits the bottom edge", () => {
const state = mount(20)
try {
Array.from({ length: 6 }).forEach(() => state.menu.move(1))
expect(state.menu.selected()).toBe(6)
expect(state.menu.offset()).toBe(1)
} finally {
state.dispose()
}
})
test("footer menu scrolls before the selected row hits the top edge", () => {
const state = mount(20)
try {
Array.from({ length: 13 }).forEach(() => state.menu.move(1))
Array.from({ length: 4 }).forEach(() => state.menu.move(-1))
expect(state.menu.selected()).toBe(9)
expect(state.menu.offset()).toBe(7)
} finally {
state.dispose()
}
})