diff --git a/grid.html b/grid.html new file mode 100644 index 0000000000000..3930d978bd77e --- /dev/null +++ b/grid.html @@ -0,0 +1,202 @@ + + + + + + + Grid Example + + + + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html index 785f4e3abc0cc..384c987fed1cf 100644 --- a/index.html +++ b/index.html @@ -7,8 +7,6 @@
- diff --git a/smoke/src/application.ts b/smoke/src/application.ts index 59f2e6a13c0e2..4894252466c45 100644 --- a/smoke/src/application.ts +++ b/smoke/src/application.ts @@ -63,7 +63,7 @@ export class Application { async start(): Promise { await this._start(); await this.code.waitForElement('.explorer-folders-view'); - await this.code.waitForActiveElement(`.editor-container[id="workbench.editor.walkThroughPart"] > div > div[tabIndex="0"]`); + await this.code.waitForActiveElement(`.editor-instance[id="workbench.editor.walkThroughPart"] > div > div[tabIndex="0"]`); } async restart(options: { workspaceOrFolder?: string, extraArgs?: string[] }): Promise { diff --git a/smoke/src/areas/editor/editor.test.ts b/smoke/src/areas/editor/editor.test.ts index af9f49cf4c696..bc851c5b0d28d 100644 --- a/smoke/src/areas/editor/editor.test.ts +++ b/smoke/src/areas/editor/editor.test.ts @@ -53,18 +53,18 @@ export function setup() { const app = this.app as Application; await app.workbench.quickopen.openFile('app.js'); - await app.workbench.editor.gotoDefinition('app.js', 'express', 11); + await app.workbench.editor.gotoDefinition('app.js', 'app', 14); - await app.workbench.editors.waitForActiveTab('index.d.ts'); + await app.workbench.editor.waitForHighlightingLine('app.js', 11); }); it(`verifies that 'Peek Definition' works`, async function () { const app = this.app as Application; await app.workbench.quickopen.openFile('app.js'); - const peek = await app.workbench.editor.peekDefinition('app.js', 'express', 11); + const peek = await app.workbench.editor.peekDefinition('app.js', 'app', 14); - await peek.waitForFile('index.d.ts'); + await peek.waitForFile('app.js'); }); }); } \ No newline at end of file diff --git a/smoke/src/areas/editor/editors.ts b/smoke/src/areas/editor/editors.ts index 5ac99c68e8cda..50f244e8ed845 100644 --- a/smoke/src/areas/editor/editors.ts +++ b/smoke/src/areas/editor/editors.ts @@ -23,7 +23,7 @@ export class Editors { } async waitForActiveEditor(filename: string): Promise { - const selector = `.editor-container .monaco-editor[data-uri$="${filename}"] textarea`; + const selector = `.editor-instance .monaco-editor[data-uri$="${filename}"] textarea`; return this.code.waitForActiveElement(selector); } diff --git a/smoke/src/areas/preferences/settings.ts b/smoke/src/areas/preferences/settings.ts index 6ac7bffece992..ecdef71c03360 100644 --- a/smoke/src/areas/preferences/settings.ts +++ b/smoke/src/areas/preferences/settings.ts @@ -8,6 +8,7 @@ import * as path from 'path'; import { Editor } from '../editor/editor'; import { Editors } from '../editor/editors'; import { Code } from '../../vscode/code'; +import { QuickOpen } from '../quickopen/quickopen'; export enum ActivityBarPosition { LEFT = 0, @@ -18,7 +19,7 @@ const SEARCH_INPUT = '.settings-search-input input'; export class SettingsEditor { - constructor(private code: Code, private userDataPath: string, private editors: Editors, private editor: Editor) { } + constructor(private code: Code, private userDataPath: string, private editors: Editors, private editor: Editor, private quickopen: QuickOpen) { } async addUserSetting(setting: string, value: string): Promise { await this.openSettings(); @@ -41,10 +42,6 @@ export class SettingsEditor { } private async openSettings(): Promise { - if (process.platform === 'darwin') { - await this.code.dispatchKeybinding('cmd+,'); - } else { - await this.code.dispatchKeybinding('ctrl+,'); - } + await this.quickopen.runCommand('Preferences: Open User Settings'); } } \ No newline at end of file diff --git a/smoke/src/areas/search/search.test.ts b/smoke/src/areas/search/search.test.ts index 484e428e7b1f3..3f6b713daf33f 100644 --- a/smoke/src/areas/search/search.test.ts +++ b/smoke/src/areas/search/search.test.ts @@ -3,16 +3,23 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import * as cp from 'child_process'; import { Application } from '../../application'; export function setup() { describe('Search', () => { + after(function () { + const app = this.app as Application; + cp.execSync('git checkout .', { cwd: app.workspacePath }); + cp.execSync('git reset --hard origin/master', { cwd: app.workspacePath }); + }); + it('searches for body & checks for correct result number', async function () { const app = this.app as Application; await app.workbench.search.openSearchViewlet(); await app.workbench.search.searchFor('body'); - await app.workbench.search.waitForResultText('14 results in 5 files'); + await app.workbench.search.waitForResultText('21 results in 6 files'); }); it('searches only for *.js files & checks for correct result number', async function () { @@ -31,7 +38,7 @@ export function setup() { const app = this.app as Application; await app.workbench.search.searchFor('body'); await app.workbench.search.removeFileMatch(1); - await app.workbench.search.waitForResultText('10 results in 4 files'); + await app.workbench.search.waitForResultText('17 results in 5 files'); }); it('replaces first search result with a replace term', async function () { @@ -42,7 +49,7 @@ export function setup() { await app.workbench.search.setReplaceText('ydob'); await app.workbench.search.replaceFileMatch(1); - await app.workbench.search.waitForResultText('10 results in 4 files'); + await app.workbench.search.waitForResultText('17 results in 5 files'); await app.workbench.search.searchFor('ydob'); await app.workbench.search.setReplaceText('body'); diff --git a/smoke/src/areas/search/search.ts b/smoke/src/areas/search/search.ts index b1ce30d30b499..f5cda6b2af1cf 100644 --- a/smoke/src/areas/search/search.ts +++ b/smoke/src/areas/search/search.ts @@ -63,6 +63,10 @@ export class Search extends Viewlet { await this.code.waitAndClick(`${VIEWLET} .search-widget .monaco-button.toggle-replace-button.collapse`); } + async collapseReplace(): Promise { + await this.code.waitAndClick(`${VIEWLET} .search-widget .monaco-button.toggle-replace-button.expand`); + } + async setReplaceText(text: string): Promise { await this.code.waitAndClick(`${VIEWLET} .search-widget .replace-container .monaco-inputbox input[title="Replace"]`); await this.code.waitForElement(`${VIEWLET} .search-widget .replace-container .monaco-inputbox.synthetic-focus input[title="Replace"]`); diff --git a/smoke/src/areas/workbench/workbench.ts b/smoke/src/areas/workbench/workbench.ts index 661e0699a4da9..005265f912cec 100644 --- a/smoke/src/areas/workbench/workbench.ts +++ b/smoke/src/areas/workbench/workbench.ts @@ -55,7 +55,7 @@ export class Workbench { this.debug = new Debug(code, this.quickopen, this.editors, this.editor); this.statusbar = new StatusBar(code); this.problems = new Problems(code); - this.settingsEditor = new SettingsEditor(code, userDataPath, this.editors, this.editor); + this.settingsEditor = new SettingsEditor(code, userDataPath, this.editors, this.editor, this.quickopen); this.keybindingsEditor = new KeybindingsEditor(code); this.terminal = new Terminal(code); } diff --git a/smoke/src/main.ts b/smoke/src/main.ts index 9d2262a1dc785..69caa041d4138 100644 --- a/smoke/src/main.ts +++ b/smoke/src/main.ts @@ -188,8 +188,8 @@ async function setupRepository(): Promise { cp.spawnSync('git', ['clean', '-xdf'], { cwd: workspacePath }); } - console.log('*** Running npm install...'); - cp.execSync('npm install', { cwd: workspacePath, stdio: 'inherit' }); + console.log('*** Running yarn...'); + cp.execSync('yarn', { cwd: workspacePath, stdio: 'inherit' }); } } diff --git a/smoke/src/utils.ts b/smoke/src/utils.ts new file mode 100644 index 0000000000000..35d9ef41ad905 --- /dev/null +++ b/smoke/src/utils.ts @@ -0,0 +1,18 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { ISuiteCallbackContext, ITestCallbackContext } from 'mocha'; + +export function describeRepeat(n: number, description: string, callback: (this: ISuiteCallbackContext) => void): void { + for (let i = 0; i < n; i++) { + describe(`${description} (iteration ${i})`, callback); + } +} + +export function itRepeat(n: number, description: string, callback: (this: ITestCallbackContext, done: MochaDone) => any): void { + for (let i = 0; i < n; i++) { + it(`${description} (iteration ${i})`, callback); + } +}