UNPKG

vscode-extension-tester

Version:

ExTester is a package that is designed to help you run UI tests for your Visual Studio Code extensions using selenium-webdriver.

187 lines 10.5 kB
#!/usr/bin/env node "use strict"; /** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License", destination); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const commander_1 = require("commander"); const extester_1 = require("./extester"); const codeUtil_1 = require("./util/codeUtil"); const package_json_1 = __importDefault(require("../package.json")); commander_1.program.version(package_json_1.default.version).description('UI Test Runner for VS Code Extension'); commander_1.program .command('get-vscode') .description('Download VS Code for testing') .option('-s, --storage <storage>', 'Use this folder for all test resources') .option('-c, --code_version <version>', 'Version of VS Code to download, use `min`/`max` to download the oldest/latest VS Code supported by ExTester') .option('-t, --type <type>', 'Type of VS Code release (stable/insider)') .option('-n, --no_cache', 'Skip using cached version and download fresh copy without caching it', false) .action(withErrors(async (cmd) => { const extest = new extester_1.ExTester(cmd.storage, codeStream(cmd.type)); await extest.downloadCode(cmd.code_version, cmd.no_cache); })); commander_1.program .command('get-chromedriver') .description('Download ChromeDriver binary') .option('-s, --storage <storage>', 'Use this folder for all test resources') .option('-c, --code_version <version>', 'Version of VS Code you want to run with the ChromeDriver, use `min`/`max` to download the oldest/latest VS Code supported by ExTester') .option('-t, --type <type>', 'Type of VS Code release (stable/insider)') .option('-n, --no_cache', 'Skip using cached version and download fresh copy without caching it', false) .action(withErrors(async (cmd) => { const extest = new extester_1.ExTester(cmd.storage, codeStream(cmd.type)); await extest.downloadChromeDriver(cmd.code_version, cmd.no_cache); })); commander_1.program .command('install-vsix') .description('Install extension from vsix file into test instance of VS Code') .option('-s, --storage <storage>', 'Use this folder for all test resources') .option('-e, --extensions_dir <extensions_directory>', 'VS Code will use this directory for managing extensions') .option('-f, --vsix_file <file>', 'path/URL to vsix file containing the extension') .option('-y, --yarn', 'Use yarn to build the extension via vsce instead of npm', false) .option('-t, --type <type>', 'Type of VS Code release (stable/insider)') .option('-i, --install_dependencies', 'Automatically install extensions your extension depends on', false) .action(withErrors(async (cmd) => { const extest = new extester_1.ExTester(cmd.storage, codeStream(cmd.type), cmd.extensions_dir); await extest.installVsix({ vsixFile: cmd.vsix_file, useYarn: cmd.yarn, installDependencies: cmd.install_dependencies, }); })); commander_1.program .command('install-from-marketplace <id> [ids...]') .description('Install extension from marketplace with given <id> into test instance of VS Code') .option('-s, --storage <storage>', 'Use this folder for all test resources') .option('-e, --extensions_dir <extensions_directory>', 'VS Code will use this directory for managing extensions') .option('-t, --type <type>', 'Type of VS Code release (stable/insider)') .option('-p, --pre_release', 'Installs the pre-release version of the extension') .action(withErrors(async (id, ids, cmd) => { const extest = new extester_1.ExTester(cmd.storage, codeStream(cmd.type), cmd.extensions_dir); await extest.installFromMarketplace(id, cmd.pre_release); if (ids && ids.length > 0) { for (const idx of ids) { await extest.installFromMarketplace(idx, cmd.pre_release); } } })); commander_1.program .command('setup-tests') .description('Set up all necessary requirements for tests to run') .option('-s, --storage <storage>', 'Use this folder for all test resources') .option('-e, --extensions_dir <extensions_directory>', 'VS Code will use this directory for managing extensions') .option('-c, --code_version <version>', 'Version of VS Code to download, use `min`/`max` to download the oldest/latest VS Code supported by ExTester') .option('-t, --type <type>', 'Type of VS Code release (stable/insider)') .option('-y, --yarn', 'Use yarn to build the extension via vsce instead of npm', false) .option('-i, --install_dependencies', 'Automatically install extensions your extension depends on', false) .option('-n, --no_cache', 'Skip using cached version and download fresh copy without caching it', false) .action(withErrors(async (cmd) => { const extest = new extester_1.ExTester(cmd.storage, codeStream(cmd.type), cmd.extensions_dir); await extest.setupRequirements({ vscodeVersion: cmd.code_version, useYarn: cmd.yarn, installDependencies: cmd.install_dependencies, noCache: cmd.no_cache, }); })); commander_1.program .command('run-tests <testFiles...>') .description('Run the test files specified by glob pattern(s)') .option('-s, --storage <storage>', 'Use this folder for all test resources') .option('-e, --extensions_dir <extensions_directory>', 'VS Code will use this directory for managing extensions') .option('-c, --code_version <version>', 'Version of VS Code to be used, use `min`/`max` to download the oldest/latest VS Code supported by ExTester') .option('-t, --type <type>', 'Type of VS Code release (stable/insider)') .option('-o, --code_settings <settings.json>', 'Path to custom settings for VS Code json file') .option('-u, --uninstall_extension', 'Uninstall the extension after the test run', false) .option('-m, --mocha_config <mocharc.js>', 'Path to Mocha configuration file') .option('-l, --log_level <level>', 'Log messages from webdriver with a given level', 'Info') .option('-f, --offline', 'Attempt to run without internet connection, make sure to have all requirements downloaded', false) .option('-C, --coverage', 'Enable code coverage using c8') .option('-r, --open_resource <resources...>', 'Open resources in VS Code. Multiple files and folders can be specified.') .action(withErrors(async (testFiles, cmd) => { const extest = new extester_1.ExTester(cmd.storage, codeStream(cmd.type), cmd.extensions_dir, cmd.coverage); await extest.runTests(testFiles, { vscodeVersion: cmd.code_version, settings: cmd.code_settings, cleanup: cmd.uninstall_extension, config: cmd.mocha_config, logLevel: cmd.log_level, offline: cmd.offline, resources: cmd.open_resource ?? [], }); })); commander_1.program .command('setup-and-run <testFiles...>') .description('Perform all setup and run tests specified by glob pattern(s)') .option('-s, --storage <storage>', 'Use this folder for all test resources') .option('-e, --extensions_dir <extensions_directory>', 'VS Code will use this directory for managing extensions') .option('-c, --code_version <version>', 'Version of VS Code to download, use `min`/`max` to download the oldest/latest VS Code supported by ExTester') .option('-t, --type <type>', 'Type of VS Code release (stable/insider)') .option('-o, --code_settings <settings.json>', 'Path to custom settings for VS Code json file') .option('-y, --yarn', 'Use yarn to build the extension via vsce instead of npm', false) .option('-u, --uninstall_extension', 'Uninstall the extension after the test run', false) .option('-m, --mocha_config <mocharc.js>', 'Path to Mocha configuration file') .option('-i, --install_dependencies', 'Automatically install extensions your extension depends on', false) .option('-l, --log_level <level>', 'Log messages from webdriver with a given level', 'Info') .option('-f, --offline', 'Attempt to run without internet connection, make sure to have all requirements downloaded', false) .option('-C, --coverage', 'Enable code coverage using c8') .option('-r, --open_resource <resources...>', 'Open resources in VS Code. Multiple files and folders can be specified.') .option('-n, --no_cache', 'Skip using cached version and download fresh copy without caching it', false) .action(withErrors(async (testFiles, cmd) => { const extest = new extester_1.ExTester(cmd.storage, codeStream(cmd.type), cmd.extensions_dir, cmd.coverage); await extest.setupAndRunTests(testFiles, cmd.code_version, { useYarn: cmd.yarn, installDependencies: cmd.install_dependencies, noCache: cmd.no_cache, }, { settings: cmd.code_settings, cleanup: cmd.uninstall_extension, config: cmd.mocha_config, logLevel: cmd.log_level, resources: cmd.open_resource ?? [], }); })); commander_1.program.parse(process.argv); function withErrors(command) { return async (...args) => { try { await command(...args); } catch (err) { if (err instanceof Error) { console.log(err.stack); } else { console.log(err); } process.exitCode = 1; } }; } function codeStream(stream) { const envType = process.env.CODE_TYPE; let type = stream; if (!type && envType) { type = envType; } if (type && type.toLowerCase() === 'insider') { return codeUtil_1.ReleaseQuality.Insider; } return codeUtil_1.ReleaseQuality.Stable; } //# sourceMappingURL=cli.js.map