// Acceptance-only Electron runner for the unchanged supplied Chromium HTML fixture. const fs = require('fs') const path = require('path') const assert = require('assert/strict') const electron = require('electron') const directory = path.resolve(process.argv.at(-1)) assert.ok(path.dirname(directory) === path.resolve('.tmp') && path.basename(directory).startsWith('task-popconfirm-browser-')) if (!process.versions.electron) { const env = { ...process.env } delete env.ELECTRON_RUN_AS_NODE delete env.ELECTRON_RENDERER_URL const child = require('child_process').spawn(electron, [__filename, directory], { env, windowsHide: true, stdio: 'inherit' }) const timer = setTimeout(() => child.kill(), 60000) child.once('exit', (code, signal) => { clearTimeout(timer) console.log(JSON.stringify({ directory, exitCode: code, signal })) process.exitCode = code === 0 ? 0 : 1 }) } else { const { app, BrowserWindow } = electron const data = path.join(directory, 'electron-profile') fs.mkdirSync(data, { recursive: true }) app.setPath('userData', data) app.disableHardwareAcceleration() app.whenReady().then(async () => { const win = new BrowserWindow({ width: 1000, height: 700, show: false, webPreferences: { contextIsolation: true, nodeIntegration: false, backgroundThrottling: false } }) const errors = [] win.webContents.on('console-message', event => { if (event.level === 'error' || event.level >= 3) errors.push(event.message) }) await win.loadFile(path.join(directory, 'index.html')) win.showInactive() for (let i = 0; i < 300; i++) { const result = await win.webContents.executeJavaScript('document.querySelector("#result")?.textContent') if (result) { const report = JSON.parse(result) fs.writeFileSync(path.join(directory, 'electron-report.json'), JSON.stringify({ ...report, rendererErrors: errors, scope: 'Actual Electron Chromium component fixture; isolated callbacks, no IPC/model/session execution' }, null, 2)) console.log(JSON.stringify({ pass: report.pass, checks: report.results.length, error: report.error, rendererErrors: errors })) app.exit(report.pass && errors.length === 0 ? 0 : 1) return } await new Promise(resolve => setTimeout(resolve, 80)) } throw Error('Fixture result timed out') }).catch(error => { console.error(error); app.exit(1) }) }