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:
Benjamin Pasero
2022-04-04 10:13:08 +02:00
committed by GitHub
parent 0bc095362e
commit 2ada17080c
34 changed files with 593 additions and 479 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -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); }