Add Node smoke tests for @xterm/headless package

Verify CJS and ESM bundles load, accept writes, expose buffer API,
resize, and dispose. Add npm run test-headless-node script.

Co-authored-by: Daniel Imms <Tyriar@users.noreply.github.com>
This commit is contained in:
Cursor Agent
2026-05-28 01:23:21 +00:00
co-authored by Daniel Imms
parent 584954b4fb
commit 07bdaf8767
3 changed files with 70 additions and 0 deletions
+39
View File
@@ -0,0 +1,39 @@
/**
* Smoke test: @xterm/headless loads and runs in Node.js (require).
*/
const { strictEqual } = require('node:assert');
const { Terminal } = require('./lib-headless/xterm-headless.js');
function writeSync(term, data) {
return new Promise(resolve => term.write(data, resolve));
}
function lineEquals(term, index, text) {
strictEqual(term.buffer.active.getLine(index).translateToString(true), text);
}
(async () => {
const term = new Terminal({ cols: 80, rows: 24, allowProposedApi: true });
strictEqual(term.cols, 80);
strictEqual(term.rows, 24);
await writeSync(term, 'hello from node');
lineEquals(term, 0, 'hello from node');
await writeSync(term, 'foo');
await writeSync(term, 'bar');
await writeSync(term, '文');
lineEquals(term, 0, 'hello from nodefoobar文');
term.resize(60, 15);
strictEqual(term.cols, 60);
strictEqual(term.rows, 15);
term.dispose();
strictEqual(term._core._store.isDisposed, true);
console.log('headless package (CJS): load, write, buffer, resize, dispose OK');
})().catch(err => {
console.error(err);
process.exit(1);
});
+29
View File
@@ -0,0 +1,29 @@
/**
* Smoke test: @xterm/headless loads and runs in Node.js (ESM + CJS).
*/
import { createRequire } from 'node:module';
import { strictEqual } from 'node:assert';
const require = createRequire(import.meta.url);
function writeSync(term, data) {
return new Promise(resolve => term.write(data, resolve));
}
function lineEquals(term, index, text) {
strictEqual(term.buffer.active.getLine(index).translateToString(true), text);
}
const { Terminal: TerminalEsm } = await import('./lib-headless/xterm-headless.mjs');
const termEsm = new TerminalEsm({ cols: 80, rows: 24 });
await writeSync(termEsm, 'esm ok');
lineEquals(termEsm, 0, 'esm ok');
termEsm.dispose();
const { Terminal: TerminalCjs } = require('./lib-headless/xterm-headless.js');
const termCjs = new TerminalCjs({ cols: 40, rows: 10 });
await writeSync(termCjs, 'cjs ok');
lineEquals(termCjs, 0, 'cjs ok');
termCjs.dispose();
console.log('headless package: ESM and CJS load, write, and buffer read OK');
+2
View File
@@ -72,6 +72,8 @@
"prepackage-headless": "npm run esbuild-package-headless-only",
"package-headless": "webpack --config ./webpack.config.headless.js",
"postpackage-headless": "node ./bin/package_headless.js",
"test-headless-node": "node headless/test-node-load.cjs && node headless/test-node-load.mjs",
"pretest-headless-node": "npm run build && npm run esbuild-package-headless-only && webpack --config ./webpack.config.headless.js",
"prepublishOnly": "npm run package"
},
"devDependencies": {