diff --git a/headless/test-node-load.cjs b/headless/test-node-load.cjs new file mode 100644 index 000000000..c0360488a --- /dev/null +++ b/headless/test-node-load.cjs @@ -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); +}); diff --git a/headless/test-node-load.mjs b/headless/test-node-load.mjs new file mode 100644 index 000000000..23aed9827 --- /dev/null +++ b/headless/test-node-load.mjs @@ -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'); diff --git a/package.json b/package.json index 9590e8a12..d4338fc87 100644 --- a/package.json +++ b/package.json @@ -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": {