mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-24 13:50:29 -04:00
Refresh master with initial release/0.24 snapshot (#332)
* Initial port of release/0.24 source code * Fix additional headers * Fix a typo in launch.json
This commit is contained in:
40
test/smoke/src/areas/workbench/data-loss.test.ts
Normal file
40
test/smoke/src/areas/workbench/data-loss.test.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { SpectronApplication } from '../../spectron/application';
|
||||
|
||||
describe('Dataloss', () => {
|
||||
before(function () {
|
||||
this.app.suiteName = 'Dataloss';
|
||||
});
|
||||
|
||||
it(`verifies that 'hot exit' works for dirty files`, async function () {
|
||||
const app = this.app as SpectronApplication;
|
||||
await app.workbench.newUntitledFile();
|
||||
|
||||
const untitled = 'Untitled-1';
|
||||
const textToTypeInUntitled = 'Hello, Unitled Code';
|
||||
await app.workbench.editor.waitForTypeInEditor(untitled, textToTypeInUntitled);
|
||||
await app.screenCapturer.capture('Untitled file before reload');
|
||||
|
||||
const readmeMd = 'readme.md';
|
||||
const textToType = 'Hello, Code';
|
||||
await app.workbench.explorer.openFile(readmeMd);
|
||||
await app.workbench.editor.waitForTypeInEditor(readmeMd, textToType);
|
||||
await app.screenCapturer.capture(`${readmeMd} before reload`);
|
||||
|
||||
await app.reload();
|
||||
await app.screenCapturer.capture('After reload');
|
||||
|
||||
await app.workbench.waitForActiveTab(readmeMd, true);
|
||||
await app.screenCapturer.capture(`${readmeMd} after reload`);
|
||||
await app.workbench.editor.waitForEditorContents(readmeMd, c => c.indexOf(textToType) > -1);
|
||||
|
||||
await app.workbench.waitForTab(untitled, true);
|
||||
await app.workbench.selectTab(untitled, true);
|
||||
await app.screenCapturer.capture('Untitled file after reload');
|
||||
await app.workbench.editor.waitForEditorContents(untitled, c => c.indexOf(textToTypeInUntitled) > -1);
|
||||
});
|
||||
});
|
||||
87
test/smoke/src/areas/workbench/data-migration.test.ts
Normal file
87
test/smoke/src/areas/workbench/data-migration.test.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
// import * as assert from 'assert';
|
||||
|
||||
// import { SpectronApplication, STABLE_PATH, LATEST_PATH } from '../../spectron/application';
|
||||
// import { Util } from '../../helpers/utilities';
|
||||
|
||||
// describe('Data Migration', () => {
|
||||
|
||||
// if (!STABLE_PATH) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
// let app: SpectronApplication;
|
||||
// afterEach(() => app.stop());
|
||||
|
||||
// it('checks if the Untitled file is restored migrating from stable to latest', async function () {
|
||||
// const textToType = 'Very dirty file';
|
||||
|
||||
// // Setting up stable version
|
||||
// let app = new SpectronApplication(STABLE_PATH);
|
||||
// await app.start('Data Migration');
|
||||
|
||||
// await app.workbench.newUntitledFile();
|
||||
// await app.workbench.editor.waitForTypeInEditor('Untitled-1', textToType);
|
||||
|
||||
// await app.stop();
|
||||
// await new Promise(c => setTimeout(c, 500)); // wait until all resources are released (e.g. locked local storage)
|
||||
// // Checking latest version for the restored state
|
||||
|
||||
// app = new SpectronApplication(LATEST_PATH);
|
||||
// await app.start('Data Migration');
|
||||
|
||||
// assert.ok(await app.workbench.waitForActiveTab('Untitled-1', true), `Untitled-1 tab is not present after migration.`);
|
||||
|
||||
// await app.workbench.editor.waitForEditorContents('Untitled-1', c => c.indexOf(textToType) > -1);
|
||||
// await app.screenCapturer.capture('Untitled file text');
|
||||
// });
|
||||
|
||||
// it('checks if the newly created dirty file is restored migrating from stable to latest', async function () {
|
||||
// const fileName = 'test_data/plainFile',
|
||||
// firstTextPart = 'This is going to be an unsaved file', secondTextPart = '_that is dirty.';
|
||||
|
||||
// // Setting up stable version
|
||||
// let app = new SpectronApplication(STABLE_PATH, fileName);
|
||||
// await Util.removeFile(`${fileName}`);
|
||||
// await app.start('Data Migration');
|
||||
|
||||
// await app.workbench.editor.waitForTypeInEditor('plainFile', firstTextPart);
|
||||
// await app.workbench.saveOpenedFile();
|
||||
// await app.workbench.editor.waitForTypeInEditor('plainFile', secondTextPart);
|
||||
|
||||
// await app.stop();
|
||||
// await new Promise(c => setTimeout(c, 1000)); // wait until all resources are released (e.g. locked local storage)
|
||||
|
||||
// // Checking latest version for the restored state
|
||||
// app = new SpectronApplication(LATEST_PATH);
|
||||
// await app.start('Data Migration');
|
||||
|
||||
// const filename = fileName.split('/')[1];
|
||||
// assert.ok(await app.workbench.waitForActiveTab(filename), `Untitled-1 tab is not present after migration.`);
|
||||
// await app.workbench.editor.waitForEditorContents(filename, c => c.indexOf(firstTextPart + secondTextPart) > -1);
|
||||
|
||||
// await Util.removeFile(`${fileName}`);
|
||||
// });
|
||||
|
||||
// it('cheks if opened tabs are restored migrating from stable to latest', async function () {
|
||||
// const fileName1 = 'app.js', fileName2 = 'jsconfig.json', fileName3 = 'readme.md';
|
||||
// let app = new SpectronApplication(STABLE_PATH);
|
||||
// await app.start('Data Migration');
|
||||
|
||||
// await app.workbench.quickopen.openFile(fileName1);
|
||||
// await app.workbench.quickopen.openFile(fileName2);
|
||||
// await app.workbench.quickopen.openFile(fileName3);
|
||||
// await app.stop();
|
||||
|
||||
// app = new SpectronApplication(LATEST_PATH);
|
||||
// await app.start('Data Migration');
|
||||
|
||||
// assert.ok(await app.workbench.waitForTab(fileName1), `${fileName1} tab was not restored after migration.`);
|
||||
// assert.ok(await app.workbench.waitForTab(fileName2), `${fileName2} tab was not restored after migration.`);
|
||||
// assert.ok(await app.workbench.waitForTab(fileName3), `${fileName3} tab was not restored after migration.`);
|
||||
// });
|
||||
// });
|
||||
54
test/smoke/src/areas/workbench/localization.test.ts
Normal file
54
test/smoke/src/areas/workbench/localization.test.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as assert from 'assert';
|
||||
|
||||
import { SpectronApplication, Quality } from '../../spectron/application';
|
||||
|
||||
describe('Localization', () => {
|
||||
before(async function () {
|
||||
const app = this.app as SpectronApplication;
|
||||
this.app.suiteName = 'Localization';
|
||||
|
||||
if (app.quality === Quality.Dev) {
|
||||
return;
|
||||
}
|
||||
|
||||
await app.restart(['--locale=DE']);
|
||||
});
|
||||
|
||||
it(`starts with 'DE' locale and verifies title and viewlets text is in German`, async function () {
|
||||
const app = this.app as SpectronApplication;
|
||||
|
||||
if (app.quality === Quality.Dev) {
|
||||
this.skip();
|
||||
return;
|
||||
}
|
||||
|
||||
let text = await app.workbench.explorer.getOpenEditorsViewTitle();
|
||||
await app.screenCapturer.capture('Open editors title');
|
||||
assert(/geöffnete editoren/i.test(text));
|
||||
|
||||
await app.workbench.search.openSearchViewlet();
|
||||
text = await app.workbench.search.getTitle();
|
||||
await app.screenCapturer.capture('Search title');
|
||||
assert(/suchen/i.test(text));
|
||||
|
||||
await app.workbench.scm.openSCMViewlet();
|
||||
text = await app.workbench.scm.getTitle();
|
||||
await app.screenCapturer.capture('Scm title');
|
||||
assert(/quellcodeverwaltung/i.test(text));
|
||||
|
||||
await app.workbench.debug.openDebugViewlet();
|
||||
text = await app.workbench.debug.getTitle();
|
||||
await app.screenCapturer.capture('Debug title');
|
||||
assert(/debuggen/i.test(text));
|
||||
|
||||
await app.workbench.extensions.openExtensionsViewlet();
|
||||
text = await app.workbench.extensions.getTitle();
|
||||
await app.screenCapturer.capture('Extensions title');
|
||||
assert(/erweiterungen/i.test(text));
|
||||
});
|
||||
});
|
||||
18
test/smoke/src/areas/workbench/viewlet.ts
Normal file
18
test/smoke/src/areas/workbench/viewlet.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { SpectronApplication } from '../../spectron/application';
|
||||
|
||||
export abstract class Viewlet {
|
||||
|
||||
constructor(protected spectron: SpectronApplication) {
|
||||
// noop
|
||||
}
|
||||
|
||||
public async getTitle(): Promise<string> {
|
||||
return this.spectron.client.waitForText('.monaco-workbench-container .part.sidebar > .title > .title-label > span');
|
||||
}
|
||||
|
||||
}
|
||||
86
test/smoke/src/areas/workbench/workbench.ts
Normal file
86
test/smoke/src/areas/workbench/workbench.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { SpectronApplication } from '../../spectron/application';
|
||||
import { Explorer } from '../explorer/explorer';
|
||||
import { ActivityBar } from '../activitybar/activityBar';
|
||||
import { QuickOpen } from '../quickopen/quickopen';
|
||||
import { Extensions } from '../extensions/extensions';
|
||||
import { Search } from '../search/search';
|
||||
import { Editor } from '../editor/editor';
|
||||
import { SCM } from '../git/scm';
|
||||
import { Debug } from '../debug/debug';
|
||||
import { StatusBar } from '../statusbar/statusbar';
|
||||
import { Problems } from '../problems/problems';
|
||||
import { SettingsEditor } from '../preferences/settings';
|
||||
import { KeybindingsEditor } from '../preferences/keybindings';
|
||||
import { Terminal } from '../terminal/terminal';
|
||||
|
||||
export class Workbench {
|
||||
|
||||
readonly explorer: Explorer;
|
||||
readonly activitybar: ActivityBar;
|
||||
readonly quickopen: QuickOpen;
|
||||
readonly search: Search;
|
||||
readonly extensions: Extensions;
|
||||
readonly editor: Editor;
|
||||
readonly scm: SCM;
|
||||
readonly debug: Debug;
|
||||
readonly statusbar: StatusBar;
|
||||
readonly problems: Problems;
|
||||
readonly settingsEditor: SettingsEditor;
|
||||
readonly keybindingsEditor: KeybindingsEditor;
|
||||
readonly terminal: Terminal;
|
||||
|
||||
constructor(private spectron: SpectronApplication) {
|
||||
this.explorer = new Explorer(spectron);
|
||||
this.activitybar = new ActivityBar(spectron);
|
||||
this.quickopen = new QuickOpen(spectron);
|
||||
this.search = new Search(spectron);
|
||||
this.extensions = new Extensions(spectron);
|
||||
this.editor = new Editor(spectron);
|
||||
this.scm = new SCM(spectron);
|
||||
this.debug = new Debug(spectron);
|
||||
this.statusbar = new StatusBar(spectron);
|
||||
this.problems = new Problems(spectron);
|
||||
this.settingsEditor = new SettingsEditor(spectron);
|
||||
this.keybindingsEditor = new KeybindingsEditor(spectron);
|
||||
this.terminal = new Terminal(spectron);
|
||||
}
|
||||
|
||||
public async saveOpenedFile(): Promise<any> {
|
||||
try {
|
||||
await this.spectron.client.waitForElement('.tabs-container div.tab.active.dirty');
|
||||
} catch (e) {
|
||||
// ignore if there is no dirty file
|
||||
return Promise.resolve();
|
||||
}
|
||||
await this.spectron.runCommand('workbench.action.files.save');
|
||||
return this.spectron.client.waitForElement('.tabs-container div.tab.active.dirty', element => !element);
|
||||
}
|
||||
|
||||
public async selectTab(tabName: string, untitled: boolean = false): Promise<void> {
|
||||
await this.spectron.client.waitAndClick(`.tabs-container div.tab[aria-label="${tabName}, tab"]`);
|
||||
await this.waitForEditorFocus(tabName, untitled);
|
||||
}
|
||||
|
||||
public async waitForEditorFocus(fileName: string, untitled: boolean = false): Promise<void> {
|
||||
await this.waitForActiveTab(fileName);
|
||||
await this.editor.waitForActiveEditor(fileName);
|
||||
}
|
||||
|
||||
public async waitForActiveTab(fileName: string, isDirty: boolean = false): Promise<any> {
|
||||
return this.spectron.client.waitForElement(`.tabs-container div.tab.active${isDirty ? '.dirty' : ''}[aria-selected="true"][aria-label="${fileName}, tab"]`);
|
||||
}
|
||||
|
||||
public async waitForTab(fileName: string, isDirty: boolean = false): Promise<boolean> {
|
||||
return this.spectron.client.waitForElement(`.tabs-container div.tab${isDirty ? '.dirty' : ''}[aria-label="${fileName}, tab"]`).then(() => true);
|
||||
}
|
||||
|
||||
public async newUntitledFile(): Promise<void> {
|
||||
await this.spectron.runCommand('workbench.action.files.newUntitledFile');
|
||||
await this.waitForEditorFocus('Untitled-1', true);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user