import { EventEmitter } from "node:events"; import { describe, expect, it, vi } from "vitest"; import { bindFirstRevealTrigger } from "./windowReveal.ts"; describe("bindFirstRevealTrigger", () => { it("reveals when the first trigger fires", () => { const window = new EventEmitter(); const webContents = new EventEmitter(); const reveal = vi.fn(); bindFirstRevealTrigger( [ (fire) => window.once("ready-to-show", fire), (fire) => webContents.once("did-finish-load", fire), ], reveal, ); window.emit("ready-to-show"); expect(reveal).toHaveBeenCalledTimes(1); }); it("reveals when only the fallback trigger fires (Wayland deadlock case)", () => { const window = new EventEmitter(); const webContents = new EventEmitter(); const reveal = vi.fn(); bindFirstRevealTrigger( [ (fire) => window.once("ready-to-show", fire), (fire) => webContents.once("did-finish-load", fire), ], reveal, ); webContents.emit("did-finish-load"); expect(reveal).toHaveBeenCalledTimes(1); }); it("only reveals once when multiple triggers fire", () => { const window = new EventEmitter(); const webContents = new EventEmitter(); const reveal = vi.fn(); bindFirstRevealTrigger( [ (fire) => window.once("ready-to-show", fire), (fire) => webContents.once("did-finish-load", fire), ], reveal, ); webContents.emit("did-finish-load"); window.emit("ready-to-show"); expect(reveal).toHaveBeenCalledTimes(1); }); it("subscribers using `once` ignore re-emitted events after reveal", () => { const window = new EventEmitter(); const reveal = vi.fn(); bindFirstRevealTrigger([(fire) => window.once("ready-to-show", fire)], reveal); window.emit("ready-to-show"); window.emit("ready-to-show"); expect(reveal).toHaveBeenCalledTimes(1); });});
import { EventEmitter } from "node:events";
import { describe, expect, it, vi } from "vitest";
import { bindFirstRevealTrigger } from "./windowReveal.ts";
describe("bindFirstRevealTrigger", () => {
it("reveals when the first trigger fires", () => {
const window = new EventEmitter();
const webContents = new EventEmitter();
const reveal = vi.fn();
bindFirstRevealTrigger(
[
(fire) => window.once("ready-to-show", fire),
(fire) => webContents.once("did-finish-load", fire),
],
reveal,
);
window.emit("ready-to-show");
expect(reveal).toHaveBeenCalledTimes(1);
});
it("reveals when only the fallback trigger fires (Wayland deadlock case)", () => {
const window = new EventEmitter();
const webContents = new EventEmitter();
const reveal = vi.fn();
bindFirstRevealTrigger(
[
(fire) => window.once("ready-to-show", fire),
(fire) => webContents.once("did-finish-load", fire),
],
reveal,
);
webContents.emit("did-finish-load");
expect(reveal).toHaveBeenCalledTimes(1);
});
it("only reveals once when multiple triggers fire", () => {
const window = new EventEmitter();
const webContents = new EventEmitter();
const reveal = vi.fn();
bindFirstRevealTrigger(
[
(fire) => window.once("ready-to-show", fire),
(fire) => webContents.once("did-finish-load", fire),
],
reveal,
);
webContents.emit("did-finish-load");
window.emit("ready-to-show");
expect(reveal).toHaveBeenCalledTimes(1);
});
it("subscribers using `once` ignore re-emitted events after reveal", () => {
const window = new EventEmitter();
const reveal = vi.fn();
bindFirstRevealTrigger([(fire) => window.once("ready-to-show", fire)], reveal);
window.emit("ready-to-show");
window.emit("ready-to-show");
expect(reveal).toHaveBeenCalledTimes(1);
});
});