mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-25 04:35:37 -04:00
38 lines
1.4 KiB
TypeScript
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")
|
|
})
|