45 lines
2.3 KiB
JavaScript
45 lines
2.3 KiB
JavaScript
// 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) })
|
|
}
|