47 lines
1.7 KiB
TypeScript
47 lines
1.7 KiB
TypeScript
import type { ElectronApplication } from '@playwright/test';
|
|
import { closeElectronApp, expect, getStableWindow, test } from './fixtures/electron';
|
|
|
|
async function getZoomLevel(app: ElectronApplication): Promise<number> {
|
|
return await app.evaluate(({ BrowserWindow }) => {
|
|
const win = BrowserWindow.getAllWindows()[0];
|
|
return win?.webContents.getZoomLevel() ?? 0;
|
|
});
|
|
}
|
|
|
|
async function sendZoomShortcut(app: ElectronApplication, action: 'in' | 'out'): Promise<void> {
|
|
await app.evaluate(({ BrowserWindow }, zoomAction) => {
|
|
const win = BrowserWindow.getAllWindows()[0];
|
|
const contents = win?.webContents;
|
|
if (!contents) return;
|
|
|
|
const input = zoomAction === 'out'
|
|
? { key: '-', code: 'Minus', control: true, meta: false, alt: false }
|
|
: { key: '=', code: 'Equal', control: true, meta: false, alt: false };
|
|
|
|
contents.emit('before-input-event', { preventDefault() {} }, input);
|
|
}, action);
|
|
}
|
|
|
|
test.describe('ClawX window zoom shortcuts', () => {
|
|
test('can zoom back in after zooming out with keyboard shortcuts', async ({ launchElectronApp }) => {
|
|
const app = await launchElectronApp({ skipSetup: true });
|
|
|
|
try {
|
|
const page = await getStableWindow(app);
|
|
await expect(page.getByTestId('main-layout')).toBeVisible();
|
|
|
|
await app.evaluate(({ BrowserWindow }) => {
|
|
BrowserWindow.getAllWindows()[0]?.webContents.setZoomLevel(0);
|
|
});
|
|
|
|
await sendZoomShortcut(app, 'out');
|
|
await expect.poll(async () => await getZoomLevel(app)).toBe(-1);
|
|
|
|
await sendZoomShortcut(app, 'in');
|
|
await expect.poll(async () => await getZoomLevel(app)).toBe(0);
|
|
} finally {
|
|
await closeElectronApp(app);
|
|
}
|
|
});
|
|
});
|