From 4ebf0c7686e3b649918c967273934b36e4034464 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Mon, 10 Nov 2025 13:58:16 +0100 Subject: [PATCH 1/6] chore(e2e): refactor resize into its own method; use compass default instead of os max screen size --- .../helpers/commands/index.ts | 1 + .../helpers/commands/resize-window.ts | 46 +++++++++++++++++++ packages/compass-e2e-tests/helpers/compass.ts | 34 ++++---------- packages/compass/src/main/window-manager.ts | 17 +++++-- 4 files changed, 70 insertions(+), 28 deletions(-) create mode 100644 packages/compass-e2e-tests/helpers/commands/resize-window.ts diff --git a/packages/compass-e2e-tests/helpers/commands/index.ts b/packages/compass-e2e-tests/helpers/commands/index.ts index 44ce195d138..3b56971674b 100644 --- a/packages/compass-e2e-tests/helpers/commands/index.ts +++ b/packages/compass-e2e-tests/helpers/commands/index.ts @@ -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'; diff --git a/packages/compass-e2e-tests/helpers/commands/resize-window.ts b/packages/compass-e2e-tests/helpers/commands/resize-window.ts new file mode 100644 index 00000000000..12f35dd8714 --- /dev/null +++ b/packages/compass-e2e-tests/helpers/commands/resize-window.ts @@ -0,0 +1,46 @@ +import { inspect } from 'util'; +import type { CompassBrowser } from '../compass-browser'; +import { isTestingDesktop } from '../test-runner-context'; + +type WindowSize = Awaited>; + +export async function resizeWindow( + browser: CompassBrowser, + width: number, + height: number +): Promise { + 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!; +} diff --git a/packages/compass-e2e-tests/helpers/compass.ts b/packages/compass-e2e-tests/helpers/compass.ts index 42227ad9562..2419b286c37 100644 --- a/packages/compass-e2e-tests/helpers/compass.ts +++ b/packages/compass-e2e-tests/helpers/compass.ts @@ -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(); diff --git a/packages/compass/src/main/window-manager.ts b/packages/compass/src/main/window-manager.ts index e41e4634134..841bff246e8 100644 --- a/packages/compass/src/main/window-manager.ts +++ b/packages/compass/src/main/window-manager.ts @@ -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(); From 4c106b322613688bd79c2b559e0d66f3e7a6c729 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Mon, 10 Nov 2025 14:40:23 +0100 Subject: [PATCH 2/6] fix(e2e): allow slight deviations when resizing window --- .../helpers/commands/resize-window.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/compass-e2e-tests/helpers/commands/resize-window.ts b/packages/compass-e2e-tests/helpers/commands/resize-window.ts index 12f35dd8714..654e6811807 100644 --- a/packages/compass-e2e-tests/helpers/commands/resize-window.ts +++ b/packages/compass-e2e-tests/helpers/commands/resize-window.ts @@ -4,6 +4,10 @@ import { isTestingDesktop } from '../test-runner-context'; type WindowSize = Awaited>; +function isEqualWithMargin(a: number, b: number, margin = 30) { + return Math.abs(a - b) <= margin; +} + export async function resizeWindow( browser: CompassBrowser, width: number, @@ -30,7 +34,11 @@ export async function resizeWindow( await browser.setWindowSize(width, height); newSize = await browser.getWindowSize(); } - return newSize && newSize.width === width && newSize.height === height; + return ( + newSize && + isEqualWithMargin(newSize.width, width) && + isEqualWithMargin(newSize.height, height) + ); }); } catch (err) { throw new Error( From 9f851672afb1439c0203ae5dab26b5647e55d5f4 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Mon, 10 Nov 2025 16:40:20 +0100 Subject: [PATCH 3/6] fix(e2e): skip expected height check on macos --- .../compass-e2e-tests/helpers/commands/resize-window.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/compass-e2e-tests/helpers/commands/resize-window.ts b/packages/compass-e2e-tests/helpers/commands/resize-window.ts index 654e6811807..91df3292214 100644 --- a/packages/compass-e2e-tests/helpers/commands/resize-window.ts +++ b/packages/compass-e2e-tests/helpers/commands/resize-window.ts @@ -14,6 +14,12 @@ export async function resizeWindow( height: number ): Promise { let newSize: WindowSize | undefined | void; + // On macOS you can only change height as much as the system allows, so when + // on macOS, skip checking for the height matching what we requested. That's + // not great that we can't be sure that we got what we requested, but there's + // little we can do and generally speaking we usually mostly care about the + // width being big enough when resizing + const skipHeightCheck = process.platform === 'darwin'; try { await browser.waitUntil(async () => { // Electron doesn't support setWindowSize, so we use a custom ipc handler @@ -37,7 +43,7 @@ export async function resizeWindow( return ( newSize && isEqualWithMargin(newSize.width, width) && - isEqualWithMargin(newSize.height, height) + (skipHeightCheck || isEqualWithMargin(newSize.height, height)) ); }); } catch (err) { From 9f4279c6645017f38a2dfedcc26358fd2cc734d1 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Tue, 11 Nov 2025 09:26:54 +0100 Subject: [PATCH 4/6] fix(e2e): account for old compass in smokes not returning from maximize handler --- packages/compass-e2e-tests/helpers/commands/resize-window.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/compass-e2e-tests/helpers/commands/resize-window.ts b/packages/compass-e2e-tests/helpers/commands/resize-window.ts index 91df3292214..7423ca366c1 100644 --- a/packages/compass-e2e-tests/helpers/commands/resize-window.ts +++ b/packages/compass-e2e-tests/helpers/commands/resize-window.ts @@ -24,7 +24,7 @@ export async function resizeWindow( await browser.waitUntil(async () => { // Electron doesn't support setWindowSize, so we use a custom ipc handler if (isTestingDesktop()) { - newSize = await browser.execute( + await browser.execute( async (_width: number, _height: number) => { // eslint-disable-next-line @typescript-eslint/no-require-imports return await require('electron').ipcRenderer.invoke( @@ -38,8 +38,8 @@ export async function resizeWindow( ); } else { await browser.setWindowSize(width, height); - newSize = await browser.getWindowSize(); } + newSize = await browser.getWindowSize(); return ( newSize && isEqualWithMargin(newSize.width, width) && From de0873b0ee6c127225f61c18562bde6bdaef5f3e Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Tue, 11 Nov 2025 12:13:56 +0100 Subject: [PATCH 5/6] fix(e2e): more smoke workarounds --- .../helpers/commands/resize-window.ts | 17 ++++++++++------- packages/compass-e2e-tests/helpers/compass.ts | 3 ++- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/compass-e2e-tests/helpers/commands/resize-window.ts b/packages/compass-e2e-tests/helpers/commands/resize-window.ts index 7423ca366c1..64d37f5fe4d 100644 --- a/packages/compass-e2e-tests/helpers/commands/resize-window.ts +++ b/packages/compass-e2e-tests/helpers/commands/resize-window.ts @@ -11,7 +11,8 @@ function isEqualWithMargin(a: number, b: number, margin = 30) { export async function resizeWindow( browser: CompassBrowser, width: number, - height: number + height: number, + dangerouslySkipWaitFor?: boolean ): Promise { let newSize: WindowSize | undefined | void; // On macOS you can only change height as much as the system allows, so when @@ -22,9 +23,10 @@ export async function resizeWindow( const skipHeightCheck = process.platform === 'darwin'; try { await browser.waitUntil(async () => { - // Electron doesn't support setWindowSize, so we use a custom ipc handler + // Electron doesn't support setWindowSize / getWindowSize, so we use a + // custom ipc handler if (isTestingDesktop()) { - await browser.execute( + newSize = await browser.execute( async (_width: number, _height: number) => { // eslint-disable-next-line @typescript-eslint/no-require-imports return await require('electron').ipcRenderer.invoke( @@ -38,12 +40,13 @@ export async function resizeWindow( ); } else { await browser.setWindowSize(width, height); + newSize = await browser.getWindowSize(); } - newSize = await browser.getWindowSize(); return ( - newSize && - isEqualWithMargin(newSize.width, width) && - (skipHeightCheck || isEqualWithMargin(newSize.height, height)) + dangerouslySkipWaitFor || + (newSize && + isEqualWithMargin(newSize.width, width) && + (skipHeightCheck || isEqualWithMargin(newSize.height, height))) ); }); } catch (err) { diff --git a/packages/compass-e2e-tests/helpers/compass.ts b/packages/compass-e2e-tests/helpers/compass.ts index 2419b286c37..4088cac02c7 100644 --- a/packages/compass-e2e-tests/helpers/compass.ts +++ b/packages/compass-e2e-tests/helpers/compass.ts @@ -1131,7 +1131,8 @@ export async function init( const { width: newWidth, height: newHeight } = await browser.resizeWindow( defaultWindowWidth, - defaultWindowHeight + defaultWindowHeight, + opts.dangerouslySkipSharedConfigWaitFor ); debug(`resized window to ${newWidth}x${newHeight}`); From 1b0813fbe22f22e5ae8cd05ca5c189dbcf1b36b9 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Tue, 11 Nov 2025 13:46:21 +0100 Subject: [PATCH 6/6] debugging smokes is not fun --- packages/compass-e2e-tests/helpers/commands/resize-window.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/compass-e2e-tests/helpers/commands/resize-window.ts b/packages/compass-e2e-tests/helpers/commands/resize-window.ts index 64d37f5fe4d..6841b228291 100644 --- a/packages/compass-e2e-tests/helpers/commands/resize-window.ts +++ b/packages/compass-e2e-tests/helpers/commands/resize-window.ts @@ -38,6 +38,7 @@ export async function resizeWindow( width, height ); + newSize ??= { width: 0, height: 0 }; // in older compass versions 'compass:maximize' doesn't return anything } else { await browser.setWindowSize(width, height); newSize = await browser.getWindowSize();