import { assert, describe, it } from "@effect/vitest";import * as Effect from "effect/Effect";import type * as Electron from "electron";import { beforeEach, vi } from "vite-plus/test"; const { appFocusMock, getAllWindowsMock } = vi.hoisted(() => ({ appFocusMock: vi.fn(), getAllWindowsMock: vi.fn(),})); vi.mock("electron", () => ({ app: { focus: appFocusMock, }, BrowserWindow: { getAllWindows: getAllWindowsMock, },})); import * as ElectronWindow from "./ElectronWindow.ts"; function makeBrowserWindow(input: { readonly destroyed: boolean }) { return { isDestroyed: vi.fn(() => input.destroyed), } as unknown as Electron.BrowserWindow;} describe("ElectronWindow", () => { beforeEach(() => { appFocusMock.mockReset(); getAllWindowsMock.mockReset(); }); it.effect("skips windows destroyed before appearance sync runs", () => Effect.gen(function* () { const liveWindow = makeBrowserWindow({ destroyed: false }); const destroyedWindow = makeBrowserWindow({ destroyed: true }); getAllWindowsMock.mockReturnValue([destroyedWindow, liveWindow]); const syncedWindows: Electron.BrowserWindow[] = []; const electronWindow = yield* ElectronWindow.ElectronWindow; yield* electronWindow.syncAllAppearance((window) => Effect.sync(() => { syncedWindows.push(window); }), ); assert.deepEqual(syncedWindows, [liveWindow]); }).pipe(Effect.provide(ElectronWindow.layer)), );});
import { assert, describe, it } from "@effect/vitest";
import * as Effect from "effect/Effect";
import type * as Electron from "electron";
import { beforeEach, vi } from "vite-plus/test";
const { appFocusMock, getAllWindowsMock } = vi.hoisted(() => ({
appFocusMock: vi.fn(),
getAllWindowsMock: vi.fn(),
}));
vi.mock("electron", () => ({
app: {
focus: appFocusMock,
},
BrowserWindow: {
getAllWindows: getAllWindowsMock,
},
}));
import * as ElectronWindow from "./ElectronWindow.ts";
function makeBrowserWindow(input: { readonly destroyed: boolean }) {
return {
isDestroyed: vi.fn(() => input.destroyed),
} as unknown as Electron.BrowserWindow;
}
describe("ElectronWindow", () => {
beforeEach(() => {
appFocusMock.mockReset();
getAllWindowsMock.mockReset();
});
it.effect("skips windows destroyed before appearance sync runs", () =>
Effect.gen(function* () {
const liveWindow = makeBrowserWindow({ destroyed: false });
const destroyedWindow = makeBrowserWindow({ destroyed: true });
getAllWindowsMock.mockReturnValue([destroyedWindow, liveWindow]);
const syncedWindows: Electron.BrowserWindow[] = [];
const electronWindow = yield* ElectronWindow.ElectronWindow;
yield* electronWindow.syncAllAppearance((window) =>
Effect.sync(() => {
syncedWindows.push(window);
}),
);
assert.deepEqual(syncedWindows, [liveWindow]);
}).pipe(Effect.provide(ElectronWindow.layer)),
);
});