mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 18:32:56 +01:00
CI testing for editor distro, webpack bundling and smoke test (#1675)
Bundle/Test with latest VS Code.
This commit is contained in:
parent
68d9e00fbe
commit
3d0dae8fe1
11 changed files with 3237 additions and 1 deletions
38
.github/workflows/ci.yml
vendored
Normal file
38
.github/workflows/ci.yml
vendored
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
name: Build
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 8 * * *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Smoke Test
|
||||||
|
# This job runs on Linux
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
- name: Set up Node.js
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: 10.x
|
||||||
|
- name: Checkout VS Code
|
||||||
|
run: git clone --depth 1 https://github.com/microsoft/vscode vscode
|
||||||
|
- name: VS Code yarn & Editor Distro
|
||||||
|
working-directory: ./vscode
|
||||||
|
run: |
|
||||||
|
yarn
|
||||||
|
yarn gulp editor-distro
|
||||||
|
- name: NPM Install
|
||||||
|
run: npm install
|
||||||
|
- name: Webpack Bundle
|
||||||
|
run: |
|
||||||
|
npm run bundle
|
||||||
|
- name: Build Tests
|
||||||
|
run: |
|
||||||
|
npm run build-test
|
||||||
|
- name: Run Smoke Test
|
||||||
|
run: |
|
||||||
|
npm run ciserver &
|
||||||
|
sleep 10
|
||||||
|
npm run test
|
||||||
5
.gitignore
vendored
5
.gitignore
vendored
|
|
@ -2,3 +2,8 @@
|
||||||
/*.iml
|
/*.iml
|
||||||
/node_modules/
|
/node_modules/
|
||||||
/release/
|
/release/
|
||||||
|
dist/*.js
|
||||||
|
dist/fonts/*
|
||||||
|
out-ci/
|
||||||
|
.DS_Store
|
||||||
|
vscode
|
||||||
|
|
@ -58,6 +58,7 @@ Contributions to `monaco-typescript`:
|
||||||
* `autoClosingOvertype`: it controls whether the editor allows [typing over closing quotes or brackets](https://github.com/microsoft/vscode/issues/37315#issuecomment-515200477).
|
* `autoClosingOvertype`: it controls whether the editor allows [typing over closing quotes or brackets](https://github.com/microsoft/vscode/issues/37315#issuecomment-515200477).
|
||||||
* `cursorSurroundingLines`: it controls how many visible lines to display around the cursor while moving the cursor towards beginning or end of a file.
|
* `cursorSurroundingLines`: it controls how many visible lines to display around the cursor while moving the cursor towards beginning or end of a file.
|
||||||
* `renderWhitespace: "selection"`: the editor can render whitespaces only in selection.
|
* `renderWhitespace: "selection"`: the editor can render whitespaces only in selection.
|
||||||
|
* Deprecate `mouseWheel` event in favor of `wheel`. Scrolling works again in Firefox.
|
||||||
|
|
||||||
### API changes
|
### API changes
|
||||||
|
|
||||||
|
|
|
||||||
25
ci/core.js
Normal file
25
ci/core.js
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
import * as monaco from 'monaco-editor-core';
|
||||||
|
|
||||||
|
self.MonacoEnvironment = {
|
||||||
|
getWorkerUrl: function (moduleId, label) {
|
||||||
|
return './editor.worker.bundle.js';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
window.instance = monaco.editor.create(document.getElementById('container'), {
|
||||||
|
value: [
|
||||||
|
'from banana import *',
|
||||||
|
'',
|
||||||
|
'class Monkey:',
|
||||||
|
' # Bananas the monkey can eat.',
|
||||||
|
' capacity = 10',
|
||||||
|
' def eat(self, N):',
|
||||||
|
' \'\'\'Make the monkey eat N bananas!\'\'\'',
|
||||||
|
' capacity = capacity - N*banana.size',
|
||||||
|
'',
|
||||||
|
' def feeding_frenzy(self):',
|
||||||
|
' eat(9.25)',
|
||||||
|
' return "Yum yum"',
|
||||||
|
].join('\n'),
|
||||||
|
language: 'python'
|
||||||
|
});
|
||||||
135
ci/core.test.ts
Normal file
135
ci/core.test.ts
Normal file
|
|
@ -0,0 +1,135 @@
|
||||||
|
import * as puppeteer from 'puppeteer';
|
||||||
|
import { assert } from 'chai';
|
||||||
|
|
||||||
|
const APP = 'http://127.0.0.1:8080/dist/core.html';
|
||||||
|
|
||||||
|
let browser: puppeteer.Browser;
|
||||||
|
let page: puppeteer.Page;
|
||||||
|
const width = 800;
|
||||||
|
const height = 600;
|
||||||
|
|
||||||
|
describe('Basic loading', function (): void {
|
||||||
|
this.timeout(20000);
|
||||||
|
|
||||||
|
after(() => {
|
||||||
|
browser.close();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should fail because page has an error', async () => {
|
||||||
|
browser = await puppeteer.launch({
|
||||||
|
headless: process.argv.indexOf('--headless') !== -1,
|
||||||
|
args: [`--window-size=${width},${height}`, `--no-sandbox`]
|
||||||
|
});
|
||||||
|
|
||||||
|
page = (await browser.pages())[0];
|
||||||
|
|
||||||
|
const pageErrors: any[] = [];
|
||||||
|
page.on('pageerror', (e) => {
|
||||||
|
console.log(e);
|
||||||
|
pageErrors.push(e);
|
||||||
|
});
|
||||||
|
|
||||||
|
page.on('error', (e) => {
|
||||||
|
console.log(e);
|
||||||
|
pageErrors.push(e);
|
||||||
|
});
|
||||||
|
|
||||||
|
await page.goto(APP);
|
||||||
|
this.timeout(20000);
|
||||||
|
|
||||||
|
for (const e of pageErrors) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('API Integration Tests', function (): void {
|
||||||
|
this.timeout(20000);
|
||||||
|
|
||||||
|
before(async function (): Promise<any> {
|
||||||
|
browser = await puppeteer.launch({
|
||||||
|
headless: process.argv.indexOf('--headless') !== -1,
|
||||||
|
args: [`--window-size=${width},${height}`, `--no-sandbox`]
|
||||||
|
});
|
||||||
|
page = (await browser.pages())[0];
|
||||||
|
await page.setViewport({ width, height });
|
||||||
|
});
|
||||||
|
|
||||||
|
after(() => {
|
||||||
|
browser.close();
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await page.goto(APP);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Default initialization should be error-less', async function (): Promise<any> {
|
||||||
|
assert.equal(await page.evaluate(`monaco.editor.DefaultEndOfLine[1]`), 'LF');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Focus and Type', async function (): Promise<any> {
|
||||||
|
await page.evaluate(`
|
||||||
|
(function () {
|
||||||
|
instance.focus();
|
||||||
|
instance.trigger('keyboard', 'cursorHome');
|
||||||
|
instance.trigger('keyboard', 'type', {
|
||||||
|
text: 'a'
|
||||||
|
});
|
||||||
|
})()
|
||||||
|
`);
|
||||||
|
assert.equal(await page.evaluate(`instance.getModel().getLineContent(1)`), 'afrom banana import *');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Type and Undo', async function (): Promise<any> {
|
||||||
|
await page.evaluate(`
|
||||||
|
(function () {
|
||||||
|
instance.focus();
|
||||||
|
instance.trigger('keyboard', 'cursorHome');
|
||||||
|
instance.trigger('keyboard', 'type', {
|
||||||
|
text: 'a'
|
||||||
|
});
|
||||||
|
instance.trigger('keyboard', 'undo');
|
||||||
|
})()
|
||||||
|
`);
|
||||||
|
assert.equal(await page.evaluate(`instance.getModel().getLineContent(1)`), 'from banana import *');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Multi Cursor', async function (): Promise<any> {
|
||||||
|
await page.evaluate(`
|
||||||
|
(function () {
|
||||||
|
instance.focus();
|
||||||
|
instance.trigger('keyboard', 'editor.action.insertCursorBelow');
|
||||||
|
instance.trigger('keyboard', 'editor.action.insertCursorBelow');
|
||||||
|
instance.trigger('keyboard', 'editor.action.insertCursorBelow');
|
||||||
|
instance.trigger('keyboard', 'editor.action.insertCursorBelow');
|
||||||
|
instance.trigger('keyboard', 'editor.action.insertCursorBelow');
|
||||||
|
instance.trigger('keyboard', 'type', {
|
||||||
|
text: '# '
|
||||||
|
});
|
||||||
|
instance.focus();
|
||||||
|
})()
|
||||||
|
`);
|
||||||
|
|
||||||
|
await page.waitFor(1000);
|
||||||
|
|
||||||
|
assert.deepEqual(await page.evaluate(`
|
||||||
|
[
|
||||||
|
instance.getModel().getLineContent(1),
|
||||||
|
instance.getModel().getLineContent(2),
|
||||||
|
instance.getModel().getLineContent(3),
|
||||||
|
instance.getModel().getLineContent(4),
|
||||||
|
instance.getModel().getLineContent(5),
|
||||||
|
instance.getModel().getLineContent(6),
|
||||||
|
instance.getModel().getLineContent(7),
|
||||||
|
]
|
||||||
|
`), [
|
||||||
|
'# from banana import *',
|
||||||
|
'# ',
|
||||||
|
'# class Monkey:',
|
||||||
|
'# # Bananas the monkey can eat.',
|
||||||
|
'# capacity = 10',
|
||||||
|
'# def eat(self, N):',
|
||||||
|
'\t\t\'\'\'Make the monkey eat N bananas!\'\'\''
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
17
ci/tsconfig.json
Normal file
17
ci/tsconfig.json
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"lib": [
|
||||||
|
"dom",
|
||||||
|
"es6",
|
||||||
|
],
|
||||||
|
"rootDir": ".",
|
||||||
|
"outDir": "../out-ci/",
|
||||||
|
"types": [
|
||||||
|
"../node_modules/@types/mocha"
|
||||||
|
],
|
||||||
|
"sourceMap": true,
|
||||||
|
"removeComments": true,
|
||||||
|
"pretty": true,
|
||||||
|
"strict": true
|
||||||
|
}
|
||||||
|
}
|
||||||
55
ci/webpack.config.js
Normal file
55
ci/webpack.config.js
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
mode: 'production',
|
||||||
|
entry: {
|
||||||
|
"core": './ci/core.js',
|
||||||
|
"editor.worker": './vscode/out-monaco-editor-core/esm/vs/editor/editor.worker.js',
|
||||||
|
"json.worker": 'monaco-json/release/esm/json.worker',
|
||||||
|
"css.worker": 'monaco-css/release/esm/css.worker',
|
||||||
|
"html.worker": 'monaco-html/release/esm/html.worker',
|
||||||
|
"ts.worker": 'monaco-typescript/release/esm/ts.worker',
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
globalObject: 'self',
|
||||||
|
filename: '[name].bundle.js',
|
||||||
|
path: path.resolve(__dirname, '../dist')
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.css$/,
|
||||||
|
use: ['style-loader', 'css-loader'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/,
|
||||||
|
use: [
|
||||||
|
{
|
||||||
|
loader: 'file-loader',
|
||||||
|
options: {
|
||||||
|
name: '[name].[ext]',
|
||||||
|
outputPath: 'fonts/'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
'monaco-editor-core/esm/vs/editor/editor.worker': path.resolve(__dirname, '../vscode/out-monaco-editor-core/esm/vs/editor/editor.worker.js'),
|
||||||
|
'monaco-editor-core': path.resolve(__dirname, '../vscode/out-monaco-editor-core/esm/vs/editor/editor.main.js'),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
stats: {
|
||||||
|
all: false,
|
||||||
|
modules: true,
|
||||||
|
maxModules: 0,
|
||||||
|
errors: true,
|
||||||
|
warnings: true,
|
||||||
|
// our additional options
|
||||||
|
moduleTrace: true,
|
||||||
|
errorDetails: true,
|
||||||
|
chunks: true
|
||||||
|
}
|
||||||
|
};
|
||||||
16
dist/core.html
vendored
Normal file
16
dist/core.html
vendored
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="container" style="width:800px;height:600px;border:1px solid #ccc"></div>
|
||||||
|
|
||||||
|
<script src="./core.bundle.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
@ -852,3 +852,8 @@ gulp.task('simpleserver', taskSeries(generateTestSamplesTask, function() {
|
||||||
createSimpleServer(SERVER_ROOT, 8080);
|
createSimpleServer(SERVER_ROOT, 8080);
|
||||||
createSimpleServer(SERVER_ROOT, 8088);
|
createSimpleServer(SERVER_ROOT, 8088);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
gulp.task('ciserver', taskSeries(generateTestSamplesTask, function () {
|
||||||
|
const SERVER_ROOT = path.normalize(path.join(__dirname, './'));
|
||||||
|
createSimpleServer(SERVER_ROOT, 8080);
|
||||||
|
}));
|
||||||
2924
package-lock.json
generated
2924
package-lock.json
generated
File diff suppressed because it is too large
Load diff
17
package.json
17
package.json
|
|
@ -9,7 +9,11 @@
|
||||||
"simpleserver": "gulp simpleserver",
|
"simpleserver": "gulp simpleserver",
|
||||||
"release": "gulp release",
|
"release": "gulp release",
|
||||||
"website": "gulp website",
|
"website": "gulp website",
|
||||||
"build-website": "gulp build-website"
|
"build-website": "gulp build-website",
|
||||||
|
"build-test": "tsc -b ./ci/tsconfig.json --preserveWatchOutput",
|
||||||
|
"bundle": "webpack --config ci/webpack.config.js --display-error-details --bail",
|
||||||
|
"test": "mocha \"out-ci/*.test.js\" --headless",
|
||||||
|
"ciserver": "gulp ciserver"
|
||||||
},
|
},
|
||||||
"typings": "./esm/vs/editor/editor.api.d.ts",
|
"typings": "./esm/vs/editor/editor.api.d.ts",
|
||||||
"module": "./esm/vs/editor/editor.main.js",
|
"module": "./esm/vs/editor/editor.main.js",
|
||||||
|
|
@ -18,21 +22,32 @@
|
||||||
"url": "https://github.com/Microsoft/monaco-editor"
|
"url": "https://github.com/Microsoft/monaco-editor"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/chai": "^3.4.34",
|
||||||
|
"@types/mocha": "^2.2.33",
|
||||||
|
"@types/puppeteer": "^1.12.4",
|
||||||
|
"chai": "^4.2.0",
|
||||||
"clean-css": "^4.2.1",
|
"clean-css": "^4.2.1",
|
||||||
|
"css-loader": "^3.2.0",
|
||||||
"event-stream": "3.3.4",
|
"event-stream": "3.3.4",
|
||||||
|
"file-loader": "^4.2.0",
|
||||||
"gulp": "^4.0.0",
|
"gulp": "^4.0.0",
|
||||||
"gulp-typedoc": "^2.2.2",
|
"gulp-typedoc": "^2.2.2",
|
||||||
|
"mocha": "^6.1.4",
|
||||||
"monaco-css": "2.5.1",
|
"monaco-css": "2.5.1",
|
||||||
"monaco-editor-core": "0.18.1",
|
"monaco-editor-core": "0.18.1",
|
||||||
"monaco-html": "2.5.3",
|
"monaco-html": "2.5.3",
|
||||||
"monaco-json": "2.7.0",
|
"monaco-json": "2.7.0",
|
||||||
"monaco-languages": "1.8.0",
|
"monaco-languages": "1.8.0",
|
||||||
"monaco-typescript": "3.5.1",
|
"monaco-typescript": "3.5.1",
|
||||||
|
"puppeteer": "^1.15.0",
|
||||||
"rimraf": "^2.6.3",
|
"rimraf": "^2.6.3",
|
||||||
|
"style-loader": "^1.0.0",
|
||||||
"typedoc": "^0.15.0",
|
"typedoc": "^0.15.0",
|
||||||
"typescript": "^3.3.3",
|
"typescript": "^3.3.3",
|
||||||
"uncss": "^0.16.2",
|
"uncss": "^0.16.2",
|
||||||
"vinyl": "^2.2.0",
|
"vinyl": "^2.2.0",
|
||||||
|
"webpack": "^4.39.3",
|
||||||
|
"webpack-cli": "^3.3.10",
|
||||||
"yaserver": "^0.1.0"
|
"yaserver": "^0.1.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue