mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-04-01 14:52:25 +00:00
47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
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)()
|
|
|
|
beforeEach(() => {
|
|
document.head.innerHTML = ""
|
|
document.documentElement.removeAttribute("data-theme")
|
|
document.documentElement.removeAttribute("data-color-scheme")
|
|
localStorage.clear()
|
|
Object.defineProperty(window, "matchMedia", {
|
|
value: () =>
|
|
({
|
|
matches: false,
|
|
}) as MediaQueryList,
|
|
configurable: true,
|
|
})
|
|
})
|
|
|
|
describe("theme preload", () => {
|
|
test("migrates legacy oc-1 to oc-2 before mount", () => {
|
|
localStorage.setItem("opencode-theme-id", "oc-1")
|
|
localStorage.setItem("opencode-theme-css-light", "--background-base:#fff;")
|
|
localStorage.setItem("opencode-theme-css-dark", "--background-base:#000;")
|
|
|
|
run()
|
|
|
|
expect(document.documentElement.dataset.theme).toBe("oc-2")
|
|
expect(document.documentElement.dataset.colorScheme).toBe("light")
|
|
expect(localStorage.getItem("opencode-theme-id")).toBe("oc-2")
|
|
expect(localStorage.getItem("opencode-theme-css-light")).toBeNull()
|
|
expect(localStorage.getItem("opencode-theme-css-dark")).toBeNull()
|
|
expect(document.getElementById("oc-theme-preload")).toBeNull()
|
|
})
|
|
|
|
test("keeps cached css for non-default themes", () => {
|
|
localStorage.setItem("opencode-theme-id", "nightowl")
|
|
localStorage.setItem("opencode-theme-css-light", "--background-base:#fff;")
|
|
|
|
run()
|
|
|
|
expect(document.documentElement.dataset.theme).toBe("nightowl")
|
|
expect(document.getElementById("oc-theme-preload")?.textContent).toContain("--background-base:#fff;")
|
|
})
|
|
})
|