diff --git a/test/smoke/src/areas/extensions/extensions.test.ts b/test/smoke/src/areas/extensions/extensions.test.ts index 9bf6dd79b07..de5b4fa91c6 100644 --- a/test/smoke/src/areas/extensions/extensions.test.ts +++ b/test/smoke/src/areas/extensions/extensions.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { Application, Logger } from '../../../../automation'; -import { installAllHandlers } from '../../utils'; +import { installAllHandlers, retryWithRestart } from '../../utils'; export function setup(logger: Logger) { describe('Extensions', () => { @@ -13,18 +13,19 @@ export function setup(logger: Logger) { installAllHandlers(logger); it('install and enable vscode-smoketest-check extension', async function () { - this.retries(3); // https://github.com/microsoft/vscode/issues/146800 + this.timeout(2 * 60 * 1000); // https://github.com/microsoft/vscode/issues/146800 const app = this.app as Application; + await retryWithRestart(app, async () => { + await app.workbench.extensions.openExtensionsViewlet(); + await app.workbench.extensions.installExtension('ms-vscode.vscode-smoketest-check', true); - await app.workbench.extensions.openExtensionsViewlet(); - await app.workbench.extensions.installExtension('ms-vscode.vscode-smoketest-check', true); + // Close extension editor because keybindings dispatch is not working when web views are opened and focused + // https://github.com/microsoft/vscode/issues/110276 + await app.workbench.extensions.closeExtension('vscode-smoketest-check'); - // Close extension editor because keybindings dispatch is not working when web views are opened and focused - // https://github.com/microsoft/vscode/issues/110276 - await app.workbench.extensions.closeExtension('vscode-smoketest-check'); - - await app.workbench.quickaccess.runCommand('Smoke Test Check'); + await app.workbench.quickaccess.runCommand('Smoke Test Check'); + }); }); }); } diff --git a/test/smoke/src/areas/workbench/localization.test.ts b/test/smoke/src/areas/workbench/localization.test.ts index 61b354a22f3..2b8704b72ff 100644 --- a/test/smoke/src/areas/workbench/localization.test.ts +++ b/test/smoke/src/areas/workbench/localization.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { Logger, Application } from '../../../../automation'; -import { installAllHandlers } from '../../utils'; +import { installAllHandlers, retryWithRestart } from '../../utils'; export function setup(logger: Logger) { @@ -14,27 +14,30 @@ export function setup(logger: Logger) { installAllHandlers(logger); it('starts with "DE" locale and verifies title and viewlets text is in German', async function () { - this.retries(3); // https://github.com/microsoft/vscode/issues/146800 + this.timeout(2 * 60 * 1000); // https://github.com/microsoft/vscode/issues/146800 const app = this.app as Application; - await app.workbench.extensions.openExtensionsViewlet(); - await app.workbench.extensions.installExtension('ms-ceintl.vscode-language-pack-de', false); - await app.restart({ extraArgs: ['--locale=DE'] }); - const result = await app.workbench.localization.getLocalizedStrings(); - const localeInfo = await app.workbench.localization.getLocaleInfo(); + await retryWithRestart(app, async () => { + await app.workbench.extensions.openExtensionsViewlet(); + await app.workbench.extensions.installExtension('ms-ceintl.vscode-language-pack-de', false); + await app.restart({ extraArgs: ['--locale=DE'] }); - if (localeInfo.locale === undefined || localeInfo.locale.toLowerCase() !== 'de') { - throw new Error(`The requested locale for VS Code was not German. The received value is: ${localeInfo.locale === undefined ? 'not set' : localeInfo.locale}`); - } + const result = await app.workbench.localization.getLocalizedStrings(); + const localeInfo = await app.workbench.localization.getLocaleInfo(); - if (localeInfo.language.toLowerCase() !== 'de') { - throw new Error(`The UI language is not German. It is ${localeInfo.language}`); - } + if (localeInfo.locale === undefined || localeInfo.locale.toLowerCase() !== 'de') { + throw new Error(`The requested locale for VS Code was not German. The received value is: ${localeInfo.locale === undefined ? 'not set' : localeInfo.locale}`); + } - if (result.open.toLowerCase() !== 'öffnen' || result.close.toLowerCase() !== 'schließen' || result.find.toLowerCase() !== 'finden') { - throw new Error(`Received wrong German localized strings: ${JSON.stringify(result, undefined, 0)}`); - } + if (localeInfo.language.toLowerCase() !== 'de') { + throw new Error(`The UI language is not German. It is ${localeInfo.language}`); + } + + if (result.open.toLowerCase() !== 'öffnen' || result.close.toLowerCase() !== 'schließen' || result.find.toLowerCase() !== 'finden') { + throw new Error(`Received wrong German localized strings: ${JSON.stringify(result, undefined, 0)}`); + } + }); }); }); } diff --git a/test/smoke/src/utils.ts b/test/smoke/src/utils.ts index 1272924181b..bfcbd5f9e18 100644 --- a/test/smoke/src/utils.ts +++ b/test/smoke/src/utils.ts @@ -149,6 +149,21 @@ export function timeout(i: number) { }); } +export async function retryWithRestart(app: Application, testFn: () => Promise, retries = 3, timeoutMs = 20000): Promise { + for (let i = 0; i < retries; i++) { + const result = await Promise.race([ + testFn().then(() => true, error => { throw error; }), + timeout(timeoutMs).then(() => false) + ]); + + if (result) { + return; + } + + await app.restart(); + } +} + export interface ITask { (): T; }