95 lines
2.4 KiB
JavaScript
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);
|
|
}
|
|
});
|
|
});
|
|
}
|