mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-02 14:31:31 +01:00
Use playwright for desktop smoke tests (#146692)
* Use `playwright` for desktop smoke tests * fix distro issues * tests - enable prefs tests for web
This commit is contained in:
@@ -7,7 +7,7 @@ import { join } from 'path';
|
||||
import { Application, Quality, StatusBarElement, Logger } from '../../../../automation';
|
||||
import { installAllHandlers } from '../../utils';
|
||||
|
||||
export function setup(isWeb: boolean, logger: Logger) {
|
||||
export function setup(logger: Logger) {
|
||||
describe('Statusbar', () => {
|
||||
|
||||
// Shared before/after handling
|
||||
|
||||
@@ -118,7 +118,7 @@ export function setup(ensureStableCode: () => string | undefined, logger: Logger
|
||||
}
|
||||
});
|
||||
|
||||
describe('Data Loss (stable -> insiders)', () => {
|
||||
describe.skip('Data Loss (stable -> insiders)', () => { //TODO@bpasero enable again once we shipped 1.67.x
|
||||
|
||||
let insidersApp: Application | undefined = undefined;
|
||||
let stableApp: Application | undefined = undefined;
|
||||
|
||||
@@ -13,7 +13,7 @@ import * as rimraf from 'rimraf';
|
||||
import * as mkdirp from 'mkdirp';
|
||||
import * as vscodetest from '@vscode/test-electron';
|
||||
import fetch from 'node-fetch';
|
||||
import { Quality, MultiLogger, Logger, ConsoleLogger, FileLogger, measureAndLog } from '../../automation';
|
||||
import { Quality, MultiLogger, Logger, ConsoleLogger, FileLogger, measureAndLog, getDevElectronPath, getBuildElectronPath, getBuildVersion } from '../../automation';
|
||||
import { retry, timeout } from './utils';
|
||||
|
||||
import { setup as setupDataLossTests } from './areas/workbench/data-loss.test';
|
||||
@@ -28,7 +28,7 @@ import { setup as setupLocalizationTests } from './areas/workbench/localization.
|
||||
import { setup as setupLaunchTests } from './areas/workbench/launch.test';
|
||||
import { setup as setupTerminalTests } from './areas/terminal/terminal.test';
|
||||
|
||||
const repoPath = path.join(__dirname, '..', '..', '..');
|
||||
const rootPath = path.join(__dirname, '..', '..', '..');
|
||||
|
||||
const [, , ...args] = process.argv;
|
||||
const opts = minimist(args, {
|
||||
@@ -44,7 +44,9 @@ const opts = minimist(args, {
|
||||
'verbose',
|
||||
'remote',
|
||||
'web',
|
||||
'headless'
|
||||
'headless',
|
||||
'legacy',
|
||||
'tracing'
|
||||
],
|
||||
default: {
|
||||
verbose: false
|
||||
@@ -54,12 +56,29 @@ const opts = minimist(args, {
|
||||
remote?: boolean;
|
||||
headless?: boolean;
|
||||
web?: boolean;
|
||||
legacy?: boolean;
|
||||
tracing?: boolean;
|
||||
build?: string;
|
||||
'stable-build'?: string;
|
||||
browser?: string;
|
||||
electronArgs?: string;
|
||||
};
|
||||
|
||||
const logsPath = (() => {
|
||||
const logsParentPath = path.join(rootPath, '.build', 'logs');
|
||||
|
||||
let logsName: string;
|
||||
if (opts.web) {
|
||||
logsName = 'smoke-tests-browser';
|
||||
} else if (opts.remote) {
|
||||
logsName = opts.legacy ? 'smoke-tests-remote-legacy' : 'smoke-tests-remote';
|
||||
} else {
|
||||
logsName = opts.legacy ? 'smoke-tests-electron-legacy' : 'smoke-tests-electron';
|
||||
}
|
||||
|
||||
return path.join(logsParentPath, logsName);
|
||||
})();
|
||||
|
||||
const logger = createLogger();
|
||||
|
||||
function createLogger(): Logger {
|
||||
@@ -70,10 +89,12 @@ function createLogger(): Logger {
|
||||
loggers.push(new ConsoleLogger());
|
||||
}
|
||||
|
||||
// Prepare logs path
|
||||
fs.rmSync(logsPath, { recursive: true, force: true, maxRetries: 3 });
|
||||
mkdirp.sync(logsPath);
|
||||
|
||||
// Always log to log file
|
||||
const logPath = path.join(repoPath, '.build', 'logs', opts.web ? 'smoke-tests-browser' : opts.remote ? 'smoke-tests-remote' : 'smoke-tests');
|
||||
mkdirp.sync(logPath);
|
||||
loggers.push(new FileLogger(path.join(logPath, 'smoke-test-runner.log')));
|
||||
loggers.push(new FileLogger(path.join(logsPath, 'smoke-test-runner.log')));
|
||||
|
||||
return new MultiLogger(loggers);
|
||||
}
|
||||
@@ -122,49 +143,6 @@ function parseVersion(version: string): { major: number; minor: number; patch: n
|
||||
// #### Electron Smoke Tests ####
|
||||
//
|
||||
if (!opts.web) {
|
||||
|
||||
function getDevElectronPath(): string {
|
||||
const buildPath = path.join(repoPath, '.build');
|
||||
const product = require(path.join(repoPath, 'product.json'));
|
||||
|
||||
switch (process.platform) {
|
||||
case 'darwin':
|
||||
return path.join(buildPath, 'electron', `${product.nameLong}.app`, 'Contents', 'MacOS', 'Electron');
|
||||
case 'linux':
|
||||
return path.join(buildPath, 'electron', `${product.applicationName}`);
|
||||
case 'win32':
|
||||
return path.join(buildPath, 'electron', `${product.nameShort}.exe`);
|
||||
default:
|
||||
throw new Error('Unsupported platform.');
|
||||
}
|
||||
}
|
||||
|
||||
function getBuildElectronPath(root: string): string {
|
||||
switch (process.platform) {
|
||||
case 'darwin':
|
||||
return path.join(root, 'Contents', 'MacOS', 'Electron');
|
||||
case 'linux': {
|
||||
const product = require(path.join(root, 'resources', 'app', 'product.json'));
|
||||
return path.join(root, product.applicationName);
|
||||
}
|
||||
case 'win32': {
|
||||
const product = require(path.join(root, 'resources', 'app', 'product.json'));
|
||||
return path.join(root, `${product.nameShort}.exe`);
|
||||
}
|
||||
default:
|
||||
throw new Error('Unsupported platform.');
|
||||
}
|
||||
}
|
||||
|
||||
function getBuildVersion(root: string): string {
|
||||
switch (process.platform) {
|
||||
case 'darwin':
|
||||
return require(path.join(root, 'Contents', 'Resources', 'app', 'package.json')).version;
|
||||
default:
|
||||
return require(path.join(root, 'resources', 'app', 'package.json')).version;
|
||||
}
|
||||
}
|
||||
|
||||
let testCodePath = opts.build;
|
||||
let electronPath: string;
|
||||
|
||||
@@ -174,7 +152,7 @@ if (!opts.web) {
|
||||
} else {
|
||||
testCodePath = getDevElectronPath();
|
||||
electronPath = testCodePath;
|
||||
process.env.VSCODE_REPOSITORY = repoPath;
|
||||
process.env.VSCODE_REPOSITORY = rootPath;
|
||||
process.env.VSCODE_DEV = '1';
|
||||
process.env.VSCODE_CLI = '1';
|
||||
}
|
||||
@@ -213,7 +191,7 @@ else {
|
||||
}
|
||||
|
||||
if (!testCodeServerPath) {
|
||||
process.env.VSCODE_REPOSITORY = repoPath;
|
||||
process.env.VSCODE_REPOSITORY = rootPath;
|
||||
process.env.VSCODE_DEV = '1';
|
||||
process.env.VSCODE_CLI = '1';
|
||||
|
||||
@@ -355,9 +333,12 @@ before(async function () {
|
||||
extensionsPath,
|
||||
waitTime: parseInt(opts['wait-time'] || '0') || 20,
|
||||
logger,
|
||||
logsPath,
|
||||
verbose: opts.verbose,
|
||||
remote: opts.remote,
|
||||
web: opts.web,
|
||||
legacy: opts.legacy,
|
||||
tracing: opts.tracing,
|
||||
headless: opts.headless,
|
||||
browser: opts.browser,
|
||||
extraArgs: (opts.electronArgs || '').split(' ').map(a => a.trim()).filter(a => !!a)
|
||||
@@ -390,14 +371,14 @@ after(async function () {
|
||||
}
|
||||
});
|
||||
|
||||
describe(`VSCode Smoke Tests (${opts.web ? 'Web' : 'Electron'})`, () => {
|
||||
describe(`VSCode Smoke Tests (${opts.web ? 'Web' : opts.legacy ? 'Electron (legacy)' : 'Electron'})`, () => {
|
||||
if (!opts.web) { setupDataLossTests(() => opts['stable-build'] /* Do not change, deferred for a reason! */, logger); }
|
||||
if (!opts.web) { setupPreferencesTests(logger); }
|
||||
setupPreferencesTests(logger);
|
||||
setupSearchTests(logger);
|
||||
setupNotebookTests(logger);
|
||||
setupLanguagesTests(logger);
|
||||
if (opts.web) { setupTerminalTests(logger); } // TODO@daniel TODO@meggan: Enable terminal tests for non-web when the desktop driver is moved to playwright
|
||||
setupStatusbarTests(!!opts.web, logger);
|
||||
setupTerminalTests(logger);
|
||||
setupStatusbarTests(logger);
|
||||
if (quality !== Quality.Dev) { setupExtensionTests(logger); }
|
||||
if (!opts.web) { setupMultirootTests(logger); }
|
||||
if (!opts.web && !opts.remote && quality !== Quality.Dev) { setupLocalizationTests(logger); }
|
||||
|
||||
Reference in New Issue
Block a user