Bring smoketest scripts together (#3370)

This commit is contained in:
Alexandru Dima 2022-10-18 14:20:09 +02:00 committed by GitHub
parent 5d653b2569
commit 2b3d8516c6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 1546 additions and 112 deletions

View file

@ -5,11 +5,11 @@
</head>
<body>
<div id="editor-container" style="position: absolute; width: 500px; height: 400px"></div>
<script src="../../release/dev/vs/loader.js"></script>
<script src="../../../release/dev/vs/loader.js"></script>
<script>
require.config({
paths: {
vs: '../../release/dev/vs'
vs: '../../../release/dev/vs'
}
});
require(['vs/editor/editor.main'], () => {

View file

@ -3,4 +3,9 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
exports.PORT = 8563;
/* keeping TS happy */
exports.__nothing = undefined;
/** @typedef {'chromium'|'firefox'|'webkit'} BrowserKind */
/** @typedef {'amd'|'webpack'|'esbuild'|'vite'} PackagerKind */
/** @typedef {{browser:BrowserKind; packager:PackagerKind; debugTests:boolean; port:number;}} TestInfo */

View file

@ -7,7 +7,7 @@ import * as esbuild from 'esbuild';
import * as path from 'path';
import { removeDir } from '../../build/fs';
removeDir('test/smoke/esbuild/out', (entry) => /esbuild.html$/.test(entry));
removeDir('test/smoke/esbuild/out');
const workerEntryPoints = [
'vs/language/json/json.worker.js',

View file

@ -0,0 +1,56 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import webpack from 'webpack';
import MonacoWebpackPlugin from '../../webpack-plugin/out/index.js';
import * as path from 'path';
const REPO_ROOT = path.join(__dirname, '../../');
const CROSS_ORIGIN_ASSETS = process.argv.includes('--cross-origin');
webpack(
{
mode: 'development',
entry: './index.js',
context: path.join(__dirname, 'webpack'),
output: {
path: path.resolve(REPO_ROOT, 'test/smoke/webpack/out'),
filename: 'app.js',
publicPath: CROSS_ORIGIN_ASSETS
? 'http://localhost:8088/monaco-editor/test/smoke/webpack/out/'
: undefined
},
resolve: {
alias: {
'monaco-editor': path.resolve(REPO_ROOT, 'release')
}
},
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
},
{
test: /\.ttf$/,
use: ['file-loader']
}
]
},
plugins: [<any>new MonacoWebpackPlugin({
monacoEditorPath: path.resolve(REPO_ROOT, 'release')
})]
},
(err: Error | undefined, stats: webpack.Stats | undefined) => {
if (err) {
console.error(err);
process.exit(1);
}
if (stats && stats.hasErrors()) {
console.log(stats.compilation.errors);
process.exit(1);
}
}
);

View file

@ -9,10 +9,14 @@ const yaserver = require('yaserver');
const http = require('http');
const cp = require('child_process');
const path = require('path');
const { PORT } = require('./common');
const DEBUG_TESTS = process.argv.includes('--debug-tests');
/** @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({
@ -37,7 +41,7 @@ yaserver
async function runTests() {
// uncomment to shortcircuit and run a specific combo
// await runTest('webpack', 'chromium'); return;
/** @type {('amd'|'webpack'|'esbuild'|'vite')[]} */
/** @type {PackagerKind[]} */
const testTypes = ['amd', 'webpack', 'esbuild', 'vite'];
for (const type of testTypes) {
@ -48,16 +52,20 @@ async function runTests() {
}
/**
* @param {'amd'|'webpack'|'esbuild'|'vite'} type
* @param {'chromium'|'firefox'|'webkit'} browser
* @param {PackagerKind} packager
* @param {BrowserKind} browser
* @returns
*/
function runTest(type, browser) {
function runTest(packager, browser) {
return new Promise((resolve, reject) => {
const env = { BROWSER: browser, TESTS_TYPE: type, ...process.env };
if (DEBUG_TESTS) {
env['DEBUG_TESTS'] = 'true';
}
/** @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',
[

View file

@ -7,21 +7,23 @@
const playwright = require('playwright');
const { assert } = require('chai');
const { PORT } = require('./common');
const browserType = process.env.BROWSER || 'chromium';
const DEBUG_TESTS = Boolean(process.env.DEBUG_TESTS || false);
const TESTS_TYPE = process.env.TESTS_TYPE || 'amd';
/** @typedef {import('./common').BrowserKind} BrowserKind */
/** @typedef {import('./common').PackagerKind} PackagerKind */
/** @typedef {import('./common').TestInfo} TestInfo */
/** @type TestInfo */
const testInfo = JSON.parse(process.env.MONACO_TEST_INFO || '');
const URLS = {
amd: `http://127.0.0.1:${PORT}/test/smoke/amd.html`,
webpack: `http://127.0.0.1:${PORT}/test/smoke/webpack/webpack.html`,
esbuild: `http://127.0.0.1:${PORT}/test/smoke/esbuild/esbuild.html`,
vite: `http://127.0.0.1:${PORT}/test/smoke/vite/dist/index.html`
amd: `http://127.0.0.1:${testInfo.port}/test/smoke/amd/index.html`,
webpack: `http://127.0.0.1:${testInfo.port}/test/smoke/webpack/index.html`,
esbuild: `http://127.0.0.1:${testInfo.port}/test/smoke/esbuild/index.html`,
vite: `http://127.0.0.1:${testInfo.port}/test/smoke/vite/dist/index.html`
};
const URL = URLS[TESTS_TYPE];
const URL = URLS[testInfo.packager];
suite(`Smoke Test '${TESTS_TYPE}' on '${browserType}'`, () => {
suite(`Smoke Test '${testInfo.packager}' on '${testInfo.browser}'`, () => {
/** @type {playwright.Browser} */
let browser;
@ -29,10 +31,10 @@ suite(`Smoke Test '${TESTS_TYPE}' on '${browserType}'`, () => {
let page;
suiteSetup(async () => {
browser = await playwright[browserType].launch({
headless: !DEBUG_TESTS,
devtools: DEBUG_TESTS && browserType === 'chromium'
// slowMo: DEBUG_TESTS ? 2000 : 0
browser = await playwright[testInfo.browser].launch({
headless: !testInfo.debugTests,
devtools: testInfo.debugTests && testInfo.browser === 'chromium'
// slowMo: testInfo.debugTests ? 2000 : 0
});
});

View file

@ -0,0 +1,4 @@
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
// expose the monaco API as a global for tests
window.monacoAPI = monaco;