Skip to content

Commit

Permalink
Knobs for unit-testing extensions (microsoft#10178)
Browse files Browse the repository at this point in the history
Converted `test-extensions-unit.bat` to javascript to add a small QoL improvement that I think people will find useful: specifying which extension(s) you want to run tests for instead of commenting out lines of a script.

In addition to existing behavior being mostly preserved (node test-extensions-unit.js defaults to running all unit tests), you can specify one or more:

```
node test-extensions-unit.js sql-database-projects
node test-extensions-unit.js sql-database-projects schema-compare
```
  • Loading branch information
Benjin authored May 4, 2020
1 parent 3e5b7fd commit 5498c1c
Show file tree
Hide file tree
Showing 3 changed files with 131 additions and 5 deletions.
54 changes: 54 additions & 0 deletions ThirdPartyNotices.txt
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ expressly granted herein, whether by implication, estoppel or otherwise.
node-fetch: https://github.com/bitinn/node-fetch
node-pty: https://github.com/Tyriar/node-pty
nsfw: https://github.com/Axosoft/nsfw
optimist: https://github.com/substack/node-optimist
primeng: https://github.com/primefaces/primeng
process-nextick-args: https://github.com/calvinmetcalf/process-nextick-args
pty.js: https://github.com/chjj/pty.js
Expand All @@ -72,6 +73,7 @@ expressly granted herein, whether by implication, estoppel or otherwise.
vscode-textmate: https://github.com/Microsoft/vscode-textmate
winreg: https://github.com/fresc81/node-winreg
xterm: https://github.com/sourcelair/xterm.js
yargs: https://github.com/yargs/yargs
yauzl: https://github.com/thejoshwolfe/yauzl
zone.js: https://www.npmjs.com/package/zone

Expand Down Expand Up @@ -1451,6 +1453,32 @@ SOFTWARE.
=========================================
END OF nsfw NOTICES AND INFORMATION

%% optimist NOTICES AND INFORMATION BEGIN HERE
=========================================
Copyright 2010 James Halliday (mail@substack.net)

This project is free software released under the MIT/X11 license:

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
=========================================
END OF optimist NOTICES AND INFORMATION

%% primeng NOTICES AND INFORMATION BEGIN HERE
=========================================
The MIT License (MIT)
Expand Down Expand Up @@ -2222,6 +2250,32 @@ THE SOFTWARE.
=========================================
END OF xterm NOTICES AND INFORMATION

%% yargs NOTICES AND INFORMATION BEGIN HERE
=========================================
MIT License

Copyright 2010 James Halliday (mail@substack.net); Modified work Copyright 2014 Contributors (ben@npmjs.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
=========================================
END OF yargs NOTICES AND INFORMATION

%% yauzl NOTICES AND INFORMATION BEGIN HERE
=========================================
The MIT License (MIT)
Expand Down
10 changes: 5 additions & 5 deletions scripts/test-extensions-unit.bat
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ echo %VSCODEEXTENSIONSDIR%

:: Figure out which Electron to use for running tests
if "%INTEGRATION_TEST_ELECTRON_PATH%"=="" (
:: Run out of sources: no need to compile as code.sh takes care of it
:: Run out of sources: no need to compile as code.bat takes care of it
set INTEGRATION_TEST_ELECTRON_PATH=.\scripts\code.bat

echo "Running integration tests out of sources."
echo "Running unit tests out of sources."
) else (
:: Run from a built: need to compile all test extensions
:: Run from a build: need to compile all test extensions
call yarn gulp compile-extension:admin-tool-ext-win
call yarn gulp compile-extension:agent
call yarn gulp compile-extension:azurecore
Expand All @@ -29,12 +29,12 @@ if "%INTEGRATION_TEST_ELECTRON_PATH%"=="" (
call yarn gulp compile-extension:machine-learning
call yarn gulp compile-extension:sql-database-projects

echo "Running integration tests with '%INTEGRATION_TEST_ELECTRON_PATH%' as build."
echo "Running unit tests with '%INTEGRATION_TEST_ELECTRON_PATH%' as build."
)

:: Default to only running stable tests if test grep isn't set
if "%ADS_TEST_GREP%" == "" (
echo Running stable tests only
echo "Running stable tests only"
set ADS_TEST_GREP=@UNSTABLE@
SET ADS_TEST_INVERT_GREP=1
)
Expand Down
72 changes: 72 additions & 0 deletions scripts/test-extensions-unit.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

const execSync = require('child_process').execSync;
const tmp = require('tmp');
const fs = require('fs-extra');
const path = require('path');
const os = require('os');

const extensionList = [
'admin-tool-ext-win',
'agent',
'azurecore',
'cms',
'dacpac',
'schema-compare',
//'mssql',
'notebook',
'resource-deployment',
'machine-learning-services',
'sql-database-projects'];

let argv = require('yargs')
.command('$0 [extensions...]')
.choices('extensions', extensionList)
.default('extensions', extensionList)
.strict().help().wrap(null).version(false).argv;

// set up environment

const VSCODEUSERDATADIR = tmp.dirSync({ prefix: 'adsuser' }).name;
const VSCODEEXTENSIONSDIR = tmp.dirSync({ prefix: 'adsext' }).name;

console.log(VSCODEUSERDATADIR);
console.log(VSCODEEXTENSIONSDIR);

if (!process.env.INTEGRATION_TEST_ELECTRON_PATH) {
process.env.INTEGRATION_TEST_ELECTRON_PATH = path.join(__dirname, '..', 'scripts', os.platform() === 'win32' ? 'code.bat' : 'code.sh');
console.log('Running unit tests out of sources.');
}
else {
for (const ext of argv.extensions) {
console.log(execSync(`yarn gulp compile-extension:${ext}`, { encoding: 'utf-8' }));
}

console.log(`Running unit tests with '${process.env.INTEGRATION_TEST_ELECTRON_PATH}' as build.`);
}

if (!process.env.ADS_TEST_GREP) {
console.log('Running stable tests only');

process.env.ADS_TEST_GREP = '@UNSTABLE@';
process.env.ADS_TEST_INVERT_GREP = 1;
}

// execute tests

for (const ext of argv.extensions) {
console.log('*'.repeat(ext.length + 23));
console.log(`*** starting ${ext} tests ***`);
console.log('*'.repeat(ext.length + 23));

const command = `${process.env.INTEGRATION_TEST_ELECTRON_PATH} --extensionDevelopmentPath=${path.join(__dirname, '..', 'extensions', ext)} --extensionTestsPath=${path.join(__dirname, '..', 'extensions', ext, 'out', 'test')} --user-data-dir=${VSCODEUSERDATADIR} --extensions-dir=${VSCODEEXTENSIONSDIR} --remote-debugging-port=9222 --disable-telemetry --disable-crash-reporter --disable-updates --nogpu`;
console.log(execSync(command, {stdio: 'inherit'}));
}

// clean up

fs.remove(VSCODEUSERDATADIR, { recursive: true });
fs.remove(VSCODEEXTENSIONSDIR, { recursive: true });

0 comments on commit 5498c1c

Please sign in to comment.