monaco-editor/test/smoke/runner.js

95 lines
2.4 KiB
JavaScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
//@ts-check
const yaserver = require('yaserver');
const http = require('http');
const cp = require('child_process');
const path = require('path');
/** @typedef {import('./common').BrowserKind} BrowserKind */
/** @typedef {import('./common').PackagerKind} PackagerKind */
/** @typedef {import('./common').TestInfo} TestInfo */
const DEBUG_TESTS = process.argv.includes('--debug-tests');
const REPO_ROOT = path.join(__dirname, '../../');
const PORT = 8563;
yaserver
.createServer({
rootDir: REPO_ROOT
})
.then((staticServer) => {
const server = http.createServer((request, response) => {
return staticServer.handle(request, response);
});
server.listen(PORT, '127.0.0.1', async () => {
try {
await runTests();
console.log(`All good`);
process.exit(0);
} catch (err) {
console.error(err);
process.exit(1);
}
});
});
async function runTests() {
// uncomment to shortcircuit and run a specific combo
// await runTest('webpack', 'chromium'); return;
/** @type {PackagerKind[]} */
const testTypes = ['amd', 'webpack', 'esbuild', 'vite'];
// TODO: add parcel! (this currently fails because parcel replaces process with {})
for (const type of testTypes) {
await runTest(type, 'chromium');
await runTest(type, 'firefox');
await runTest(type, 'webkit');
}
}
/**
* @param {PackagerKind} packager
* @param {BrowserKind} browser
* @returns
*/
function runTest(packager, browser) {
return new Promise((resolve, reject) => {
/** @type TestInfo */
const testInfo = {
browser,
packager,
debugTests: DEBUG_TESTS,
port: PORT
};
const env = { MONACO_TEST_INFO: JSON.stringify(testInfo), ...process.env };
const proc = cp.spawn(
'node',
[
path.join(REPO_ROOT, 'node_modules/mocha/bin/mocha'),
'test/smoke/*.test.js',
'--no-delay',
'--headless',
'--timeout',
'20000'
],
{
env,
stdio: 'inherit'
}
);
proc.on('error', reject);
proc.on('exit', (code) => {
if (code === 0) {
resolve(undefined);
} else {
reject(code);
}
});
});
}