Files
penguin-harness/packages/desktop/test/app-icon.test.ts
T

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"));
});
});