Files
opencode/packages/tui/test/theme/v2/select.test.ts

38 lines
1.4 KiB
TypeScript

import { expect, test } from "bun:test"
import type { HueDefinition, ThemeDefinition, ThemeFile } from "../../../src/theme/v2"
import { selectTheme, selectThemeMode } from "../../../src/theme/v2/select"
const hue = {} as HueDefinition
const light = { hue, text: { default: "#111111", subdued: "#222222" } } satisfies ThemeDefinition
const dark = { hue, text: { default: "#eeeeee", subdued: "#dddddd" } } satisfies ThemeDefinition
test("requires and selects independent light and dark themes", () => {
const file = { version: 2, light, dark } satisfies ThemeFile
expect(selectTheme(file)).toBe(light)
expect(selectTheme(file, "light")).toBe(light)
expect(selectTheme(file, "dark")).toBe(dark)
expect(selectThemeMode(file, "dark").mode).toBe("dark")
})
test("merges an expanded mode override over the other mode", () => {
const file = {
version: 2,
light,
dark: { mergeMode: true, text: { default: "#ffffff" } },
} satisfies ThemeFile
const selected = selectTheme(file, "dark")
expect(selected.hue).toBeDefined()
expect(selected.text?.default).toBe("#ffffff")
expect(selected.text?.subdued).toBe("$text.default")
})
test("rejects mutual mode merging", () => {
const file = {
version: 2,
light: { mergeMode: true },
dark: { mergeMode: true },
} satisfies ThemeFile
expect(() => selectTheme(file)).toThrow("cannot both merge")
})