packages/app/src/theme-preload.test.ts
Rama dev · réplica de lectura del repositorio original.
import { beforeEach, describe, expect, test } from "bun:test"
const src = await Bun.file(new URL("../public/oc-theme-preload.js", import.meta.url)).text()
const run = () => Function(src)()
const setSystemDark = (matches: boolean) =>
Object.defineProperty(window, "matchMedia", {
value: () => ({ matches }) as MediaQueryList,
configurable: true,
})
beforeEach(() => {
document.head.innerHTML = ""
document.documentElement.removeAttribute("data-theme")
document.documentElement.removeAttribute("data-color-scheme")
document.documentElement.style.removeProperty("background-color")
localStorage.clear()
setSystemDark(false)
})
describe("theme preload", () => {
test.each([
{ stored: undefined, systemDark: false, scheme: "light", background: "#fafafa" },
{ stored: "dark", systemDark: false, scheme: "dark", background: "#080808" },
{ stored: "light", systemDark: true, scheme: "light", background: "#fafafa" },
{ stored: "system", systemDark: true, scheme: "dark", background: "#080808" },
])(
"paints the default theme in $scheme for stored scheme $stored (system dark: $systemDark)",
({ stored, systemDark, scheme, background }) => {
setSystemDark(systemDark)
if (stored) localStorage.setItem("opencode-color-scheme", stored)
run()
expect(document.documentElement.dataset.theme).toBe("oc-2")
expect(document.documentElement.dataset.colorScheme).toBe(scheme)
expect(document.documentElement.style.backgroundColor).toBe(background)
},
)
test.each([
{ scheme: undefined, key: "opencode-theme-css-light", css: "--background-base:#fff;", expected: "light" },
{ scheme: "dark", key: "opencode-theme-css-dark", css: "--background-base:#010203;", expected: "dark" },
])("restores the cached $expected css of a custom theme", ({ scheme, key, css, expected }) => {
localStorage.setItem("opencode-theme-id", "nightowl")
if (scheme) localStorage.setItem("opencode-color-scheme", scheme)
localStorage.setItem(key, css)
run()
expect(document.documentElement.dataset.theme).toBe("nightowl")
expect(document.documentElement.dataset.colorScheme).toBe(expected)
expect(document.getElementById("oc-theme-preload")?.textContent).toContain(css)
})
})