Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/compass-e2e-tests/helpers/commands/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,4 @@ export * from './read-first-document-content';
export * from './read-stage-operators';
export * from './click-confirmation-action';
export * from './get-input-by-label';
export * from './resize-window';
46 changes: 46 additions & 0 deletions packages/compass-e2e-tests/helpers/commands/resize-window.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { inspect } from 'util';
import type { CompassBrowser } from '../compass-browser';
import { isTestingDesktop } from '../test-runner-context';

type WindowSize = Awaited<ReturnType<CompassBrowser['getWindowSize']>>;

export async function resizeWindow(
browser: CompassBrowser,
width: number,
height: number
): Promise<WindowSize> {
let newSize: WindowSize | undefined | void;
try {
await browser.waitUntil(async () => {
// Electron doesn't support setWindowSize, so we use a custom ipc handler
if (isTestingDesktop()) {
newSize = await browser.execute(
async (_width: number, _height: number) => {
// eslint-disable-next-line @typescript-eslint/no-require-imports
return await require('electron').ipcRenderer.invoke(
'compass:maximize',
_width,
_height
);
},
width,
height
);
} else {
await browser.setWindowSize(width, height);
newSize = await browser.getWindowSize();
}
return newSize && newSize.width === width && newSize.height === height;
});
} catch (err) {
throw new Error(
`Failed to update window size: expected ${inspect({
width,
height,
})}, but got ${inspect(newSize)}. Original error:\n\n${
(err as Error).message
}`
);
}
return newSize!;
}
34 changes: 10 additions & 24 deletions packages/compass-e2e-tests/helpers/compass.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1125,30 +1125,16 @@ export async function init(
opts.dangerouslySkipSharedConfigWaitFor
);

if (TEST_COMPASS_WEB) {
// larger window for more consistent results
const [width, height] = await browser.execute(() => {
// in case setWindowSize() below doesn't work
// eslint-disable-next-line no-restricted-globals
window.resizeTo(window.screen.availWidth, window.screen.availHeight);
// eslint-disable-next-line no-restricted-globals
return [window.screen.availWidth, window.screen.availHeight];
});
// getting available width=1512, height=944 in electron on mac which is arbitrary
debug(`available width=${width}, height=${height}`);
try {
// window.resizeTo() doesn't work on firefox
await browser.setWindowSize(width, height);
} catch (err) {
console.error(err instanceof Error ? err.stack : err);
}
} else {
await browser.execute(() => {
// eslint-disable-next-line @typescript-eslint/no-require-imports
const { ipcRenderer } = require('electron');
void ipcRenderer.invoke('compass:maximize');
});
}
// Matches Compass desktop defaults
const defaultWindowWidth = 1432;
const defaultWindowHeight = 840;

const { width: newWidth, height: newHeight } = await browser.resizeWindow(
defaultWindowWidth,
defaultWindowHeight
);

debug(`resized window to ${newWidth}x${newHeight}`);

if (compass.needsCloseWelcomeModal) {
await browser.closeWelcomeModal();
Expand Down
17 changes: 13 additions & 4 deletions packages/compass/src/main/window-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -394,10 +394,19 @@ class CompassWindowManager {
// To resize an electron window you have to do it from the main process.
// This is here so that the e2e tests can resize the window from the
// renderer process.
ipcMain?.handle('compass:maximize', () => {
const first = BrowserWindow.getAllWindows()[0];
first.maximize();
});
ipcMain?.handle(
'compass:maximize',
(evt, width: number, height: number) => {
const window = BrowserWindow.fromWebContents(evt.sender);
if (width && height) {
window?.setSize(width, height);
} else {
window?.maximize();
}
const [newWidth, newHeight] = window?.getSize() ?? [];
return window ? { width: newWidth, height: newHeight } : null;
}
);

await electronApp.whenReady();
await onAppReady();
Expand Down