Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/microsoft/vscode.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'test/automation/src/electron.ts')
-rw-r--r--test/automation/src/electron.ts133
1 files changed, 133 insertions, 0 deletions
diff --git a/test/automation/src/electron.ts b/test/automation/src/electron.ts
new file mode 100644
index 00000000000..42e46a60a0b
--- /dev/null
+++ b/test/automation/src/electron.ts
@@ -0,0 +1,133 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import { join } from 'path';
+import * as mkdirp from 'mkdirp';
+import { copyExtension } from './extensions';
+import { URI } from 'vscode-uri';
+import { measureAndLog } from './logger';
+import type { LaunchOptions } from './code';
+
+const root = join(__dirname, '..', '..', '..');
+
+export interface IElectronConfiguration {
+ readonly electronPath: string;
+ readonly args: string[];
+ readonly env?: NodeJS.ProcessEnv;
+}
+
+export async function resolveElectronConfiguration(options: LaunchOptions): Promise<IElectronConfiguration> {
+ const { codePath, workspacePath, extensionsPath, userDataDir, remote, logger, logsPath, extraArgs } = options;
+ const env = { ...process.env };
+
+ const args = [
+ workspacePath,
+ '--skip-release-notes',
+ '--skip-welcome',
+ '--disable-telemetry',
+ '--no-cached-data',
+ '--disable-updates',
+ '--disable-keytar',
+ '--disable-crash-reporter',
+ '--disable-workspace-trust',
+ `--extensions-dir=${extensionsPath}`,
+ `--user-data-dir=${userDataDir}`,
+ `--logsPath=${logsPath}`
+ ];
+
+ if (options.verbose) {
+ args.push('--verbose');
+ }
+
+ if (process.platform === 'linux') {
+ args.push('--disable-gpu'); // Linux has trouble in VMs to render properly with GPU enabled
+ }
+
+ if (remote) {
+ // Replace workspace path with URI
+ args[0] = `--${workspacePath.endsWith('.code-workspace') ? 'file' : 'folder'}-uri=vscode-remote://test+test/${URI.file(workspacePath).path}`;
+
+ if (codePath) {
+ // running against a build: copy the test resolver extension
+ await measureAndLog(copyExtension(root, extensionsPath, 'vscode-test-resolver'), 'copyExtension(vscode-test-resolver)', logger);
+ }
+ args.push('--enable-proposed-api=vscode.vscode-test-resolver');
+ const remoteDataDir = `${userDataDir}-server`;
+ mkdirp.sync(remoteDataDir);
+
+ if (codePath) {
+ // running against a build: copy the test resolver extension into remote extensions dir
+ const remoteExtensionsDir = join(remoteDataDir, 'extensions');
+ mkdirp.sync(remoteExtensionsDir);
+ await measureAndLog(copyExtension(root, remoteExtensionsDir, 'vscode-notebook-tests'), 'copyExtension(vscode-notebook-tests)', logger);
+ }
+
+ env['TESTRESOLVER_DATA_FOLDER'] = remoteDataDir;
+ env['TESTRESOLVER_LOGS_FOLDER'] = join(logsPath, 'server');
+ if (options.verbose) {
+ env['TESTRESOLVER_LOG_LEVEL'] = 'trace';
+ }
+ }
+
+ args.push('--enable-proposed-api=vscode.vscode-notebook-tests');
+
+ if (!codePath) {
+ args.unshift(root);
+ }
+
+ if (extraArgs) {
+ args.push(...extraArgs);
+ }
+
+ const electronPath = codePath ? getBuildElectronPath(codePath) : getDevElectronPath();
+
+ return {
+ env,
+ args,
+ electronPath
+ };
+}
+
+export function getDevElectronPath(): string {
+ const buildPath = join(root, '.build');
+ const product = require(join(root, 'product.json'));
+
+ switch (process.platform) {
+ case 'darwin':
+ return join(buildPath, 'electron', `${product.nameLong}.app`, 'Contents', 'MacOS', 'Electron');
+ case 'linux':
+ return join(buildPath, 'electron', `${product.applicationName}`);
+ case 'win32':
+ return join(buildPath, 'electron', `${product.nameShort}.exe`);
+ default:
+ throw new Error('Unsupported platform.');
+ }
+}
+
+export function getBuildElectronPath(root: string): string {
+ switch (process.platform) {
+ case 'darwin':
+ return join(root, 'Contents', 'MacOS', 'Electron');
+ case 'linux': {
+ const product = require(join(root, 'resources', 'app', 'product.json'));
+ return join(root, product.applicationName);
+ }
+ case 'win32': {
+ const product = require(join(root, 'resources', 'app', 'product.json'));
+ return join(root, `${product.nameShort}.exe`);
+ }
+ default:
+ throw new Error('Unsupported platform.');
+ }
+}
+
+export function getBuildVersion(root: string): string {
+ switch (process.platform) {
+ case 'darwin':
+ return require(join(root, 'Contents', 'Resources', 'app', 'package.json')).version;
+ default:
+ return require(join(root, 'resources', 'app', 'package.json')).version;
+ }
+}