Files
hermes-agent/apps/desktop/scripts/probe-prepared-native.test.mjs

37 lines
1.7 KiB
JavaScript

import assert from 'node:assert/strict'
import fs from 'node:fs'
import os from 'node:os'
import { spawnSync } from 'node:child_process'
import path from 'node:path'
import { test } from 'vitest'
import { prepareDesktopNativeDependencies } from './stage-native-deps.mjs'
test('the native admission child refuses ordinary Node instead of certifying an Electron ABI', () => {
const child = spawnSync(process.execPath, [path.join(import.meta.dirname, 'probe-prepared-native.mjs'), '--child', import.meta.dirname], {
encoding: 'utf8', timeout: 5000, env: { ...process.env, ELECTRON_RUN_AS_NODE: '1' },
})
assert.notEqual(child.status, 0)
assert.match(child.stderr, /Electron runtime required/)
})
test.runIf(process.platform === 'win32')('the Electron PTY probe exits after its shell despite ConPTY workers', async () => {
const source = path.resolve(import.meta.dirname, '../../..')
const out = fs.mkdtempSync(path.join(os.tmpdir(), 'native-exit-'))
try {
const native = path.join(out, 'native')
prepareDesktopNativeDependencies({ source, out: native })
const { default: electron } = await import('electron')
const child = spawnSync(electron, [path.join(import.meta.dirname, 'probe-prepared-native.mjs'), '--child', native], {
cwd: out, encoding: 'utf8', timeout: 15000, env: { ...process.env, ELECTRON_RUN_AS_NODE: '1' },
})
assert.equal(child.error, undefined)
assert.equal(child.status, 0, child.stderr)
const result = JSON.parse(child.stdout)
assert.equal(result.arch, process.arch)
assert.equal(result.exitCode, 0)
assert.match(result.marker, /^hermes-pty-/)
} finally {
fs.rmSync(out, { recursive: true, force: true })
}
}, 30000)