'use strict' const test = require('node:test') const assert = require('node:assert/strict') const fs = require('node:fs') const path = require('node:path') const ELECTRON_DIR = __dirname function readElectronFile(name) { return fs.readFileSync(path.join(ELECTRON_DIR, name), 'utf8') } function requireHiddenChildOptions(source, needle) { const index = source.indexOf(needle) assert.notEqual(index, -1, `missing call site: ${needle}`) const snippet = source.slice(index, index + 700) assert.match( snippet, /hiddenWindowsChildOptions\(/, `expected ${needle} to wrap child-process options with hiddenWindowsChildOptions` ) } test('desktop background child processes opt into hidden Windows consoles', () => { const source = readElectronFile('main.cjs') assert.match(source, /function hiddenWindowsChildOptions\(options = \{\}\)/) requireHiddenChildOptions(source, "execFileSync(\n 'reg'") requireHiddenChildOptions(source, 'execFileSync(pyExe') requireHiddenChildOptions(source, 'spawn(resolveGitBinary()') requireHiddenChildOptions(source, "execFileSync('taskkill'") requireHiddenChildOptions(source, 'spawn(command, args') requireHiddenChildOptions(source, "spawn('curl'") requireHiddenChildOptions(source, 'spawn(backend.command, backend.args') requireHiddenChildOptions(source, 'hermesProcess = spawn(backend.command, backend.args') requireHiddenChildOptions(source, "spawn(py, ['-m', 'hermes_cli.main', 'uninstall', '--gui-summary']") }) test('intentional or interactive desktop child processes stay documented', () => { const source = readElectronFile('main.cjs') assert.match(source, /windowsHide: false/) assert.match(source, /nodePty\.spawn\(command, args/) assert.match(source, /spawn\('cmd\.exe', \['\/c', 'start'/) }) test('bootstrap PowerShell runner hides Windows console children', () => { const source = readElectronFile('bootstrap-runner.cjs') assert.match(source, /function hiddenWindowsChildOptions\(options = \{\}\)/) requireHiddenChildOptions(source, 'spawn(ps, fullArgs') })