Skip to content

Commit

Permalink
Speed up shell integration tests and improve reliability
Browse files Browse the repository at this point in the history
  • Loading branch information
Tyriar committed Jun 16, 2022
1 parent 18408b9 commit 87a99db
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 17 deletions.
20 changes: 20 additions & 0 deletions test/automation/src/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ export class SettingsEditor {

constructor(private code: Code, private editors: Editors, private editor: Editor, private quickaccess: QuickAccess) { }

/**
* Write a single setting key value pair.
*
* Warning: You may need to set `editor.wordWrap` to `"on"` if this is called with a really long
* setting.
*/
async addUserSetting(setting: string, value: string): Promise<void> {
await this.openUserSettingsFile();

Expand All @@ -20,6 +26,20 @@ export class SettingsEditor {
await this.editors.saveOpenedFile();
}

/**
* Write several settings faster than multiple calls to {@link addUserSetting}.
*
* Warning: You will likely also need to set `editor.wordWrap` to `"on"` if `addUserSetting` is
* called after this in the test.
*/
async addUserSettings(settings: [key: string, value: string][]): Promise<void> {
await this.openUserSettingsFile();

await this.code.dispatchKeybinding('right');
await this.editor.waitForTypeInEditor('settings.json', settings.map(v => `"${v[0]}": ${v[1]},`).join(''));
await this.editors.saveOpenedFile();
}

async clearUserSettings(): Promise<void> {
await this.openUserSettingsFile();
await this.quickaccess.runCommand('editor.action.selectAll');
Expand Down
12 changes: 10 additions & 2 deletions test/automation/src/terminal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,16 @@ export class Terminal {
await this.code.dispatchKeybinding('enter');
await this.quickinput.waitForQuickInputClosed();
}
if (commandId === TerminalCommandId.Show || commandId === TerminalCommandId.CreateNewEditor || commandId === TerminalCommandId.CreateNew || commandId === TerminalCommandId.NewWithProfile) {
return await this._waitForTerminal(expectedLocation === 'editor' || commandId === TerminalCommandId.CreateNewEditor ? 'editor' : 'panel');
switch (commandId) {
case TerminalCommandId.Show:
case TerminalCommandId.CreateNewEditor:
case TerminalCommandId.CreateNew:
case TerminalCommandId.NewWithProfile:
await this._waitForTerminal(expectedLocation === 'editor' || commandId === TerminalCommandId.CreateNewEditor ? 'editor' : 'panel');
break;
case TerminalCommandId.KillAll:
await this.code.waitForElements(Selector.Xterm, true, e => e.length === 0);
break;
}
}

Expand Down
18 changes: 12 additions & 6 deletions test/smoke/src/areas/terminal/terminal-helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,18 @@

import { Application } from '../../../../automation';

export async function setTerminalTestSettings(app: Application) {
// Always show tabs to make getting terminal groups easier
await app.workbench.settingsEditor.addUserSetting('terminal.integrated.tabs.hideCondition', '"never"');
// Use the DOM renderer for smoke tests so they can be inspected in the playwright trace
// viewer
await app.workbench.settingsEditor.addUserSetting('terminal.integrated.gpuAcceleration', '"off"');
export async function setTerminalTestSettings(app: Application, additionalSettings: [key: string, value: string][] = []) {
await app.workbench.settingsEditor.addUserSettings([
// Work wrap is required when calling settingsEditor.addUserSetting multiple times or the
// click to focus will fail
['editor.wordWrap', '"on"'],
// Always show tabs to make getting terminal groups easier
['terminal.integrated.tabs.hideCondition', '"never"'],
// Use the DOM renderer for smoke tests so they can be inspected in the playwright trace
// viewer
['terminal.integrated.gpuAcceleration', '"off"'],
...additionalSettings
]);

// Close the settings editor
await app.workbench.quickaccess.runCommand('workbench.action.closeAllEditors');
Expand Down
19 changes: 10 additions & 9 deletions test/smoke/src/areas/terminal/terminal-shellIntegration.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,25 @@ export function setup() {
app = this.app as Application;
terminal = app.workbench.terminal;
settingsEditor = app.workbench.settingsEditor;
await settingsEditor.addUserSetting('terminal.integrated.shellIntegration.enabled', 'true');
await setTerminalTestSettings(app);
});

after(async function () {
await settingsEditor.clearUserSettings();
await setTerminalTestSettings(app, [['terminal.integrated.shellIntegration.enabled', 'true']]);
});

afterEach(async function () {
await app.workbench.terminal.runCommand(TerminalCommandId.KillAll);
});

after(async function () {
await settingsEditor.clearUserSettings();
});

async function createShellIntegrationProfile() {
await terminal.runCommandWithValue(TerminalCommandIdWithValue.NewWithProfile, process.platform === 'win32' ? 'PowerShell' : 'bash');
}

describe(`Shell integration ${i}`, function () {
describe('Decorations', function () {
describe('Should show default icons', function () {

it('Placeholder', async () => {
await createShellIntegrationProfile();
await terminal.assertCommandDecorations({ placeholder: 1, success: 0, error: 0 });
Expand All @@ -47,20 +47,21 @@ export function setup() {
});
it('Error', async () => {
await createShellIntegrationProfile();
await terminal.runCommandInTerminal(`fsdkfsjdlfksjdkf`);
await terminal.runCommandInTerminal(`false`);
await terminal.assertCommandDecorations({ placeholder: 1, success: 0, error: 1 });
});
});
describe('Custom configuration', function () {
it('Should update and show custom icons', async () => {
await createShellIntegrationProfile();
await terminal.assertCommandDecorations({ placeholder: 1, success: 0, error: 0 });
await terminal.runCommandInTerminal(`echo "success"`);
await terminal.runCommandInTerminal(`fsdkfsjdlfksjdkf`);
await terminal.runCommandInTerminal(`echo "foo"`);
await terminal.runCommandInTerminal(`bar`);
await settingsEditor.addUserSetting('terminal.integrated.shellIntegration.decorationIcon', '"zap"');
await settingsEditor.addUserSetting('terminal.integrated.shellIntegration.decorationIconSuccess', '"zap"');
await settingsEditor.addUserSetting('terminal.integrated.shellIntegration.decorationIconError', '"zap"');
await terminal.assertCommandDecorations(undefined, { updatedIcon: "zap", count: 3 });
await app.workbench.terminal.runCommand(TerminalCommandId.KillAll);
});
});
});
Expand Down

0 comments on commit 87a99db

Please sign in to comment.