Buckets:
| import { describe, expect, test } from "bun:test" | |
| import { join, dirname, resolve } from "node:path" | |
| import { existsSync } from "node:fs" | |
| import { fileURLToPath } from "node:url" | |
| const dir = dirname(fileURLToPath(import.meta.url)) | |
| const root = resolve(dir, "../..") | |
| const html = async (name: string) => Bun.file(join(dir, name)).text() | |
| /** | |
| * Packaged Electron windows load renderer HTML via the privileged `oc://` | |
| * protocol. Root-relative asset paths like `src="/foo.js"` would resolve from | |
| * the protocol origin root instead of relative to the current HTML entrypoint. | |
| * | |
| * All local resource references must use relative paths (`./`). | |
| */ | |
| describe("electron renderer html", () => { | |
| for (const name of ["index.html"]) { | |
| describe(name, () => { | |
| test("script src attributes use relative paths", async () => { | |
| const content = await html(name) | |
| const srcs = [...content.matchAll(/\bsrc=["']([^"']+)["']/g)].map((m) => m[1]) | |
| for (const src of srcs) { | |
| expect(src).not.toMatch(/^\/[^/]/) | |
| } | |
| }) | |
| test("link href attributes use relative paths", async () => { | |
| const content = await html(name) | |
| const hrefs = [...content.matchAll(/<link[^>]+href=["']([^"']+)["']/g)].map((m) => m[1]) | |
| for (const href of hrefs) { | |
| expect(href).not.toMatch(/^\/[^/]/) | |
| } | |
| }) | |
| test("no web manifest link (not applicable in Electron)", async () => { | |
| const content = await html(name) | |
| expect(content).not.toContain('rel="manifest"') | |
| }) | |
| }) | |
| } | |
| }) | |
| /** | |
| * Vite resolves `publicDir` relative to `root`, not the config file. | |
| * This test reads the actual values from electron.vite.config.ts to catch | |
| * regressions where the publicDir path no longer resolves correctly | |
| * after the renderer root is accounted for. | |
| */ | |
| describe("electron vite publicDir", () => { | |
| test("configured publicDir resolves to a directory with oc-theme-preload.js", async () => { | |
| const config = await Bun.file(join(root, "electron.vite.config.ts")).text() | |
| const pub = config.match(/publicDir:\s*["']([^"']+)["']/) | |
| const rendererRoot = config.match(/root:\s*["']([^"']+)["']/) | |
| expect(pub).not.toBeNull() | |
| expect(rendererRoot).not.toBeNull() | |
| const resolved = resolve(root, rendererRoot![1], pub![1]) | |
| expect(existsSync(resolved)).toBe(true) | |
| expect(existsSync(join(resolved, "oc-theme-preload.js"))).toBe(true) | |
| }) | |
| }) | |
Xet Storage Details
- Size:
- 2.43 kB
- Xet hash:
- bf2d7a7f03eb16b17fbed10ac0dc7d6d8913144c334c2b411d662e710241e857
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.