import assert from 'node:assert/strict'; import { mkdtempSync, writeFileSync, existsSync, rmSync } from 'node:fs'; import { tmpdir } from 'node:os'; import { join, resolve } from 'node:path'; import { Terminal } from './terminal.mjs'; const directory = mkdtempSync(join(tmpdir(), 'rc2-automatic-')); const marker = join(directory, 'executed'); const script = join(directory, 'demo.rc'); const shell = resolve(process.argv[2] || 'rc2'); writeFileSync(script, `#!/usr/bin/env rc2\n/bin/touch '${marker}'\nargs {\n flag verbose -v --verbose\n option mode -m --mode (fast safe)\n positional transport (ship train)\n}\necho $mode\n`, { mode: 0o700 }); const terminal = new Terminal(shell); try { await terminal.expect('% '); terminal.send(`${script} -vmfa\t`); await terminal.expect('-vmfast '); terminal.send('\x03'); await terminal.expect('^C\r\n% '); terminal.send(`${script} -- tr\t`); await terminal.expect('-- train '); terminal.send('\x03'); await terminal.expect('^C\r\n% '); terminal.send(`rc2 ${script} --mode=sa\t`); await terminal.expect("'--mode=safe' "); terminal.send('\x03'); await terminal.expect('^C\r\n% '); assert.equal(existsSync(marker), false, 'Completion executed the target script'); } finally { await terminal.close(); rmSync(directory, { recursive: true, force: true }); } console.log('Automatic completion tests passed');