workbenchTestServices.ts 56.1 KB
Newer Older
E
Erich Gamma 已提交
1 2 3 4 5
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

6
import 'vs/workbench/contrib/files/browser/files.contribution'; // load our contribution into the test
7
import { FileEditorInput } from 'vs/workbench/contrib/files/common/editors/fileEditorInput';
8
import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
9
import { join } from 'vs/base/common/path';
10
import * as resources from 'vs/base/common/resources';
11
import { URI } from 'vs/base/common/uri';
12 13
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
14
import { IEditorInputWithOptions, CloseDirection, IEditorIdentifier, IUntitledTextResourceInput, IResourceDiffInput, IResourceSideBySideInput, IEditorInput, IEditor, IEditorCloseEvent, IEditorPartOptions, IRevertOptions, GroupIdentifier, EditorInput, EditorOptions } from 'vs/workbench/common/editor';
15
import { IEditorOpeningEvent, EditorServiceImpl, IEditorGroupView, IEditorGroupsAccessor } from 'vs/workbench/browser/parts/editor/editor';
M
Matt Bierner 已提交
16
import { Event, Emitter } from 'vs/base/common/event';
E
Erich Gamma 已提交
17
import Severity from 'vs/base/common/severity';
18
import { IBackupFileService, IResolvedBackup } from 'vs/workbench/services/backup/common/backup';
19
import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration';
B
Benjamin Pasero 已提交
20
import { IWorkbenchLayoutService, Parts, Position as PartPosition } from 'vs/workbench/services/layout/browser/layoutService';
21
import { TextModelResolverService } from 'vs/workbench/services/textmodelResolver/common/textModelResolverService';
22
import { ITextModelService } from 'vs/editor/common/services/resolverService';
B
Benjamin Pasero 已提交
23
import { IEditorOptions, IResourceInput } from 'vs/platform/editor/common/editor';
24
import { IUntitledTextEditorService, UntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService';
S
Sandeep Somavarapu 已提交
25
import { IWorkspaceContextService, IWorkspace as IWorkbenchWorkspace, WorkbenchState, IWorkspaceFolder, IWorkspaceFoldersChangeEvent, Workspace } from 'vs/platform/workspace/common/workspace';
26
import { ILifecycleService, BeforeShutdownEvent, ShutdownReason, StartupKind, LifecyclePhase, WillShutdownEvent } from 'vs/platform/lifecycle/common/lifecycle';
J
Johannes Rieken 已提交
27
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
28
import { FileOperationEvent, IFileService, FileOperationError, IFileStat, IResolveFileResult, FileChangesEvent, IResolveFileOptions, ICreateFileOptions, IFileSystemProvider, FileSystemProviderCapabilities, IFileChange, IWatchOptions, IStat, FileType, FileDeleteOptions, FileOverwriteOptions, FileWriteOptions, FileOpenOptions, IFileStatWithMetadata, IResolveMetadataFileOptions, IWriteFileOptions, IReadFileOptions, IFileContent, IFileStreamContent } from 'vs/platform/files/common/files';
29
import { IModelService } from 'vs/editor/common/services/modelService';
30
import { ModeServiceImpl } from 'vs/editor/common/services/modeServiceImpl';
J
Johannes Rieken 已提交
31
import { ModelServiceImpl } from 'vs/editor/common/services/modelServiceImpl';
32
import { ITextFileStreamContent, ITextFileService, IResourceEncoding, IReadTextFileOptions } from 'vs/workbench/services/textfile/common/textfiles';
33
import { parseArgs, OPTIONS } from 'vs/platform/environment/node/argv';
J
Johannes Rieken 已提交
34 35
import { IModeService } from 'vs/editor/common/services/modeService';
import { IHistoryService } from 'vs/workbench/services/history/common/history';
36
import { IInstantiationService, ServicesAccessor, ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation';
37
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
38
import { MenuBarVisibility, IWindowConfiguration, IWindowOpenable, IOpenWindowOptions, IOpenEmptyWindowOptions, IOpenedWindow } from 'vs/platform/windows/common/windows';
S
Sandeep Somavarapu 已提交
39
import { TestWorkspace } from 'vs/platform/workspace/test/common/testWorkspace';
B
Benjamin Pasero 已提交
40
import { createTextBufferFactoryFromStream } from 'vs/editor/common/model/textModel';
41
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
42
import { IThemeService } from 'vs/platform/theme/common/themeService';
B
Benjamin Pasero 已提交
43
import { TestThemeService } from 'vs/platform/theme/test/common/testThemeService';
44
import { IWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces';
S
rename  
Sandeep Somavarapu 已提交
45
import { ITextResourceConfigurationService, ITextResourcePropertiesService } from 'vs/editor/common/services/textResourceConfigurationService';
46
import { IPosition, Position as EditorPosition } from 'vs/editor/common/core/position';
47
import { IMenuService, MenuId, IMenu } from 'vs/platform/actions/common/actions';
I
isidor 已提交
48
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
B
Benjamin Pasero 已提交
49
import { MockContextKeyService, MockKeybindingService } from 'vs/platform/keybinding/test/common/mockKeybindingService';
50
import { ITextBufferFactory, DefaultEndOfLine, EndOfLinePreference, IModelDecorationOptions, ITextModel, ITextSnapshot } from 'vs/editor/common/model';
51
import { Range } from 'vs/editor/common/core/range';
52
import { IConfirmation, IConfirmationResult, IDialogService, IDialogOptions, IPickAndOpenOptions, ISaveDialogOptions, IOpenDialogOptions, IFileDialogService, IShowResult, ConfirmResult } from 'vs/platform/dialogs/common/dialogs';
53 54
import { INotificationService } from 'vs/platform/notification/common/notification';
import { TestNotificationService } from 'vs/platform/notification/test/common/testNotificationService';
55
import { IExtensionService, NullExtensionService } from 'vs/workbench/services/extensions/common/extensions';
B
Benjamin Pasero 已提交
56
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
B
Benjamin Pasero 已提交
57
import { IDecorationsService, IResourceDecorationChangeEvent, IDecoration, IDecorationData, IDecorationsProvider } from 'vs/workbench/services/decorations/browser/decorations';
J
Joao Moreno 已提交
58
import { IDisposable, toDisposable, Disposable } from 'vs/base/common/lifecycle';
59
import { IEditorGroupsService, IEditorGroup, GroupsOrder, GroupsArrangement, GroupDirection, IAddGroupOptions, IMergeGroupOptions, IMoveEditorOptions, ICopyEditorOptions, IEditorReplacement, IGroupChangeEvent, EditorsOrder, IFindGroupScope, EditorGroupLayout, ICloseEditorOptions } from 'vs/workbench/services/editor/common/editorGroupsService';
60
import { IEditorService, IOpenEditorOverrideHandler, IVisibleEditor, ISaveEditorsOptions, IRevertAllEditorsOptions, IResourceEditor } from 'vs/workbench/services/editor/common/editorService';
B
Benjamin Pasero 已提交
61 62 63
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
import { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser';
import { IDecorationRenderOptions } from 'vs/editor/common/editorCommon';
B
Benjamin Pasero 已提交
64
import { EditorGroup } from 'vs/workbench/common/editor/editorGroup';
65
import { Dimension } from 'vs/base/browser/dom';
S
Sandeep Somavarapu 已提交
66
import { ILogService, NullLogService } from 'vs/platform/log/common/log';
I
isidor 已提交
67
import { ILabelService } from 'vs/platform/label/common/label';
68
import { timeout } from 'vs/base/common/async';
69
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
70
import { ViewletDescriptor, Viewlet } from 'vs/workbench/browser/viewlet';
71
import { IViewlet } from 'vs/workbench/common/viewlet';
72
import { IStorageService, InMemoryStorageService, IWillSaveStateEvent } from 'vs/platform/storage/common/storage';
A
Andre Weinand 已提交
73
import { isLinux, isMacintosh } from 'vs/base/common/platform';
I
isidor 已提交
74
import { LabelService } from 'vs/workbench/services/label/common/labelService';
B
Benjamin Pasero 已提交
75
import { IDimension } from 'vs/platform/layout/browser/layoutService';
76
import { Part } from 'vs/workbench/browser/part';
77 78 79
import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
import { IPanel } from 'vs/workbench/common/panel';
import { IBadge } from 'vs/workbench/services/activity/common/activity';
80
import { ISharedProcessService } from 'vs/platform/ipc/electron-browser/sharedProcessService';
81
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
82
import { NativeWorkbenchEnvironmentService } from 'vs/workbench/services/environment/electron-browser/environmentService';
83
import { VSBuffer, VSBufferReadable } from 'vs/base/common/buffer';
84
import { NativeTextFileService } from 'vs/workbench/services/textfile/electron-browser/nativeTextFileService';
85
import { Schemas } from 'vs/base/common/network';
86
import { IProductService } from 'vs/platform/product/common/productService';
87
import product from 'vs/platform/product/common/product';
88
import { IHostService } from 'vs/workbench/services/host/browser/host';
89
import { IElectronService } from 'vs/platform/electron/node/electron';
90
import { INativeOpenDialogOptions } from 'vs/platform/dialogs/node/dialogs';
91 92 93
import { IBackupMainService, IWorkspaceBackupInfo } from 'vs/platform/backup/electron-main/backup';
import { IEmptyWindowBackupInfo } from 'vs/platform/backup/node/backup';
import { IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogs';
94
import { find } from 'vs/base/common/arrays';
95
import { WorkingCopyService, IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService';
96
import { IFilesConfigurationService, FilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService';
97
import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility';
B
Benjamin Pasero 已提交
98

S
Sandeep Somavarapu 已提交
99
export function createFileInput(instantiationService: IInstantiationService, resource: URI): FileEditorInput {
100
	return instantiationService.createInstance(FileEditorInput, resource, undefined, undefined);
S
Sandeep Somavarapu 已提交
101 102
}

103
export const TestEnvironmentService = new NativeWorkbenchEnvironmentService(parseArgs(process.argv, OPTIONS) as IWindowConfiguration, process.execPath, 0);
104

105
export class TestContextService implements IWorkspaceContextService {
B
Benjamin Pasero 已提交
106
	_serviceBrand: undefined;
E
Erich Gamma 已提交
107

S
Sandeep Somavarapu 已提交
108
	private workspace: Workspace;
E
Erich Gamma 已提交
109 110
	private options: any;

M
Matt Bierner 已提交
111 112 113
	private readonly _onDidChangeWorkspaceName: Emitter<void>;
	private readonly _onDidChangeWorkspaceFolders: Emitter<IWorkspaceFoldersChangeEvent>;
	private readonly _onDidChangeWorkbenchState: Emitter<WorkbenchState>;
114

115
	constructor(workspace: any = TestWorkspace, options: any = null) {
E
Erich Gamma 已提交
116
		this.workspace = workspace;
117
		this.options = options || Object.create(null);
B
Benjamin Pasero 已提交
118
		this._onDidChangeWorkspaceName = new Emitter<void>();
119
		this._onDidChangeWorkspaceFolders = new Emitter<IWorkspaceFoldersChangeEvent>();
S
Sandeep Somavarapu 已提交
120
		this._onDidChangeWorkbenchState = new Emitter<WorkbenchState>();
121 122
	}

B
Benjamin Pasero 已提交
123
	get onDidChangeWorkspaceName(): Event<void> {
S
Sandeep Somavarapu 已提交
124 125 126
		return this._onDidChangeWorkspaceName.event;
	}

B
Benjamin Pasero 已提交
127
	get onDidChangeWorkspaceFolders(): Event<IWorkspaceFoldersChangeEvent> {
S
Sandeep Somavarapu 已提交
128
		return this._onDidChangeWorkspaceFolders.event;
129 130
	}

B
Benjamin Pasero 已提交
131
	get onDidChangeWorkbenchState(): Event<WorkbenchState> {
132 133 134
		return this._onDidChangeWorkbenchState.event;
	}

B
Benjamin Pasero 已提交
135
	getFolders(): IWorkspaceFolder[] {
S
Sandeep Somavarapu 已提交
136
		return this.workspace ? this.workspace.folders : [];
E
Erich Gamma 已提交
137 138
	}

B
Benjamin Pasero 已提交
139
	getWorkbenchState(): WorkbenchState {
B
Benjamin Pasero 已提交
140 141 142 143 144
		if (this.workspace.configuration) {
			return WorkbenchState.WORKSPACE;
		}

		if (this.workspace.folders.length) {
145
			return WorkbenchState.FOLDER;
146
		}
B
Benjamin Pasero 已提交
147

148
		return WorkbenchState.EMPTY;
S
Sandeep Somavarapu 已提交
149 150
	}

151 152 153 154
	getCompleteWorkspace(): Promise<IWorkbenchWorkspace> {
		return Promise.resolve(this.getWorkspace());
	}

B
Benjamin Pasero 已提交
155
	getWorkspace(): IWorkbenchWorkspace {
B
Benjamin Pasero 已提交
156
		return this.workspace;
157 158
	}

B
Benjamin Pasero 已提交
159
	getWorkspaceFolder(resource: URI): IWorkspaceFolder | null {
S
Sandeep Somavarapu 已提交
160
		return this.workspace.getFolder(resource);
161 162
	}

B
Benjamin Pasero 已提交
163
	setWorkspace(workspace: any): void {
D
Daniel Imms 已提交
164 165 166
		this.workspace = workspace;
	}

B
Benjamin Pasero 已提交
167
	getOptions() {
E
Erich Gamma 已提交
168 169 170
		return this.options;
	}

B
Benjamin Pasero 已提交
171
	updateOptions() {
E
Erich Gamma 已提交
172 173 174

	}

B
Benjamin Pasero 已提交
175
	isInsideWorkspace(resource: URI): boolean {
E
Erich Gamma 已提交
176
		if (resource && this.workspace) {
177
			return resources.isEqualOrParent(resource, this.workspace.folders[0].uri);
E
Erich Gamma 已提交
178 179 180 181 182
		}

		return false;
	}

B
Benjamin Pasero 已提交
183
	toResource(workspaceRelativePath: string): URI {
184
		return URI.file(join('C:\\', workspaceRelativePath));
E
Erich Gamma 已提交
185
	}
186

B
Benjamin Pasero 已提交
187
	isCurrentWorkspace(workspaceIdentifier: ISingleFolderWorkspaceIdentifier | IWorkspaceIdentifier): boolean {
188
		return isSingleFolderWorkspaceIdentifier(workspaceIdentifier) && resources.isEqual(this.workspace.folders[0].uri, workspaceIdentifier);
189
	}
E
Erich Gamma 已提交
190 191
}

192
export class TestTextFileService extends NativeTextFileService {
B
Benjamin Pasero 已提交
193
	cleanupBackupsBeforeShutdownCalled!: boolean;
194

195 196
	private promptPath!: URI;
	private resolveTextContentError!: FileOperationError | null;
A
Alex Dima 已提交
197 198

	constructor(
199
		@IWorkspaceContextService contextService: IWorkspaceContextService,
200
		@IFileService protected fileService: IFileService,
201
		@IUntitledTextEditorService untitledTextEditorService: IUntitledTextEditorService,
202
		@ILifecycleService lifecycleService: ILifecycleService,
203
		@IInstantiationService instantiationService: IInstantiationService,
204 205
		@IModeService modeService: IModeService,
		@IModelService modelService: IModelService,
206
		@IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService,
207
		@INotificationService notificationService: INotificationService,
208
		@IBackupFileService backupFileService: IBackupFileService,
I
isidor 已提交
209
		@IHistoryService historyService: IHistoryService,
210 211
		@IDialogService dialogService: IDialogService,
		@IFileDialogService fileDialogService: IFileDialogService,
B
Benjamin Pasero 已提交
212
		@IEditorService editorService: IEditorService,
S
rename  
Sandeep Somavarapu 已提交
213
		@ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService,
214
		@IElectronService electronService: IElectronService,
215
		@IProductService productService: IProductService,
216
		@IFilesConfigurationService filesConfigurationService: IFilesConfigurationService
A
Alex Dima 已提交
217
	) {
218 219 220
		super(
			contextService,
			fileService,
221
			untitledTextEditorService,
222 223 224 225 226 227 228 229 230 231
			lifecycleService,
			instantiationService,
			modeService,
			modelService,
			environmentService,
			notificationService,
			backupFileService,
			historyService,
			dialogService,
			fileDialogService,
B
Benjamin Pasero 已提交
232
			editorService,
233
			textResourceConfigurationService,
234
			electronService,
235
			productService,
236
			filesConfigurationService
237
		);
A
Alex Dima 已提交
238
	}
239

B
Benjamin Pasero 已提交
240
	setPromptPath(path: URI): void {
241 242 243
		this.promptPath = path;
	}

B
Benjamin Pasero 已提交
244
	setResolveTextContentErrorOnce(error: FileOperationError): void {
245 246 247
		this.resolveTextContentError = error;
	}

B
Benjamin Pasero 已提交
248
	async readStream(resource: URI, options?: IReadTextFileOptions): Promise<ITextFileStreamContent> {
249 250 251 252
		if (this.resolveTextContentError) {
			const error = this.resolveTextContentError;
			this.resolveTextContentError = null;

B
Benjamin Pasero 已提交
253
			throw error;
254 255
		}

B
Benjamin Pasero 已提交
256 257 258 259 260 261 262 263 264 265 266
		const content = await this.fileService.readFileStream(resource, options);
		return {
			resource: content.resource,
			name: content.name,
			mtime: content.mtime,
			ctime: content.ctime,
			etag: content.etag,
			encoding: 'utf8',
			value: await createTextBufferFactoryFromStream(content.value),
			size: 10
		};
267
	}
268

B
Benjamin Pasero 已提交
269
	promptForPath(_resource: URI, _defaultPath: URI): Promise<URI> {
B
Benjamin Pasero 已提交
270
		return Promise.resolve(this.promptPath);
271 272
	}

J
Johannes Rieken 已提交
273
	protected cleanupBackupsBeforeShutdown(): Promise<void> {
274
		this.cleanupBackupsBeforeShutdownCalled = true;
B
Benjamin Pasero 已提交
275
		return Promise.resolve();
276
	}
A
Alex Dima 已提交
277 278
}

279 280 281 282 283
export interface ITestInstantiationService extends IInstantiationService {
	stub<T>(service: ServiceIdentifier<T>, ctor: any): T;
}

export function workbenchInstantiationService(): ITestInstantiationService {
284
	let instantiationService = new TestInstantiationService(new ServiceCollection([ILifecycleService, new TestLifecycleService()]));
285
	instantiationService.stub(IEnvironmentService, TestEnvironmentService);
286 287
	const contextKeyService = <IContextKeyService>instantiationService.createInstance(MockContextKeyService);
	instantiationService.stub(IContextKeyService, contextKeyService);
I
isidor 已提交
288 289
	const workspaceContextService = new TestContextService(TestWorkspace);
	instantiationService.stub(IWorkspaceContextService, workspaceContextService);
290 291
	const configService = new TestConfigurationService();
	instantiationService.stub(IConfigurationService, configService);
292
	instantiationService.stub(IFilesConfigurationService, new TestFilesConfigurationService(contextKeyService, configService, TestEnvironmentService));
S
rename  
Sandeep Somavarapu 已提交
293
	instantiationService.stub(ITextResourceConfigurationService, new TestTextResourceConfigurationService(configService));
294
	instantiationService.stub(IUntitledTextEditorService, instantiationService.createInstance(UntitledTextEditorService));
295
	instantiationService.stub(IStorageService, new TestStorageService());
296
	instantiationService.stub(IWorkbenchLayoutService, new TestLayoutService());
297
	instantiationService.stub(IDialogService, new TestDialogService());
298
	instantiationService.stub(IAccessibilityService, new TestAccessibilityService());
299
	instantiationService.stub(IFileDialogService, new TestFileDialogService());
300
	instantiationService.stub(IElectronService, new TestElectronService());
J
Johannes Rieken 已提交
301
	instantiationService.stub(IModeService, instantiationService.createInstance(ModeServiceImpl));
B
Benjamin Pasero 已提交
302
	instantiationService.stub(IHistoryService, new TestHistoryService());
S
Sandeep Somavarapu 已提交
303
	instantiationService.stub(ITextResourcePropertiesService, new TestTextResourcePropertiesService(configService));
S
Sandeep Somavarapu 已提交
304
	instantiationService.stub(IModelService, instantiationService.createInstance(ModelServiceImpl));
305
	instantiationService.stub(IFileService, new TestFileService());
306
	instantiationService.stub(IBackupFileService, new TestBackupFileService());
307
	instantiationService.stub(ITelemetryService, NullTelemetryService);
308
	instantiationService.stub(INotificationService, new TestNotificationService());
309
	instantiationService.stub(IUntitledTextEditorService, instantiationService.createInstance(UntitledTextEditorService));
B
Benjamin Pasero 已提交
310 311 312 313
	instantiationService.stub(IMenuService, new TestMenuService());
	instantiationService.stub(IKeybindingService, new MockKeybindingService());
	instantiationService.stub(IDecorationsService, new TestDecorationsService());
	instantiationService.stub(IExtensionService, new TestExtensionService());
314
	instantiationService.stub(IHostService, <IHostService>instantiationService.createInstance(TestHostService));
315
	instantiationService.stub(ITextFileService, <ITextFileService>instantiationService.createInstance(TestTextFileService));
316
	instantiationService.stub(ITextModelService, <ITextModelService>instantiationService.createInstance(TextModelResolverService));
B
Benjamin Pasero 已提交
317
	instantiationService.stub(IThemeService, new TestThemeService());
S
Sandeep Somavarapu 已提交
318
	instantiationService.stub(ILogService, new NullLogService());
319 320
	const editorGroupService = new TestEditorGroupsService([new TestEditorGroupView(0)]);
	instantiationService.stub(IEditorGroupsService, editorGroupService);
M
Martin Aeschlimann 已提交
321
	instantiationService.stub(ILabelService, <ILabelService>instantiationService.createInstance(LabelService));
322
	const editorService = new TestEditorService(editorGroupService);
323
	instantiationService.stub(IEditorService, editorService);
B
Benjamin Pasero 已提交
324
	instantiationService.stub(ICodeEditorService, new TestCodeEditorService());
325
	instantiationService.stub(IViewletService, new TestViewletService());
326
	instantiationService.stub(IWorkingCopyService, new TestWorkingCopyService());
327 328 329 330

	return instantiationService;
}

331 332 333 334 335 336 337 338 339 340 341
export class TestAccessibilityService implements IAccessibilityService {

	_serviceBrand: undefined;

	onDidChangeAccessibilitySupport = Event.None;

	alwaysUnderlineAccessKeys(): Promise<boolean> { return Promise.resolve(false); }
	getAccessibilitySupport(): AccessibilitySupport { return AccessibilitySupport.Unknown; }
	setAccessibilitySupport(accessibilitySupport: AccessibilitySupport): void { }
}

B
Benjamin Pasero 已提交
342
export class TestDecorationsService implements IDecorationsService {
343
	_serviceBrand: undefined;
B
Benjamin Pasero 已提交
344
	onDidChangeDecorations: Event<IResourceDecorationChangeEvent> = Event.None;
345
	registerDecorationsProvider(_provider: IDecorationsProvider): IDisposable { return Disposable.None; }
346
	getDecoration(_uri: URI, _includeChildren: boolean, _overwrite?: IDecorationData): IDecoration | undefined { return undefined; }
B
Benjamin Pasero 已提交
347 348
}

349
export class TestExtensionService extends NullExtensionService { }
B
Benjamin Pasero 已提交
350 351 352

export class TestMenuService implements IMenuService {

B
Benjamin Pasero 已提交
353
	_serviceBrand: undefined;
B
Benjamin Pasero 已提交
354

355
	createMenu(_id: MenuId, _scopedKeybindingService: IContextKeyService): IMenu {
B
Benjamin Pasero 已提交
356 357
		return {
			onDidChange: Event.None,
R
Rob Lourens 已提交
358
			dispose: () => undefined,
B
Benjamin Pasero 已提交
359 360 361 362 363
			getActions: () => []
		};
	}
}

B
Benjamin Pasero 已提交
364 365
export class TestHistoryService implements IHistoryService {

366
	_serviceBrand: undefined;
B
Benjamin Pasero 已提交
367

368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383
	constructor(private root?: URI) { }

	reopenLastClosedEditor(): void { }
	forward(): void { }
	back(): void { }
	last(): void { }
	remove(_input: IEditorInput | IResourceInput): void { }
	clear(): void { }
	clearRecentlyOpened(): void { }
	getHistory(): Array<IEditorInput | IResourceInput> { return []; }
	openNextRecentlyUsedEditor(group?: GroupIdentifier): void { }
	openPreviouslyUsedEditor(group?: GroupIdentifier): void { }
	getMostRecentlyUsedOpenEditors(): Array<IEditorIdentifier> { return []; }
	getLastActiveWorkspaceRoot(_schemeFilter: string): URI | undefined { return this.root; }
	getLastActiveFile(_schemeFilter: string): URI | undefined { return undefined; }
	openLastEditLocation(): void { }
B
Benjamin Pasero 已提交
384 385
}

386
export class TestDialogService implements IDialogService {
387

B
Benjamin Pasero 已提交
388
	_serviceBrand: undefined;
E
Erich Gamma 已提交
389

B
Benjamin Pasero 已提交
390
	confirm(_confirmation: IConfirmation): Promise<IConfirmationResult> {
B
Benjamin Pasero 已提交
391
		return Promise.resolve({ confirmed: false });
392
	}
393

B
Benjamin Pasero 已提交
394
	show(_severity: Severity, _message: string, _buttons: string[], _options?: IDialogOptions): Promise<IShowResult> {
395
		return Promise.resolve({ choice: 0 });
396
	}
397

B
Benjamin Pasero 已提交
398
	about(): Promise<void> {
399 400
		return Promise.resolve();
	}
E
Erich Gamma 已提交
401 402
}

M
Martin Aeschlimann 已提交
403 404
export class TestFileDialogService implements IFileDialogService {

B
Benjamin Pasero 已提交
405
	_serviceBrand: undefined;
M
Martin Aeschlimann 已提交
406

407 408
	private confirmResult!: ConfirmResult;

B
Benjamin Pasero 已提交
409
	defaultFilePath(_schemeFilter?: string): URI | undefined {
R
Rob Lourens 已提交
410
		return undefined;
M
Martin Aeschlimann 已提交
411
	}
B
Benjamin Pasero 已提交
412
	defaultFolderPath(_schemeFilter?: string): URI | undefined {
R
Rob Lourens 已提交
413
		return undefined;
M
Martin Aeschlimann 已提交
414
	}
B
Benjamin Pasero 已提交
415
	defaultWorkspacePath(_schemeFilter?: string): URI | undefined {
R
Rob Lourens 已提交
416
		return undefined;
M
Martin Aeschlimann 已提交
417
	}
B
Benjamin Pasero 已提交
418
	pickFileFolderAndOpen(_options: IPickAndOpenOptions): Promise<any> {
B
Benjamin Pasero 已提交
419
		return Promise.resolve(0);
M
Martin Aeschlimann 已提交
420
	}
B
Benjamin Pasero 已提交
421
	pickFileAndOpen(_options: IPickAndOpenOptions): Promise<any> {
B
Benjamin Pasero 已提交
422
		return Promise.resolve(0);
M
Martin Aeschlimann 已提交
423
	}
B
Benjamin Pasero 已提交
424
	pickFolderAndOpen(_options: IPickAndOpenOptions): Promise<any> {
B
Benjamin Pasero 已提交
425
		return Promise.resolve(0);
M
Martin Aeschlimann 已提交
426
	}
B
Benjamin Pasero 已提交
427
	pickWorkspaceAndOpen(_options: IPickAndOpenOptions): Promise<any> {
B
Benjamin Pasero 已提交
428
		return Promise.resolve(0);
M
Martin Aeschlimann 已提交
429
	}
B
Benjamin Pasero 已提交
430
	pickFileToSave(_options: ISaveDialogOptions): Promise<URI | undefined> {
431 432
		return Promise.resolve(undefined);
	}
B
Benjamin Pasero 已提交
433
	showSaveDialog(_options: ISaveDialogOptions): Promise<URI | undefined> {
J
Johannes Rieken 已提交
434
		return Promise.resolve(undefined);
M
Martin Aeschlimann 已提交
435
	}
B
Benjamin Pasero 已提交
436
	showOpenDialog(_options: IOpenDialogOptions): Promise<URI[] | undefined> {
J
Johannes Rieken 已提交
437
		return Promise.resolve(undefined);
M
Martin Aeschlimann 已提交
438
	}
B
Benjamin Pasero 已提交
439
	setConfirmResult(result: ConfirmResult): void {
440 441
		this.confirmResult = result;
	}
B
Benjamin Pasero 已提交
442
	showSaveConfirm(fileNamesOrResources: (string | URI)[]): Promise<ConfirmResult> {
443 444
		return Promise.resolve(this.confirmResult);
	}
M
Martin Aeschlimann 已提交
445 446
}

447
export class TestLayoutService implements IWorkbenchLayoutService {
B
Benjamin Pasero 已提交
448

B
Benjamin Pasero 已提交
449
	_serviceBrand: undefined;
E
Erich Gamma 已提交
450

451 452
	dimension: IDimension = { width: 800, height: 600 };

453 454
	container: HTMLElement = window.document.body;

B
Benjamin Pasero 已提交
455
	onZenModeChange: Event<boolean> = Event.None;
S
SteVen Batten 已提交
456 457
	onCenteredLayoutChange: Event<boolean> = Event.None;
	onFullscreenChange: Event<boolean> = Event.None;
458
	onMaximizeChange: Event<boolean> = Event.None;
459
	onPanelPositionChange: Event<string> = Event.None;
460
	onPartVisibilityChange: Event<void> = Event.None;
461
	onLayout = Event.None;
B
Benjamin Pasero 已提交
462

463
	private readonly _onMenubarVisibilityChange = new Emitter<Dimension>();
464

B
Benjamin Pasero 已提交
465
	get onMenubarVisibilityChange(): Event<Dimension> {
466 467 468
		return this._onMenubarVisibilityChange.event;
	}

B
Benjamin Pasero 已提交
469
	isRestored(): boolean {
E
Erich Gamma 已提交
470 471 472
		return true;
	}

B
Benjamin Pasero 已提交
473
	hasFocus(_part: Parts): boolean {
E
Erich Gamma 已提交
474 475 476
		return false;
	}

B
Benjamin Pasero 已提交
477
	hasWindowBorder(): boolean {
E
Eric Amodio 已提交
478 479 480
		return false;
	}

B
Benjamin Pasero 已提交
481
	getWindowBorderRadius(): string | undefined {
E
Eric Amodio 已提交
482 483 484
		return undefined;
	}

B
Benjamin Pasero 已提交
485
	isVisible(_part: Parts): boolean {
E
Erich Gamma 已提交
486 487 488
		return true;
	}

489 490 491 492
	getDimension(_part: Parts): Dimension {
		return new Dimension(0, 0);
	}

B
Benjamin Pasero 已提交
493
	getContainer(_part: Parts): HTMLElement {
B
Benjamin Pasero 已提交
494
		return null!;
495 496
	}

B
Benjamin Pasero 已提交
497
	isTitleBarHidden(): boolean {
B
Benjamin Pasero 已提交
498 499 500
		return false;
	}

B
Benjamin Pasero 已提交
501
	getTitleBarOffset(): number {
502 503 504
		return 0;
	}

B
Benjamin Pasero 已提交
505
	isStatusBarHidden(): boolean {
506 507 508
		return false;
	}

B
Benjamin Pasero 已提交
509
	isActivityBarHidden(): boolean {
S
Sanders Lauture 已提交
510 511 512
		return false;
	}

B
Benjamin Pasero 已提交
513
	setActivityBarHidden(_hidden: boolean): void { }
S
Sanders Lauture 已提交
514

B
Benjamin Pasero 已提交
515
	isSideBarHidden(): boolean {
E
Erich Gamma 已提交
516 517 518
		return false;
	}

B
Benjamin Pasero 已提交
519
	setEditorHidden(_hidden: boolean): Promise<void> { return Promise.resolve(); }
S
SteVen Batten 已提交
520

B
Benjamin Pasero 已提交
521
	setSideBarHidden(_hidden: boolean): Promise<void> { return Promise.resolve(); }
E
Erich Gamma 已提交
522

B
Benjamin Pasero 已提交
523
	isPanelHidden(): boolean {
I
isidor 已提交
524 525 526
		return false;
	}

B
Benjamin Pasero 已提交
527
	setPanelHidden(_hidden: boolean): Promise<void> { return Promise.resolve(); }
I
isidor 已提交
528

B
Benjamin Pasero 已提交
529
	toggleMaximizedPanel(): void { }
I
isidor 已提交
530

B
Benjamin Pasero 已提交
531
	isPanelMaximized(): boolean {
B
Benjamin Pasero 已提交
532 533 534
		return false;
	}

B
Benjamin Pasero 已提交
535
	getMenubarVisibility(): MenuBarVisibility {
536
		throw new Error('not implemented');
S
SteVen Batten 已提交
537 538
	}

B
Benjamin Pasero 已提交
539
	getSideBarPosition() {
E
Erich Gamma 已提交
540 541 542
		return 0;
	}

B
Benjamin Pasero 已提交
543
	getPanelPosition() {
I
isidor 已提交
544 545 546
		return 0;
	}

B
Benjamin Pasero 已提交
547
	setPanelPosition(_position: PartPosition): Promise<void> {
548
		return Promise.resolve();
I
isidor 已提交
549 550
	}

B
Benjamin Pasero 已提交
551 552
	addClass(_clazz: string): void { }
	removeClass(_clazz: string): void { }
553

B
Benjamin Pasero 已提交
554
	getMaximumEditorDimensions(): Dimension { throw new Error('not implemented'); }
555

B
Benjamin Pasero 已提交
556 557
	getWorkbenchContainer(): HTMLElement { throw new Error('not implemented'); }
	getWorkbenchElement(): HTMLElement { throw new Error('not implemented'); }
B
Benjamin Pasero 已提交
558

B
Benjamin Pasero 已提交
559
	toggleZenMode(): void { }
560

B
Benjamin Pasero 已提交
561 562
	isEditorLayoutCentered(): boolean { return false; }
	centerEditorLayout(_active: boolean): void { }
S
SrTobi 已提交
563 564


B
Benjamin Pasero 已提交
565
	resizePart(_part: Parts, _sizeChange: number): void { }
566

B
Benjamin Pasero 已提交
567
	registerPart(part: Part): void { }
568 569 570 571 572

	isWindowMaximized() {
		return false;
	}

B
Benjamin Pasero 已提交
573
	updateWindowMaximizedState(maximized: boolean): void { }
E
Erich Gamma 已提交
574 575
}

576
let activeViewlet: Viewlet = {} as any;
577

578
export class TestViewletService implements IViewletService {
B
Benjamin Pasero 已提交
579
	_serviceBrand: undefined;
580 581 582 583 584 585 586 587 588 589 590

	onDidViewletRegisterEmitter = new Emitter<ViewletDescriptor>();
	onDidViewletDeregisterEmitter = new Emitter<ViewletDescriptor>();
	onDidViewletOpenEmitter = new Emitter<IViewlet>();
	onDidViewletCloseEmitter = new Emitter<IViewlet>();

	onDidViewletRegister = this.onDidViewletRegisterEmitter.event;
	onDidViewletDeregister = this.onDidViewletDeregisterEmitter.event;
	onDidViewletOpen = this.onDidViewletOpenEmitter.event;
	onDidViewletClose = this.onDidViewletCloseEmitter.event;

B
Benjamin Pasero 已提交
591
	openViewlet(id: string, focus?: boolean): Promise<IViewlet | undefined> {
B
Benjamin Pasero 已提交
592
		return Promise.resolve(undefined);
593 594
	}

B
Benjamin Pasero 已提交
595
	getViewlets(): ViewletDescriptor[] {
596 597 598
		return [];
	}

B
Benjamin Pasero 已提交
599
	getAllViewlets(): ViewletDescriptor[] {
600 601 602
		return [];
	}

B
Benjamin Pasero 已提交
603
	getActiveViewlet(): IViewlet {
604 605 606
		return activeViewlet;
	}

B
Benjamin Pasero 已提交
607
	dispose() {
608 609
	}

B
Benjamin Pasero 已提交
610
	getDefaultViewletId(): string {
611 612 613
		return 'workbench.view.explorer';
	}

B
Benjamin Pasero 已提交
614
	getViewlet(id: string): ViewletDescriptor | undefined {
615 616 617
		return undefined;
	}

B
Benjamin Pasero 已提交
618
	getProgressIndicator(id: string) {
B
Benjamin Pasero 已提交
619
		return undefined;
620
	}
621

B
Benjamin Pasero 已提交
622
	hideActiveViewlet(): void { }
623

B
Benjamin Pasero 已提交
624
	getLastActiveViewletId(): string {
M
Matt Bierner 已提交
625
		return undefined!;
626
	}
627 628 629
}

export class TestPanelService implements IPanelService {
B
Benjamin Pasero 已提交
630
	_serviceBrand: undefined;
631 632 633 634

	onDidPanelOpen = new Emitter<{ panel: IPanel, focus: boolean }>().event;
	onDidPanelClose = new Emitter<IPanel>().event;

B
Benjamin Pasero 已提交
635
	openPanel(id: string, focus?: boolean): undefined {
636
		return undefined;
637 638
	}

B
Benjamin Pasero 已提交
639
	getPanel(id: string): any {
B
Benjamin Pasero 已提交
640 641 642
		return activeViewlet;
	}

B
Benjamin Pasero 已提交
643
	getPanels() {
644 645 646
		return [];
	}

B
Benjamin Pasero 已提交
647
	getPinnedPanels() {
648 649 650
		return [];
	}

B
Benjamin Pasero 已提交
651
	getActivePanel(): IViewlet {
652 653 654
		return activeViewlet;
	}

B
Benjamin Pasero 已提交
655
	setPanelEnablement(id: string, enabled: boolean): void { }
656

B
Benjamin Pasero 已提交
657
	dispose() {
658 659
	}

B
Benjamin Pasero 已提交
660
	showActivity(panelId: string, badge: IBadge, clazz?: string): IDisposable {
661 662 663
		throw new Error('Method not implemented.');
	}

B
Benjamin Pasero 已提交
664
	getProgressIndicator(id: string) {
B
Benjamin Pasero 已提交
665 666 667
		return null!;
	}

B
Benjamin Pasero 已提交
668
	hideActivePanel(): void { }
669

B
Benjamin Pasero 已提交
670
	getLastActivePanelId(): string {
M
Matt Bierner 已提交
671
		return undefined!;
672 673 674
	}
}

675
export class TestStorageService extends InMemoryStorageService {
B
Benjamin Pasero 已提交
676 677
	readonly _onWillSaveState = this._register(new Emitter<IWillSaveStateEvent>());
	readonly onWillSaveState = this._onWillSaveState.event;
678
}
679

680 681
export class TestEditorGroupsService implements IEditorGroupsService {

682
	_serviceBrand: undefined;
683

684
	constructor(public groups: TestEditorGroupView[] = []) { }
685

686
	onDidActiveGroupChange: Event<IEditorGroup> = Event.None;
B
Benjamin Pasero 已提交
687
	onDidActivateGroup: Event<IEditorGroup> = Event.None;
688 689 690
	onDidAddGroup: Event<IEditorGroup> = Event.None;
	onDidRemoveGroup: Event<IEditorGroup> = Event.None;
	onDidMoveGroup: Event<IEditorGroup> = Event.None;
691
	onDidGroupIndexChange: Event<IEditorGroup> = Event.None;
692
	onDidLayout: Event<IDimension> = Event.None;
693
	onDidEditorPartOptionsChange = Event.None;
694 695

	orientation: any;
R
Rob Lourens 已提交
696
	whenRestored: Promise<void> = Promise.resolve(undefined);
B
Benjamin Pasero 已提交
697
	willRestoreEditors = false;
698

J
Joao Moreno 已提交
699
	contentDimension = { width: 800, height: 600 };
700

701
	get activeGroup(): IEditorGroup {
702 703 704 705 706 707 708
		return this.groups[0];
	}

	get count(): number {
		return this.groups.length;
	}

709
	getGroups(_order?: GroupsOrder): ReadonlyArray<IEditorGroup> {
710 711 712
		return this.groups;
	}

713 714
	getGroup(identifier: number): IEditorGroup | undefined {
		return find(this.groups, group => group.id === identifier);
715 716
	}

717
	getLabel(_identifier: number): string {
718 719 720
		return 'Group 1';
	}

721
	findGroup(_scope: IFindGroupScope, _source?: number | IEditorGroup, _wrap?: boolean): IEditorGroup {
722
		throw new Error('not implemented');
723 724
	}

725
	activateGroup(_group: number | IEditorGroup): IEditorGroup {
726
		throw new Error('not implemented');
727 728
	}

B
Benjamin Pasero 已提交
729 730 731 732
	restoreGroup(_group: number | IEditorGroup): IEditorGroup {
		throw new Error('not implemented');
	}

733 734
	getSize(_group: number | IEditorGroup): { width: number, height: number } {
		return { width: 100, height: 100 };
735 736
	}

737
	setSize(_group: number | IEditorGroup, _size: { width: number, height: number }): void { }
738

739
	arrangeGroups(_arrangement: GroupsArrangement): void { }
740

741
	applyLayout(_layout: EditorGroupLayout): void { }
742

743
	setGroupOrientation(_orientation: any): void { }
744

745
	addGroup(_location: number | IEditorGroup, _direction: GroupDirection, _options?: IAddGroupOptions): IEditorGroup {
746
		throw new Error('not implemented');
747 748
	}

749
	removeGroup(_group: number | IEditorGroup): void { }
750

751
	moveGroup(_group: number | IEditorGroup, _location: number | IEditorGroup, _direction: GroupDirection): IEditorGroup {
752
		throw new Error('not implemented');
753 754
	}

755
	mergeGroup(_group: number | IEditorGroup, _target: number | IEditorGroup, _options?: IMergeGroupOptions): IEditorGroup {
756
		throw new Error('not implemented');
757 758
	}

759
	copyGroup(_group: number | IEditorGroup, _location: number | IEditorGroup, _direction: GroupDirection): IEditorGroup {
760
		throw new Error('not implemented');
761
	}
762 763 764 765 766 767 768

	centerLayout(active: boolean): void { }

	isLayoutCentered(): boolean {
		return false;
	}

769
	partOptions!: IEditorPartOptions;
770 771
	enforcePartOptions(options: IEditorPartOptions): IDisposable {
		return Disposable.None;
772 773 774
	}
}

775
export class TestEditorGroupView implements IEditorGroupView {
776 777 778

	constructor(public id: number) { }

779
	get group(): EditorGroup { throw new Error('not implemented'); }
780 781 782 783 784
	activeControl!: IVisibleEditor;
	activeEditor!: IEditorInput;
	previewEditor!: IEditorInput;
	count!: number;
	disposed!: boolean;
B
Benjamin Pasero 已提交
785
	editors: ReadonlyArray<IEditorInput> = [];
786 787
	label!: string;
	index!: number;
R
Rob Lourens 已提交
788
	whenRestored: Promise<void> = Promise.resolve(undefined);
789 790 791 792 793
	element!: HTMLElement;
	minimumWidth!: number;
	maximumWidth!: number;
	minimumHeight!: number;
	maximumHeight!: number;
794

795 796 797
	isEmpty = true;
	isMinimized = false;

798
	onWillDispose: Event<void> = Event.None;
799
	onDidGroupChange: Event<IGroupChangeEvent> = Event.None;
B
Benjamin Pasero 已提交
800 801
	onWillCloseEditor: Event<IEditorCloseEvent> = Event.None;
	onDidCloseEditor: Event<IEditorCloseEvent> = Event.None;
802 803
	onWillOpenEditor: Event<IEditorOpeningEvent> = Event.None;
	onDidOpenEditorFail: Event<IEditorInput> = Event.None;
B
Benjamin Pasero 已提交
804 805
	onDidFocus: Event<void> = Event.None;
	onDidChange: Event<{ width: number; height: number; }> = Event.None;
806

807
	getEditors(_order?: EditorsOrder): ReadonlyArray<IEditorInput> {
B
Benjamin Pasero 已提交
808 809 810
		return [];
	}

B
Benjamin Pasero 已提交
811
	getEditorByIndex(_index: number): IEditorInput {
812
		throw new Error('not implemented');
813 814
	}

815
	getIndexOfEditor(_editor: IEditorInput): number {
816 817 818
		return -1;
	}

J
Johannes Rieken 已提交
819
	openEditor(_editor: IEditorInput, _options?: IEditorOptions): Promise<IEditor> {
820
		throw new Error('not implemented');
821 822
	}

J
Johannes Rieken 已提交
823
	openEditors(_editors: IEditorInputWithOptions[]): Promise<IEditor> {
824
		throw new Error('not implemented');
825 826
	}

827
	isOpened(_editor: IEditorInput | IResourceInput): boolean {
828 829 830
		return false;
	}

831
	isPinned(_editor: IEditorInput): boolean {
832 833 834
		return false;
	}

835
	isActive(_editor: IEditorInput): boolean {
836 837 838
		return false;
	}

839
	moveEditor(_editor: IEditorInput, _target: IEditorGroup, _options?: IMoveEditorOptions): void { }
840

841
	copyEditor(_editor: IEditorInput, _target: IEditorGroup, _options?: ICopyEditorOptions): void { }
842

843
	closeEditor(_editor?: IEditorInput, options?: ICloseEditorOptions): Promise<void> {
B
Benjamin Pasero 已提交
844
		return Promise.resolve();
845 846
	}

847
	closeEditors(_editors: IEditorInput[] | { except?: IEditorInput; direction?: CloseDirection; savedOnly?: boolean; }, options?: ICloseEditorOptions): Promise<void> {
B
Benjamin Pasero 已提交
848
		return Promise.resolve();
849 850
	}

J
Johannes Rieken 已提交
851
	closeAllEditors(): Promise<void> {
B
Benjamin Pasero 已提交
852
		return Promise.resolve();
853 854
	}

J
Johannes Rieken 已提交
855
	replaceEditors(_editors: IEditorReplacement[]): Promise<void> {
B
Benjamin Pasero 已提交
856
		return Promise.resolve();
857 858
	}

859
	pinEditor(_editor?: IEditorInput): void { }
860 861 862 863

	focus(): void { }

	invokeWithinContext<T>(fn: (accessor: ServicesAccessor) => T): T {
864
		throw new Error('not implemented');
865
	}
B
Benjamin Pasero 已提交
866

867
	setActive(_isActive: boolean): void { }
B
Benjamin Pasero 已提交
868
	notifyIndexChanged(_index: number): void { }
B
Benjamin Pasero 已提交
869 870
	dispose(): void { }
	toJSON(): object { return Object.create(null); }
871
	layout(_width: number, _height: number): void { }
872
	relayout() { }
873 874
}

875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896
export class TestEditorGroupAccessor implements IEditorGroupsAccessor {

	groups: IEditorGroupView[] = [];
	activeGroup!: IEditorGroupView;

	partOptions: IEditorPartOptions = {};

	onDidEditorPartOptionsChange = Event.None;
	onDidVisibilityChange = Event.None;

	getGroup(identifier: number): IEditorGroupView | undefined { throw new Error('Method not implemented.'); }
	getGroups(order: GroupsOrder): IEditorGroupView[] { throw new Error('Method not implemented.'); }
	activateGroup(identifier: number | IEditorGroupView): IEditorGroupView { throw new Error('Method not implemented.'); }
	restoreGroup(identifier: number | IEditorGroupView): IEditorGroupView { throw new Error('Method not implemented.'); }
	addGroup(location: number | IEditorGroupView, direction: GroupDirection, options?: IAddGroupOptions | undefined): IEditorGroupView { throw new Error('Method not implemented.'); }
	mergeGroup(group: number | IEditorGroupView, target: number | IEditorGroupView, options?: IMergeGroupOptions | undefined): IEditorGroupView { throw new Error('Method not implemented.'); }
	moveGroup(group: number | IEditorGroupView, location: number | IEditorGroupView, direction: GroupDirection): IEditorGroupView { throw new Error('Method not implemented.'); }
	copyGroup(group: number | IEditorGroupView, location: number | IEditorGroupView, direction: GroupDirection): IEditorGroupView { throw new Error('Method not implemented.'); }
	removeGroup(group: number | IEditorGroupView): void { throw new Error('Method not implemented.'); }
	arrangeGroups(arrangement: GroupsArrangement, target?: number | IEditorGroupView | undefined): void { throw new Error('Method not implemented.'); }
}

B
Benjamin Pasero 已提交
897
export class TestEditorService implements EditorServiceImpl {
898

899
	_serviceBrand: undefined;
900 901 902

	onDidActiveEditorChange: Event<void> = Event.None;
	onDidVisibleEditorsChange: Event<void> = Event.None;
B
Benjamin Pasero 已提交
903
	onDidCloseEditor: Event<IEditorCloseEvent> = Event.None;
904 905
	onDidOpenEditorFail: Event<IEditorIdentifier> = Event.None;

906
	activeControl!: IVisibleEditor;
907
	activeTextEditorWidget: any;
908
	activeEditor!: IEditorInput;
909
	editors: ReadonlyArray<IEditorInput> = [];
M
Matt Bierner 已提交
910
	visibleControls: ReadonlyArray<IVisibleEditor> = [];
911
	visibleTextEditorWidgets = [];
B
Benjamin Pasero 已提交
912
	visibleEditors: ReadonlyArray<IEditorInput> = [];
913

B
Benjamin Pasero 已提交
914
	constructor(private editorGroupService?: IEditorGroupsService) { }
915

916
	overrideOpenEditor(_handler: IOpenEditorOverrideHandler): IDisposable {
R
Rob Lourens 已提交
917
		return toDisposable(() => undefined);
918 919
	}

920 921
	openEditor(_editor: any, _options?: any, _group?: any): Promise<any> {
		throw new Error('not implemented');
922 923
	}

924
	doResolveEditorOpenRequest(editor: IEditorInput | IResourceEditor): [IEditorGroup, EditorInput, EditorOptions | undefined] | undefined {
B
Benjamin Pasero 已提交
925 926 927 928
		if (!this.editorGroupService) {
			return undefined;
		}

929 930 931
		return [this.editorGroupService.activeGroup, editor as EditorInput, undefined];
	}

932 933
	openEditors(_editors: any, _group?: any): Promise<IEditor[]> {
		throw new Error('not implemented');
934 935
	}

936
	isOpen(_editor: IEditorInput | IResourceInput | IUntitledTextResourceInput): boolean {
937 938 939
		return false;
	}

940
	getOpened(_editor: IEditorInput | IResourceInput | IUntitledTextResourceInput): IEditorInput {
941
		throw new Error('not implemented');
942 943
	}

944
	replaceEditors(_editors: any, _group: any) {
R
Rob Lourens 已提交
945
		return Promise.resolve(undefined);
946 947
	}

948
	invokeWithinEditorContext<T>(fn: (accessor: ServicesAccessor) => T): T {
949
		throw new Error('not implemented');
950 951
	}

952
	createInput(_input: IResourceInput | IUntitledTextResourceInput | IResourceDiffInput | IResourceSideBySideInput): IEditorInput {
953
		throw new Error('not implemented');
954
	}
955 956 957 958 959 960 961 962 963

	save(editors: IEditorIdentifier[], options?: ISaveEditorsOptions): Promise<boolean> {
		throw new Error('Method not implemented.');
	}

	saveAll(options?: ISaveEditorsOptions): Promise<boolean> {
		throw new Error('Method not implemented.');
	}

B
Benjamin Pasero 已提交
964 965 966 967 968
	revert(editors: IEditorIdentifier[], options?: IRevertOptions): Promise<boolean> {
		throw new Error('Method not implemented.');
	}

	revertAll(options?: IRevertAllEditorsOptions): Promise<boolean> {
969 970
		throw new Error('Method not implemented.');
	}
971 972
}

973 974
export class TestFileService implements IFileService {

B
Benjamin Pasero 已提交
975
	_serviceBrand: undefined;
976

M
Matt Bierner 已提交
977 978
	private readonly _onFileChanges: Emitter<FileChangesEvent>;
	private readonly _onAfterOperation: Emitter<FileOperationEvent>;
979

980
	readonly onWillActivateFileSystemProvider = Event.None;
981
	readonly onDidChangeFileSystemProviderCapabilities = Event.None;
982
	readonly onError: Event<Error> = Event.None;
983

984
	private content = 'Hello Html';
985
	private lastReadFileUri!: URI;
986

987 988 989 990 991
	constructor() {
		this._onFileChanges = new Emitter<FileChangesEvent>();
		this._onAfterOperation = new Emitter<FileOperationEvent>();
	}

B
Benjamin Pasero 已提交
992
	setContent(content: string): void {
993 994 995
		this.content = content;
	}

B
Benjamin Pasero 已提交
996
	getContent(): string {
997 998 999
		return this.content;
	}

B
Benjamin Pasero 已提交
1000
	getLastReadFileUri(): URI {
1001 1002 1003
		return this.lastReadFileUri;
	}

B
Benjamin Pasero 已提交
1004
	get onFileChanges(): Event<FileChangesEvent> {
1005 1006 1007
		return this._onFileChanges.event;
	}

B
Benjamin Pasero 已提交
1008
	fireFileChanges(event: FileChangesEvent): void {
1009 1010 1011
		this._onFileChanges.fire(event);
	}

B
Benjamin Pasero 已提交
1012
	get onAfterOperation(): Event<FileOperationEvent> {
1013 1014 1015
		return this._onAfterOperation.event;
	}

B
Benjamin Pasero 已提交
1016
	fireAfterOperation(event: FileOperationEvent): void {
1017 1018 1019
		this._onAfterOperation.fire(event);
	}

B
Benjamin Pasero 已提交
1020 1021 1022
	resolve(resource: URI, _options?: IResolveFileOptions): Promise<IFileStat>;
	resolve(resource: URI, _options: IResolveMetadataFileOptions): Promise<IFileStatWithMetadata>;
	resolve(resource: URI, _options?: IResolveFileOptions): Promise<IFileStat> {
B
Benjamin Pasero 已提交
1023
		return Promise.resolve({
1024 1025
			resource,
			etag: Date.now().toString(),
B
Benjamin Pasero 已提交
1026
			encoding: 'utf8',
B
Benjamin Pasero 已提交
1027
			mtime: Date.now(),
1028
			size: 42,
1029
			isFile: true,
1030
			isDirectory: false,
1031
			isSymbolicLink: false,
B
Benjamin Pasero 已提交
1032
			name: resources.basename(resource)
B
Benjamin Pasero 已提交
1033
		});
1034
	}
B
Benjamin Pasero 已提交
1035

B
Benjamin Pasero 已提交
1036 1037 1038 1039
	async resolveAll(toResolve: { resource: URI, options?: IResolveFileOptions }[]): Promise<IResolveFileResult[]> {
		const stats = await Promise.all(toResolve.map(resourceAndOption => this.resolve(resourceAndOption.resource, resourceAndOption.options)));

		return stats.map(stat => ({ stat, success: true }));
I
isidor 已提交
1040 1041
	}

B
Benjamin Pasero 已提交
1042 1043
	async exists(_resource: URI): Promise<boolean> {
		return true;
1044
	}
B
Benjamin Pasero 已提交
1045

1046
	readFile(resource: URI, options?: IReadFileOptions | undefined): Promise<IFileContent> {
1047 1048
		this.lastReadFileUri = resource;

1049
		return Promise.resolve({
B
Benjamin Pasero 已提交
1050
			resource: resource,
1051
			value: VSBuffer.fromString(this.content),
1052
			etag: 'index.txt',
B
Benjamin Pasero 已提交
1053 1054
			encoding: 'utf8',
			mtime: Date.now(),
1055
			ctime: Date.now(),
1056 1057
			name: resources.basename(resource),
			size: 1
E
Erich Gamma 已提交
1058
		});
1059
	}
E
Erich Gamma 已提交
1060

1061
	readFileStream(resource: URI, options?: IReadFileOptions | undefined): Promise<IFileStreamContent> {
1062 1063
		this.lastReadFileUri = resource;

1064
		return Promise.resolve({
A
Alex Dima 已提交
1065 1066
			resource: resource,
			value: {
1067
				on: (event: string, callback: Function): void => {
A
Alex Dima 已提交
1068
					if (event === 'data') {
1069
						callback(this.content);
A
Alex Dima 已提交
1070 1071 1072 1073
					}
					if (event === 'end') {
						callback();
					}
B
Benjamin Pasero 已提交
1074 1075 1076 1077
				},
				resume: () => { },
				pause: () => { },
				destroy: () => { }
A
Alex Dima 已提交
1078 1079 1080
			},
			etag: 'index.txt',
			encoding: 'utf8',
B
Benjamin Pasero 已提交
1081
			mtime: Date.now(),
1082
			ctime: Date.now(),
1083 1084
			size: 1,
			name: resources.basename(resource)
A
Alex Dima 已提交
1085
		});
1086 1087
	}

B
Benjamin Pasero 已提交
1088 1089 1090 1091
	async writeFile(resource: URI, bufferOrReadable: VSBuffer | VSBufferReadable, options?: IWriteFileOptions): Promise<IFileStatWithMetadata> {
		await timeout(0);

		return ({
1092 1093 1094
			resource,
			etag: 'index.txt',
			mtime: Date.now(),
1095
			ctime: Date.now(),
1096
			size: 42,
1097
			isFile: true,
1098
			isDirectory: false,
1099
			isSymbolicLink: false,
B
Benjamin Pasero 已提交
1100
			name: resources.basename(resource)
B
Benjamin Pasero 已提交
1101
		});
1102
	}
D
Daniel Imms 已提交
1103

B
Benjamin Pasero 已提交
1104
	move(_source: URI, _target: URI, _overwrite?: boolean): Promise<IFileStatWithMetadata> {
1105
		return Promise.resolve(null!);
1106
	}
D
Daniel Imms 已提交
1107

B
Benjamin Pasero 已提交
1108
	copy(_source: URI, _target: URI, _overwrite?: boolean): Promise<IFileStatWithMetadata> {
1109
		throw new Error('not implemented');
1110
	}
D
Daniel Imms 已提交
1111

1112
	createFile(_resource: URI, _content?: VSBuffer | VSBufferReadable, _options?: ICreateFileOptions): Promise<IFileStatWithMetadata> {
1113
		throw new Error('not implemented');
E
Erich Gamma 已提交
1114
	}
1115

1116
	createFolder(_resource: URI): Promise<IFileStatWithMetadata> {
1117
		throw new Error('not implemented');
1118 1119
	}

1120 1121
	onDidChangeFileSystemProviderRegistrations = Event.None;

1122 1123 1124 1125 1126 1127
	private providers = new Map<string, IFileSystemProvider>();

	registerProvider(scheme: string, provider: IFileSystemProvider) {
		this.providers.set(scheme, provider);

		return toDisposable(() => this.providers.delete(scheme));
1128 1129
	}

1130 1131
	activateProvider(_scheme: string): Promise<void> {
		throw new Error('not implemented');
1132 1133
	}

1134
	canHandleResource(resource: URI): boolean {
1135
		return resource.scheme === 'file' || this.providers.has(resource.scheme);
1136 1137
	}

1138 1139 1140 1141 1142 1143 1144
	hasCapability(resource: URI, capability: FileSystemProviderCapabilities): boolean {
		if (capability === FileSystemProviderCapabilities.PathCaseSensitive && isLinux) {
			return true;
		}

		return false;
	}
1145

J
Johannes Rieken 已提交
1146
	del(_resource: URI, _options?: { useTrash?: boolean, recursive?: boolean }): Promise<void> {
1147
		return Promise.resolve();
1148 1149
	}

1150 1151
	watch(_resource: URI): IDisposable {
		return Disposable.None;
1152 1153
	}

1154 1155
	getWriteEncoding(_resource: URI): IResourceEncoding {
		return { encoding: 'utf8', hasBOM: false };
1156
	}
D
Daniel Imms 已提交
1157

1158
	dispose(): void {
E
Erich Gamma 已提交
1159
	}
1160
}
1161

1162
export class TestBackupFileService implements IBackupFileService {
B
Benjamin Pasero 已提交
1163
	_serviceBrand: undefined;
1164

B
Benjamin Pasero 已提交
1165
	hasBackups(): Promise<boolean> {
B
Benjamin Pasero 已提交
1166
		return Promise.resolve(false);
1167 1168
	}

B
Benjamin Pasero 已提交
1169
	hasBackup(_resource: URI): Promise<boolean> {
B
Benjamin Pasero 已提交
1170
		return Promise.resolve(false);
1171 1172
	}

B
Benjamin Pasero 已提交
1173
	hasBackupSync(resource: URI, versionId?: number): boolean {
1174 1175 1176
		return false;
	}

B
Benjamin Pasero 已提交
1177 1178 1179 1180 1181
	async loadBackupResource(resource: URI): Promise<URI | undefined> {
		const hasBackup = await this.hasBackup(resource);
		if (hasBackup) {
			return this.toBackupResource(resource);
		}
B
Benjamin Pasero 已提交
1182

B
Benjamin Pasero 已提交
1183
		return undefined;
B
Benjamin Pasero 已提交
1184 1185
	}

B
Benjamin Pasero 已提交
1186
	registerResourceForBackup(_resource: URI): Promise<void> {
B
Benjamin Pasero 已提交
1187
		return Promise.resolve();
D
Daniel Imms 已提交
1188 1189
	}

B
Benjamin Pasero 已提交
1190
	deregisterResourceForBackup(_resource: URI): Promise<void> {
B
Benjamin Pasero 已提交
1191
		return Promise.resolve();
D
Daniel Imms 已提交
1192 1193
	}

B
Benjamin Pasero 已提交
1194
	toBackupResource(_resource: URI): URI {
1195
		throw new Error('not implemented');
D
Daniel Imms 已提交
1196
	}
1197

B
Benjamin Pasero 已提交
1198
	backupResource<T extends object>(_resource: URI, _content: ITextSnapshot, versionId?: number, meta?: T): Promise<void> {
B
Benjamin Pasero 已提交
1199
		return Promise.resolve();
1200 1201
	}

B
Benjamin Pasero 已提交
1202
	getWorkspaceFileBackups(): Promise<URI[]> {
B
Benjamin Pasero 已提交
1203
		return Promise.resolve([]);
1204 1205
	}

B
Benjamin Pasero 已提交
1206
	parseBackupContent(textBufferFactory: ITextBufferFactory): string {
1207 1208 1209 1210
		const textBuffer = textBufferFactory.create(DefaultEndOfLine.LF);
		const lineCount = textBuffer.getLineCount();
		const range = new Range(1, 1, lineCount, textBuffer.getLineLength(lineCount) + 1);
		return textBuffer.getValueInRange(range, EndOfLinePreference.TextDefined);
1211 1212
	}

B
Benjamin Pasero 已提交
1213
	resolveBackupContent<T extends object>(_backup: URI): Promise<IResolvedBackup<T>> {
1214
		throw new Error('not implemented');
1215 1216
	}

B
Benjamin Pasero 已提交
1217
	discardResourceBackup(_resource: URI): Promise<void> {
B
Benjamin Pasero 已提交
1218
		return Promise.resolve();
1219 1220
	}

B
Benjamin Pasero 已提交
1221
	discardAllWorkspaceBackups(): Promise<void> {
B
Benjamin Pasero 已提交
1222
		return Promise.resolve();
1223
	}
1224
}
D
Daniel Imms 已提交
1225

B
Benjamin Pasero 已提交
1226
export class TestCodeEditorService implements ICodeEditorService {
1227
	_serviceBrand: undefined;
B
Benjamin Pasero 已提交
1228 1229 1230 1231 1232

	onCodeEditorAdd: Event<ICodeEditor> = Event.None;
	onCodeEditorRemove: Event<ICodeEditor> = Event.None;
	onDiffEditorAdd: Event<IDiffEditor> = Event.None;
	onDiffEditorRemove: Event<IDiffEditor> = Event.None;
A
Alex Dima 已提交
1233
	onDidChangeTransientModelProperty: Event<ITextModel> = Event.None;
B
Benjamin Pasero 已提交
1234

1235 1236
	addCodeEditor(_editor: ICodeEditor): void { }
	removeCodeEditor(_editor: ICodeEditor): void { }
B
Benjamin Pasero 已提交
1237
	listCodeEditors(): ICodeEditor[] { return []; }
1238 1239
	addDiffEditor(_editor: IDiffEditor): void { }
	removeDiffEditor(_editor: IDiffEditor): void { }
B
Benjamin Pasero 已提交
1240
	listDiffEditors(): IDiffEditor[] { return []; }
1241
	getFocusedCodeEditor(): ICodeEditor | null { return null; }
1242 1243 1244 1245 1246
	registerDecorationType(_key: string, _options: IDecorationRenderOptions, _parentTypeKey?: string): void { }
	removeDecorationType(_key: string): void { }
	resolveDecorationOptions(_typeKey: string, _writable: boolean): IModelDecorationOptions { return Object.create(null); }
	setTransientModelProperty(_model: ITextModel, _key: string, _value: any): void { }
	getTransientModelProperty(_model: ITextModel, _key: string) { }
1247 1248
	getActiveCodeEditor(): ICodeEditor | null { return null; }
	openCodeEditor(_input: IResourceInput, _source: ICodeEditor, _sideBySide?: boolean): Promise<ICodeEditor | null> { return Promise.resolve(null); }
B
Benjamin Pasero 已提交
1249 1250
}

1251 1252
export class TestLifecycleService implements ILifecycleService {

B
Benjamin Pasero 已提交
1253
	_serviceBrand: undefined;
1254

B
Benjamin Pasero 已提交
1255 1256
	phase!: LifecyclePhase;
	startupKind!: StartupKind;
1257

1258 1259 1260
	private readonly _onBeforeShutdown = new Emitter<BeforeShutdownEvent>();
	private readonly _onWillShutdown = new Emitter<WillShutdownEvent>();
	private readonly _onShutdown = new Emitter<void>();
1261

J
Johannes Rieken 已提交
1262
	when(): Promise<void> {
B
Benjamin Pasero 已提交
1263
		return Promise.resolve();
B
Benjamin Pasero 已提交
1264
	}
1265

B
Benjamin Pasero 已提交
1266
	fireShutdown(reason = ShutdownReason.QUIT): void {
1267
		this._onWillShutdown.fire({
1268 1269 1270
			join: () => { },
			reason
		});
1271 1272
	}

B
Benjamin Pasero 已提交
1273
	fireWillShutdown(event: BeforeShutdownEvent): void {
1274 1275 1276
		this._onBeforeShutdown.fire(event);
	}

B
Benjamin Pasero 已提交
1277
	get onBeforeShutdown(): Event<BeforeShutdownEvent> {
1278
		return this._onBeforeShutdown.event;
1279 1280
	}

B
Benjamin Pasero 已提交
1281
	get onWillShutdown(): Event<WillShutdownEvent> {
1282 1283 1284
		return this._onWillShutdown.event;
	}

B
Benjamin Pasero 已提交
1285
	get onShutdown(): Event<void> {
1286 1287
		return this._onShutdown.event;
	}
1288 1289
}

S
rename  
Sandeep Somavarapu 已提交
1290
export class TestTextResourceConfigurationService implements ITextResourceConfigurationService {
1291

1292
	_serviceBrand: undefined;
1293 1294 1295 1296

	constructor(private configurationService = new TestConfigurationService()) {
	}

B
Benjamin Pasero 已提交
1297
	onDidChangeConfiguration() {
1298 1299 1300
		return { dispose() { } };
	}

1301
	getValue<T>(resource: URI, arg2?: any, arg3?: any): T {
1302 1303
		const position: IPosition | null = EditorPosition.isIPosition(arg2) ? arg2 : null;
		const section: string | undefined = position ? (typeof arg3 === 'string' ? arg3 : undefined) : (typeof arg2 === 'string' ? arg2 : undefined);
1304
		return this.configurationService.getValue(section, { resource });
1305
	}
1306 1307 1308 1309

	updateValue(resource: URI, key: string, value: any, configurationTarget?: ConfigurationTarget): Promise<void> {
		return this.configurationService.updateValue(key, value);
	}
B
Benjamin Pasero 已提交
1310 1311
}

S
Sandeep Somavarapu 已提交
1312 1313
export class TestTextResourcePropertiesService implements ITextResourcePropertiesService {

1314
	_serviceBrand: undefined;
S
Sandeep Somavarapu 已提交
1315 1316

	constructor(
1317
		@IConfigurationService private readonly configurationService: IConfigurationService,
S
Sandeep Somavarapu 已提交
1318 1319 1320
	) {
	}

1321 1322 1323 1324
	getEOL(resource: URI, language?: string): string {
		const eol = this.configurationService.getValue<string>('files.eol', { overrideIdentifier: language, resource });
		if (eol && eol !== 'auto') {
			return eol;
S
Sandeep Somavarapu 已提交
1325 1326 1327 1328 1329 1330
		}
		return (isLinux || isMacintosh) ? '\n' : '\r\n';
	}
}


1331
export class TestSharedProcessService implements ISharedProcessService {
1332

1333
	_serviceBrand: undefined;
1334

1335 1336 1337
	getChannel(channelName: string): any {
		return undefined;
	}
1338

1339
	registerChannel(channelName: string, channel: any): void { }
1340 1341 1342

	async toggleSharedProcessWindow(): Promise<void> { }
	async whenSharedProcessReady(): Promise<void> { }
1343 1344
}

1345 1346 1347 1348 1349 1350 1351
export class RemoteFileSystemProvider implements IFileSystemProvider {

	constructor(private readonly diskFileSystemProvider: IFileSystemProvider, private readonly remoteAuthority: string) { }

	readonly capabilities: FileSystemProviderCapabilities = this.diskFileSystemProvider.capabilities;
	readonly onDidChangeCapabilities: Event<void> = this.diskFileSystemProvider.onDidChangeCapabilities;

M
Matt Bierner 已提交
1352 1353 1354 1355 1356 1357
	readonly onDidChangeFile: Event<readonly IFileChange[]> = Event.map(this.diskFileSystemProvider.onDidChangeFile, changes => changes.map((c): IFileChange => {
		return {
			type: c.type,
			resource: c.resource.with({ scheme: Schemas.vscodeRemote, authority: this.remoteAuthority }),
		};
	}));
1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376
	watch(resource: URI, opts: IWatchOptions): IDisposable { return this.diskFileSystemProvider.watch(this.toFileResource(resource), opts); }

	stat(resource: URI): Promise<IStat> { return this.diskFileSystemProvider.stat(this.toFileResource(resource)); }
	mkdir(resource: URI): Promise<void> { return this.diskFileSystemProvider.mkdir(this.toFileResource(resource)); }
	readdir(resource: URI): Promise<[string, FileType][]> { return this.diskFileSystemProvider.readdir(this.toFileResource(resource)); }
	delete(resource: URI, opts: FileDeleteOptions): Promise<void> { return this.diskFileSystemProvider.delete(this.toFileResource(resource), opts); }

	rename(from: URI, to: URI, opts: FileOverwriteOptions): Promise<void> { return this.diskFileSystemProvider.rename(this.toFileResource(from), this.toFileResource(to), opts); }
	copy(from: URI, to: URI, opts: FileOverwriteOptions): Promise<void> { return this.diskFileSystemProvider.copy!(this.toFileResource(from), this.toFileResource(to), opts); }

	readFile(resource: URI): Promise<Uint8Array> { return this.diskFileSystemProvider.readFile!(this.toFileResource(resource)); }
	writeFile(resource: URI, content: Uint8Array, opts: FileWriteOptions): Promise<void> { return this.diskFileSystemProvider.writeFile!(this.toFileResource(resource), content, opts); }

	open(resource: URI, opts: FileOpenOptions): Promise<number> { return this.diskFileSystemProvider.open!(this.toFileResource(resource), opts); }
	close(fd: number): Promise<void> { return this.diskFileSystemProvider.close!(fd); }
	read(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise<number> { return this.diskFileSystemProvider.read!(fd, pos, data, offset, length); }
	write(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise<number> { return this.diskFileSystemProvider.write!(fd, pos, data, offset, length); }

	private toFileResource(resource: URI): URI { return resource.with({ scheme: Schemas.file, authority: '' }); }
J
Joao Moreno 已提交
1377
}
1378 1379

export const productService: IProductService = { _serviceBrand: undefined, ...product };
1380 1381 1382 1383 1384

export class TestHostService implements IHostService {

	_serviceBrand: undefined;

1385 1386 1387
	readonly hasFocus: boolean = true;
	readonly onDidChangeFocus: Event<boolean> = Event.None;

1388 1389
	async restart(): Promise<void> { }
	async reload(): Promise<void> { }
1390

1391 1392
	async focus(): Promise<void> { }

1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417
	async openWindow(arg1?: IOpenEmptyWindowOptions | IWindowOpenable[], arg2?: IOpenWindowOptions): Promise<void> { }

	async toggleFullScreen(): Promise<void> { }
}

export class TestElectronService implements IElectronService {
	_serviceBrand: undefined;

	onWindowOpen: Event<number> = Event.None;
	onWindowMaximize: Event<number> = Event.None;
	onWindowUnmaximize: Event<number> = Event.None;
	onWindowFocus: Event<number> = Event.None;
	onWindowBlur: Event<number> = Event.None;

	windowCount = Promise.resolve(1);
	getWindowCount(): Promise<number> { return this.windowCount; }

	async getWindows(): Promise<IOpenedWindow[]> { return []; }
	async getActiveWindowId(): Promise<number | undefined> { return undefined; }

	openWindow(options?: IOpenEmptyWindowOptions): Promise<void>;
	openWindow(toOpen: IWindowOpenable[], options?: IOpenWindowOptions): Promise<void>;
	openWindow(arg1?: IOpenEmptyWindowOptions | IWindowOpenable[], arg2?: IOpenWindowOptions): Promise<void> {
		throw new Error('Method not implemented.');
	}
1418

1419
	async toggleFullScreen(): Promise<void> { }
1420 1421 1422 1423 1424 1425 1426
	async handleTitleDoubleClick(): Promise<void> { }
	async isMaximized(): Promise<boolean> { return true; }
	async maximizeWindow(): Promise<void> { }
	async unmaximizeWindow(): Promise<void> { }
	async minimizeWindow(): Promise<void> { }
	async isWindowFocused(): Promise<boolean> { return true; }
	async focusWindow(options?: { windowId?: number | undefined; } | undefined): Promise<void> { }
1427 1428 1429
	async showMessageBox(options: Electron.MessageBoxOptions): Promise<Electron.MessageBoxReturnValue> { throw new Error('Method not implemented.'); }
	async showSaveDialog(options: Electron.SaveDialogOptions): Promise<Electron.SaveDialogReturnValue> { throw new Error('Method not implemented.'); }
	async showOpenDialog(options: Electron.OpenDialogOptions): Promise<Electron.OpenDialogReturnValue> { throw new Error('Method not implemented.'); }
1430 1431 1432 1433 1434 1435 1436 1437
	async pickFileFolderAndOpen(options: INativeOpenDialogOptions): Promise<void> { }
	async pickFileAndOpen(options: INativeOpenDialogOptions): Promise<void> { }
	async pickFolderAndOpen(options: INativeOpenDialogOptions): Promise<void> { }
	async pickWorkspaceAndOpen(options: INativeOpenDialogOptions): Promise<void> { }
	async showItemInFolder(path: string): Promise<void> { }
	async setRepresentedFilename(path: string): Promise<void> { }
	async setDocumentEdited(edited: boolean): Promise<void> { }
	async openExternal(url: string): Promise<boolean> { return false; }
1438
	async updateTouchBar(): Promise<void> { }
1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452
	async newWindowTab(): Promise<void> { }
	async showPreviousWindowTab(): Promise<void> { }
	async showNextWindowTab(): Promise<void> { }
	async moveWindowTabToNewWindow(): Promise<void> { }
	async mergeAllWindowTabs(): Promise<void> { }
	async toggleWindowTabsBar(): Promise<void> { }
	async relaunch(options?: { addArgs?: string[] | undefined; removeArgs?: string[] | undefined; } | undefined): Promise<void> { }
	async reload(): Promise<void> { }
	async closeWindow(): Promise<void> { }
	async quit(): Promise<void> { }
	async openDevTools(options?: Electron.OpenDevToolsOptions | undefined): Promise<void> { }
	async toggleDevTools(): Promise<void> { }
	async startCrashReporter(options: Electron.CrashReporterStartOptions): Promise<void> { }
	async resolveProxy(url: string): Promise<string | undefined> { return undefined; }
1453
}
1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517

export class TestBackupMainService implements IBackupMainService {
	_serviceBrand: undefined;

	isHotExitEnabled(): boolean {
		throw new Error('Method not implemented.');
	}

	getWorkspaceBackups(): IWorkspaceBackupInfo[] {
		throw new Error('Method not implemented.');
	}

	getFolderBackupPaths(): URI[] {
		throw new Error('Method not implemented.');
	}

	getEmptyWindowBackupPaths(): IEmptyWindowBackupInfo[] {
		throw new Error('Method not implemented.');
	}

	registerWorkspaceBackupSync(workspace: IWorkspaceBackupInfo, migrateFrom?: string | undefined): string {
		throw new Error('Method not implemented.');
	}

	registerFolderBackupSync(folderUri: URI): string {
		throw new Error('Method not implemented.');
	}

	registerEmptyWindowBackupSync(backupFolder?: string | undefined, remoteAuthority?: string | undefined): string {
		throw new Error('Method not implemented.');
	}

	unregisterWorkspaceBackupSync(workspace: IWorkspaceIdentifier): void {
		throw new Error('Method not implemented.');
	}

	unregisterFolderBackupSync(folderUri: URI): void {
		throw new Error('Method not implemented.');
	}

	unregisterEmptyWindowBackupSync(backupFolder: string): void {
		throw new Error('Method not implemented.');
	}
}

export class TestDialogMainService implements IDialogMainService {
	_serviceBrand: undefined;

	pickFileFolder(options: INativeOpenDialogOptions, window?: Electron.BrowserWindow | undefined): Promise<string[] | undefined> {
		throw new Error('Method not implemented.');
	}

	pickFolder(options: INativeOpenDialogOptions, window?: Electron.BrowserWindow | undefined): Promise<string[] | undefined> {
		throw new Error('Method not implemented.');
	}

	pickFile(options: INativeOpenDialogOptions, window?: Electron.BrowserWindow | undefined): Promise<string[] | undefined> {
		throw new Error('Method not implemented.');
	}

	pickWorkspace(options: INativeOpenDialogOptions, window?: Electron.BrowserWindow | undefined): Promise<string[] | undefined> {
		throw new Error('Method not implemented.');
	}

1518
	showMessageBox(options: Electron.MessageBoxOptions, window?: Electron.BrowserWindow | undefined): Promise<Electron.MessageBoxReturnValue> {
1519 1520 1521
		throw new Error('Method not implemented.');
	}

1522
	showSaveDialog(options: Electron.SaveDialogOptions, window?: Electron.BrowserWindow | undefined): Promise<Electron.SaveDialogReturnValue> {
1523 1524 1525
		throw new Error('Method not implemented.');
	}

1526
	showOpenDialog(options: Electron.OpenDialogOptions, window?: Electron.BrowserWindow | undefined): Promise<Electron.OpenDialogReturnValue> {
1527 1528 1529
		throw new Error('Method not implemented.');
	}
}
1530

1531
export class TestWorkingCopyService extends WorkingCopyService { }
1532 1533 1534 1535 1536 1537 1538

export class TestFilesConfigurationService extends FilesConfigurationService {

	onFilesConfigurationChange(configuration: any): void {
		super.onFilesConfigurationChange(configuration);
	}
}