import type {ElectronApplication} from 'playwright'; import {_electron as electron} from 'playwright'; import {afterAll, beforeAll, expect, test} from 'vitest'; import {createHash} from 'crypto'; let electronApp: ElectronApplication; beforeAll(async () => { electronApp = await electron.launch({args: ['.'], timeout: 60000 * 5}); }); afterAll(async () => { await electronApp.close(); }); test('Main window state', async () => { const windowState: { isVisible: boolean; isDevToolsOpened: boolean; isCrashed: boolean } = await electronApp.evaluate(({BrowserWindow}) => { const mainWindow = BrowserWindow.getAllWindows()[0]; const getState = () => ({ isVisible: mainWindow.isVisible(), isDevToolsOpened: mainWindow.webContents.isDevToolsOpened(), isCrashed: mainWindow.webContents.isCrashed(), }); return new Promise((resolve) => { if (mainWindow.isVisible()) { resolve(getState()); } else mainWindow.once('ready-to-show', () => setTimeout(() => resolve(getState()), 0)); }); }); expect(windowState.isCrashed, 'App was crashed').toBeFalsy(); expect(windowState.isVisible, 'Main window was not visible').toBeTruthy(); expect(windowState.isDevToolsOpened, 'DevTools was opened').toBeFalsy(); }); test('Main window web content', async () => { const page = await electronApp.firstWindow(); const element = await page.$('#app', {strict: true}); expect(element, 'Can\'t find root element').toBeDefined(); expect((await element.innerHTML()).trim(), 'Window content was empty').not.equal(''); }); test('Preload versions', async () => { const page = await electronApp.firstWindow(); const renderedVersions = await page.locator('#process-versions').innerText(); const expectedVersions = await electronApp.evaluate(() => process.versions); for (const expectedVersionsKey in expectedVersions) { expect(renderedVersions).include(`${expectedVersionsKey}: v${expectedVersions[expectedVersionsKey]}`); } }); test('Preload nodeCrypto', async () => { const page = await electronApp.firstWindow(); /** * Random string to test hashing */ const testString = Math.random().toString(36).slice(2, 7); await page.fill('input', testString); const renderedHash = await page.inputValue('input[readonly]'); const expectedHash = createHash('sha256').update(testString).digest('hex'); expect(renderedHash).toEqual(expectedHash); });