082ab08e0b
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
38 lines
1.6 KiB
TypeScript
38 lines
1.6 KiB
TypeScript
import fs from "node:fs";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
import { afterAll, describe, expect, it } from "vitest";
|
|
import { resolveWindowIcon, WINDOW_ICON_RELPATH, windowIconPathFor } from "../src/app-icon.js";
|
|
|
|
describe("windowIconPathFor", () => {
|
|
it("is null on macOS (window icons are ignored; the bundle icns owns the Dock)", () => {
|
|
expect(windowIconPathFor("/app", "darwin")).toBeNull();
|
|
});
|
|
|
|
it("resolves build/icon.png inside the app dir on Linux and Windows", () => {
|
|
expect(windowIconPathFor("/app", "linux")).toBe(path.join("/app", ...WINDOW_ICON_RELPATH));
|
|
expect(windowIconPathFor("C:\\app", "win32")).toBe(
|
|
path.join("C:\\app", ...WINDOW_ICON_RELPATH),
|
|
);
|
|
});
|
|
});
|
|
|
|
describe("resolveWindowIcon", () => {
|
|
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), "penguin-desktop-icon-"));
|
|
afterAll(() => fs.rmSync(tmp, { recursive: true, force: true }));
|
|
|
|
it("returns the path only when the file exists", () => {
|
|
expect(resolveWindowIcon(tmp, "linux")).toBeNull();
|
|
fs.mkdirSync(path.join(tmp, "build"), { recursive: true });
|
|
fs.writeFileSync(path.join(tmp, "build", "icon.png"), "png");
|
|
expect(resolveWindowIcon(tmp, "linux")).toBe(path.join(tmp, "build", "icon.png"));
|
|
expect(resolveWindowIcon(tmp, "darwin")).toBeNull();
|
|
});
|
|
|
|
it("the committed source icon resolves for a dev run of this package", () => {
|
|
const pkgDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
expect(resolveWindowIcon(pkgDir, "linux")).toBe(path.join(pkgDir, "build", "icon.png"));
|
|
});
|
|
});
|