diff --git a/test/smoke/src/areas/preferences/preferences.test.ts b/test/smoke/src/areas/preferences/preferences.test.ts index f1eb589b118..c7a1ce51475 100644 --- a/test/smoke/src/areas/preferences/preferences.test.ts +++ b/test/smoke/src/areas/preferences/preferences.test.ts @@ -34,4 +34,4 @@ export function setup() { await app.workbench.settingsEditor.clearUserSettings(); }); }); -} \ No newline at end of file +} diff --git a/test/smoke/src/areas/preferences/settings.ts b/test/smoke/src/areas/preferences/settings.ts index cebd2f51497..de7bd1ffb43 100644 --- a/test/smoke/src/areas/preferences/settings.ts +++ b/test/smoke/src/areas/preferences/settings.ts @@ -30,7 +30,7 @@ export class SettingsEditor { async clearUserSettings(): Promise { const settingsPath = path.join(this.userDataPath, 'User', 'settings.json'); - await new Promise((c, e) => fs.writeFile(settingsPath, '{}', 'utf8', err => err ? e(err) : c())); + await new Promise((c, e) => fs.writeFile(settingsPath, '{\n}', 'utf8', err => err ? e(err) : c())); await this.openSettings(); await this.editor.waitForEditorContents('settings.json', c => c === '{}'); @@ -39,4 +39,4 @@ export class SettingsEditor { private async openSettings(): Promise { await this.quickopen.runCommand('Preferences: Open Settings (JSON)'); } -} \ No newline at end of file +} diff --git a/test/smoke/src/main.ts b/test/smoke/src/main.ts index 935b16fb46c..4972be890f1 100644 --- a/test/smoke/src/main.ts +++ b/test/smoke/src/main.ts @@ -141,7 +141,8 @@ if (typeof stablePath === 'string' && !fs.existsSync(stablePath)) { fail(`Can't find Stable Code at ${stablePath}.`); } -const userDataDir = path.join(testDataPath, 'd'); +// TODO: Server should be launched from smoke tests +const userDataDir = opts.web ? path.join(process.env.HOME!, '.vscode-remote/data') : path.join(testDataPath, 'd'); let quality: Quality; if (process.env.VSCODE_DEV === '1') { @@ -245,6 +246,11 @@ describe('Running Code', () => { const app = new Application(this.defaultOptions); await app!.start(opts.web ? false : undefined); this.app = app; + + // TODO: User data dir is not cleared for web yet + if (opts.web) { + await app.workbench.settingsEditor.clearUserSettings(); + } }); after(async function () { @@ -273,7 +279,8 @@ describe('Running Code', () => { } if (opts.web) { - console.log('setup term tests only'); + setupDataExplorerTests(); + setupDataPreferencesTests(); setupTerminalTests(); return; } diff --git a/test/smoke/src/vscode/puppeteer-driver.ts b/test/smoke/src/vscode/puppeteer-driver.ts index 12b56ebd202..fbe7b26db47 100644 --- a/test/smoke/src/vscode/puppeteer-driver.ts +++ b/test/smoke/src/vscode/puppeteer-driver.ts @@ -11,7 +11,13 @@ const height = 800; const vscodeToPuppeteerKey = { cmd: 'Meta', ctrl: 'Control', - enter: 'Enter' + enter: 'Enter', + escape: 'Escape', + right: 'ArrowRight', + up: 'ArrowUp', + down: 'ArrowDown', + left: 'ArrowLeft', + home: 'Home' }; function buildDriver(browser: puppeteer.Browser, page: puppeteer.Page): IDriver { @@ -24,18 +30,26 @@ function buildDriver(browser: puppeteer.Browser, page: puppeteer.Page): IDriver reloadWindow: (windowId) => Promise.resolve(), exitApplication: () => browser.close(), dispatchKeybinding: async (windowId, keybinding) => { - const keys = keybinding.split('+'); - const keysDown: string[] = []; - for (let i = 0; i < keys.length; i++) { - if (keys[i] in vscodeToPuppeteerKey) { - keys[i] = vscodeToPuppeteerKey[keys[i]]; + const chords = keybinding.split(' '); + chords.forEach(async (chord, index) => { + if (index > 0) { + await timeout(100); } - await page.keyboard.down(keys[i]); - keysDown.push(keys[i]); - } - while (keysDown.length > 0) { - await page.keyboard.up(keysDown.pop()!); - } + const keys = chord.split('+'); + const keysDown: string[] = []; + for (let i = 0; i < keys.length; i++) { + if (keys[i] in vscodeToPuppeteerKey) { + keys[i] = vscodeToPuppeteerKey[keys[i]]; + } + await page.keyboard.down(keys[i]); + keysDown.push(keys[i]); + } + while (keysDown.length > 0) { + await page.keyboard.up(keysDown.pop()!); + } + }); + + await timeout(100); }, click: async (windowId, selector, xoffset, yoffset) => { const { x, y } = await page.evaluate(`