Something went wrong. Try again.
A rewrite of the Plan 9 rc shell in Goose for UNIX-like systems and with structured CLI args
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172import assert from 'node:assert/strict';import { resolve } from 'node:path';import { Terminal } from './terminal.mjs';import { mkdtempSync, writeFileSync, rmSync } from 'node:fs';import { tmpdir } from 'node:os';import { join } from 'node:path';
const terminal = new Terminal(resolve(process.argv[2] || 'rc2'));const directory = mkdtempSync(join(tmpdir(), 'rc2-display-'));try { await terminal.expect('% '); terminal.send('\x0c'); await terminal.expect('\x1b[2J\x1b[H\r\x1b[J% ');
terminal.resize(12); terminal.send('echo abcdefghijklmnop'); await terminal.expect('% echo abcdefghijklmnop'); terminal.send('\x1b[D\x1b[D\x0c'); await terminal.expect('\x1b[2J\x1b[H\r\x1b[J% echo abcdefghijklmnop'); terminal.send('X\r'); assert.match(await terminal.expect('\r\n% '), /\r\nabcdefghijklmnXop\r\n/);
terminal.send('echo draft\x1b[A'); await terminal.expect('% echo abcdefghijklmnXop'); terminal.send('\x0c'); await terminal.expect('\x1b[2J\x1b[H\r\x1b[J% echo abcdefghijklmnXop'); terminal.send('\x1b[B\r'); assert.match(await terminal.expect('\r\n% '), /\r\ndraft\r\n/);
terminal.resize(12); terminal.send('echo abcdefghijklmnop'); await terminal.expect('abcdefghijklmnop'); terminal.send('\x1b[D\x1b[D\x7fX\r'); assert.match(await terminal.expect('\r\n% '), /\r\nabcdefghijklmXop\r\n/);
terminal.send('echo é👩👩👧👦🇺🇸'); await terminal.expect('🇺🇸'); terminal.send('\x0c'); await terminal.expect('\x1b[2J\x1b[H\r\x1b[J% echo é👩👩👧👦🇺🇸'); terminal.send('\x7f\x7f\x7fok\r'); assert.match(await terminal.expect('\r\n% '), /\r\nok\r\n/);
terminal.send('echo resize'); await terminal.expect('resize'); terminal.resize(7); terminal.send('\x1b[D\x7fX\r'); assert.match(await terminal.expect('\r\n% '), /\r\nresiXe\r\n/);
terminal.resize(80); terminal.send('fn multiline {\r'); await terminal.expect('\r\n '); terminal.send('\x0c'); await terminal.expect('\x1b[2J\x1b[H\r\x1b[J '); terminal.send('echo whole}\r'); await terminal.expect('\r\n% '); terminal.send('\x1b[A\r'); await terminal.expect('\r\n% '); assert.match(await terminal.command('multiline'), /\r\nwhole\r\n/); const output = []; terminal.process.stdout.on('data', chunk => output.push(chunk)); writeFileSync(`${directory}/bad\u009b31m`, ''); terminal.send(`echo ${directory}/bad\t`); await terminal.expect('31m'); assert.equal(Buffer.concat(output).includes(0x9b), false, 'The editor emitted an eight-bit terminal control'); terminal.send('\x03'); await terminal.expect('^C\r\n% ');} finally { await terminal.close(); rmSync(directory, { recursive: true, force: true });}console.log('Editor tests passed');