Skip to content

Commit ab1d1ad

Browse files
author
Benjamin Pasero
committed
Web: integration test failures in workspace events (fix microsoft#102365)
1 parent 5278689 commit ab1d1ad

3 files changed

Lines changed: 22 additions & 2 deletions

File tree

extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import * as assert from 'assert';
77
import * as vscode from 'vscode';
8-
import { createRandomFile, deleteFile, closeAllEditors, pathEquals, rndName, disposeAll, testFs, delay, withLogDisabled } from '../utils';
8+
import { createRandomFile, deleteFile, closeAllEditors, pathEquals, rndName, disposeAll, testFs, delay, withLogDisabled, revertAllDirty } from '../utils';
99
import { join, posix, basename } from 'path';
1010
import * as fs from 'fs';
1111
import { TestFS } from '../memfs';
@@ -288,7 +288,7 @@ suite('vscode API - workspace', () => {
288288
const file = await createRandomFile();
289289
let disposables: vscode.Disposable[] = [];
290290

291-
await vscode.workspace.saveAll();
291+
await revertAllDirty(); // needed for a clean state for `onDidSaveTextDocument` (#102365)
292292

293293
let pendingAsserts: Function[] = [];
294294
let onDidOpenTextDocument = false;
@@ -330,6 +330,8 @@ suite('vscode API - workspace', () => {
330330
let disposables: vscode.Disposable[] = [];
331331
let pendingAsserts: Function[] = [];
332332

333+
await revertAllDirty(); // needed for a clean state for `onDidSaveTextDocument` (#102365)
334+
333335
let onDidSaveTextDocument = false;
334336
disposables.push(vscode.workspace.onDidSaveTextDocument(e => {
335337
pendingAsserts.push(() => assertEqualPath(e.uri.fsPath, file.fsPath));

extensions/vscode-api-tests/src/utils.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ export function closeAllEditors(): Thenable<any> {
4848
return vscode.commands.executeCommand('workbench.action.closeAllEditors');
4949
}
5050

51+
export async function revertAllDirty(): Promise<void> {
52+
return vscode.commands.executeCommand('_workbench.revertAllDirty');
53+
}
54+
5155
export function disposeAll(disposables: vscode.Disposable[]) {
5256
vscode.Disposable.from(...disposables).dispose();
5357
}

src/vs/workbench/api/browser/mainThreadEditors.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editor
2727
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
2828
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
2929
import { openEditorWith } from 'vs/workbench/services/editor/common/editorOpenWith';
30+
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
31+
import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService';
3032

3133
export class MainThreadTextEditors implements MainThreadTextEditorsShape {
3234

@@ -331,3 +333,15 @@ CommandsRegistry.registerCommand('_workbench.diff', function (accessor: Services
331333

332334
return editorService.openEditor({ leftResource, rightResource, label, description, options }, viewColumnToEditorGroup(editorGroupService, position)).then(() => undefined);
333335
});
336+
337+
CommandsRegistry.registerCommand('_workbench.revertAllDirty', (accessor: ServicesAccessor) => {
338+
const environmentService = accessor.get(IEnvironmentService);
339+
if (!environmentService.extensionTestsLocationURI) {
340+
throw new Error('Command is only available when running extension tests.');
341+
}
342+
343+
const workingCopyService = accessor.get(IWorkingCopyService);
344+
for (const workingCopy of workingCopyService.dirtyWorkingCopies) {
345+
workingCopy.revert({ soft: true });
346+
}
347+
});

0 commit comments

Comments
 (0)