<!-- CURSOR_AGENT_PR_BODY_BEGIN --> ## Summary Improves reliability and correctness of `bin/` maintenance scripts used for local development and CI. ## Behavioral fixes - **Exit codes**: `test_integration.js` exits with code 1 when `--suite` names an unknown suite; `test_unit.js` uses a non-zero fallback (`-1`) when the coverage or mocha child process has no status; `esbuild_all.mjs` exits non-zero if any parallel esbuild child fails. - **Repo root**: `setup-full.mjs` resolves the repository root one directory above `bin/` (was incorrectly using `bin/` as root). - **esbuild_all**: Propagates child build failures instead of always exiting 0. - **Integration suites**: When `--suite` is omitted, all configured Playwright suites (core + addons) run; when provided, only the matching suite runs. - **test_unit.js**: Declares the `files` filter variable so file arguments from `npm run test-unit` work without a ReferenceError. - **test_mousemodes.js**: Uses the correct cursor-home CSI (`ESC [ H`) when clearing the menu screen. - **Cleanup**: Removes debug logging from the test-unit coverage path; adds a missing semicolon after the suite regex match. ## Affected scripts - `bin/test_integration.js` - `bin/test_unit.js` - `bin/esbuild_all.mjs` - `bin/setup-full.mjs` - `bin/test_mousemodes.js` ## Testing - Syntax-checked affected scripts with `node --check` - Verified `node bin/test_integration.js --suite=unknown` exits 1 with an error message - `npm run lint-changes` (no TypeScript files changed) <!-- CURSOR_AGENT_PR_BODY_END --> <div><a href="https://cursor.com/agents/bc-94b28f5d-740c-4cb6-8cd9-40f35bc6086c"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-94b28f5d-740c-4cb6-8cd9-40f35bc6086c"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a> </div>
81 lines
1.9 KiB
JavaScript
81 lines
1.9 KiB
JavaScript
/**
|
|
* Copyright (c) 2019 The xterm.js authors. All rights reserved.
|
|
* @license MIT
|
|
*/
|
|
|
|
// @ts-check
|
|
|
|
const cp = require('child_process');
|
|
const path = require('path');
|
|
|
|
let argv = process.argv.slice(2);
|
|
let suiteFilter = undefined;
|
|
while (argv.some(e => e.startsWith('--suite='))) {
|
|
const i = argv.findIndex(e => e.startsWith('--suite='));
|
|
const match = argv[i].match(/--suite=(?<suitename>.+)/);
|
|
suiteFilter = match?.groups?.suitename ?? undefined;
|
|
argv.splice(i, 1);
|
|
}
|
|
|
|
let configs = [
|
|
{ name: 'core', path: 'out-esbuild-test/playwright/playwright.config.js' }
|
|
];
|
|
const addons = [
|
|
'attach',
|
|
'clipboard',
|
|
'fit',
|
|
'image',
|
|
'progress',
|
|
'search',
|
|
'serialize',
|
|
'unicode-graphemes',
|
|
'unicode11',
|
|
'web-fonts',
|
|
'web-links',
|
|
'webgl',
|
|
];
|
|
for (const addon of addons) {
|
|
configs.push({ name: `addon-${addon}`, path: `addons/addon-${addon}/out-esbuild-test/playwright.config.js` });
|
|
}
|
|
|
|
if (suiteFilter) {
|
|
configs = configs.filter(e => e.name === suiteFilter);
|
|
}
|
|
|
|
if (suiteFilter && configs.length === 0) {
|
|
console.error(`Unknown suite: ${suiteFilter}`);
|
|
process.exit(1);
|
|
}
|
|
|
|
function npmBinScript(script) {
|
|
return path.resolve(__dirname, `../node_modules/.bin/` + (process.platform === 'win32' ?
|
|
`${script}.cmd` : script));
|
|
}
|
|
|
|
async function run() {
|
|
let exitCode = 0;
|
|
for (const config of configs) {
|
|
const command = npmBinScript('playwright');
|
|
const args = ['test', '-c', config.path, ...argv];
|
|
console.log(`Running suite \x1b[1;34m${config.name}...\x1b[0m`);
|
|
console.log(`\n\x1b[32m${command}\x1b[0m`, args);
|
|
const run = cp.spawnSync(command, args, {
|
|
cwd: path.resolve(__dirname, '..'),
|
|
shell: true,
|
|
stdio: 'inherit'
|
|
}
|
|
);
|
|
|
|
if (run.error) {
|
|
console.error(run.error);
|
|
process.exit(run.status ?? 1);
|
|
}
|
|
|
|
if (run.status) {
|
|
exitCode = run.status;
|
|
}
|
|
}
|
|
process.exit(exitCode);
|
|
}
|
|
run();
|