workbenchTestServices.ts 50.6 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 15
import { ConfirmResult, IEditorInputWithOptions, CloseDirection, IEditorIdentifier, IUntitledResourceInput, IResourceDiffInput, IResourceSideBySideInput, IEditorInput, IEditor, IEditorCloseEvent, IEditorPartOptions } from 'vs/workbench/common/editor';
import { IEditorOpeningEvent, EditorServiceImpl, IEditorGroupView } 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 } from 'vs/workbench/services/backup/common/backup';
19
import { IConfigurationService } 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';
J
Johannes Rieken 已提交
24
import { IUntitledEditorService, UntitledEditorService } from 'vs/workbench/services/untitled/common/untitledEditorService';
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';
J
Johannes Rieken 已提交
33 34 35
import { parseArgs } from 'vs/platform/environment/node/argv';
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 { IWindowsService, IWindowService, INativeOpenDialogOptions, IEnterWorkspaceResult, IMessageBoxResult, MenuBarVisibility, IURIToOpen, IOpenSettings, IWindowConfiguration } 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';
B
Benjamin Pasero 已提交
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';
M
Martin Aeschlimann 已提交
45
import { IRecentlyOpened, IRecent } from 'vs/platform/history/common/history';
S
Sandeep Somavarapu 已提交
46
import { ITextResourceConfigurationService, ITextResourcePropertiesService } from 'vs/editor/common/services/resourceConfiguration';
47
import { IPosition, Position as EditorPosition } from 'vs/editor/common/core/position';
B
Benjamin Pasero 已提交
48
import { IMenuService, MenuId, IMenu, ISerializableCommandAction } from 'vs/platform/actions/common/actions';
I
isidor 已提交
49
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
B
Benjamin Pasero 已提交
50
import { MockContextKeyService, MockKeybindingService } from 'vs/platform/keybinding/test/common/mockKeybindingService';
51
import { ITextBufferFactory, DefaultEndOfLine, EndOfLinePreference, IModelDecorationOptions, ITextModel, ITextSnapshot } from 'vs/editor/common/model';
52
import { Range } from 'vs/editor/common/core/range';
M
Martin Aeschlimann 已提交
53
import { IConfirmation, IConfirmationResult, IDialogService, IDialogOptions, IPickAndOpenOptions, ISaveDialogOptions, IOpenDialogOptions, IFileDialogService } from 'vs/platform/dialogs/common/dialogs';
54 55
import { INotificationService } from 'vs/platform/notification/common/notification';
import { TestNotificationService } from 'vs/platform/notification/test/common/testNotificationService';
56
import { IExtensionService, NullExtensionService } from 'vs/workbench/services/extensions/common/extensions';
B
Benjamin Pasero 已提交
57
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
B
Benjamin Pasero 已提交
58
import { IDecorationsService, IResourceDecorationChangeEvent, IDecoration, IDecorationData, IDecorationsProvider } from 'vs/workbench/services/decorations/browser/decorations';
J
Joao Moreno 已提交
59
import { IDisposable, toDisposable, Disposable } from 'vs/base/common/lifecycle';
60
import { IEditorGroupsService, IEditorGroup, GroupsOrder, GroupsArrangement, GroupDirection, IAddGroupOptions, IMergeGroupOptions, IMoveEditorOptions, ICopyEditorOptions, IEditorReplacement, IGroupChangeEvent, EditorsOrder, IFindGroupScope, EditorGroupLayout, ICloseEditorOptions } from 'vs/workbench/services/editor/common/editorGroupsService';
61
import { IEditorService, IOpenEditorOverrideHandler, IVisibleEditor } from 'vs/workbench/services/editor/common/editorService';
B
Benjamin Pasero 已提交
62 63 64
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 已提交
65
import { EditorGroup } from 'vs/workbench/common/editor/editorGroup';
66
import { Dimension } from 'vs/base/browser/dom';
67
import { ILogService, LogLevel } from 'vs/platform/log/common/log';
I
isidor 已提交
68
import { ILabelService } from 'vs/platform/label/common/label';
69
import { timeout } from 'vs/base/common/async';
70
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
71
import { ViewletDescriptor, Viewlet } from 'vs/workbench/browser/viewlet';
72
import { IViewlet } from 'vs/workbench/common/viewlet';
73
import { IStorageService, InMemoryStorageService } from 'vs/platform/storage/common/storage';
S
Sandeep Somavarapu 已提交
74
import { isLinux, isMacintosh } from 'vs/base/common/platform';
I
isidor 已提交
75
import { LabelService } from 'vs/workbench/services/label/common/labelService';
B
Benjamin Pasero 已提交
76
import { IDimension } from 'vs/platform/layout/browser/layoutService';
77
import { Part } from 'vs/workbench/browser/part';
78 79 80
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';
81
import { ISharedProcessService } from 'vs/platform/ipc/electron-browser/sharedProcessService';
82 83
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
import { WorkbenchEnvironmentService } from 'vs/workbench/services/environment/node/environmentService';
84
import { VSBuffer, VSBufferReadable } from 'vs/base/common/buffer';
B
Benjamin Pasero 已提交
85
import { BrowserTextFileService } from 'vs/workbench/services/textfile/browser/textFileService';
B
Benjamin Pasero 已提交
86

S
Sandeep Somavarapu 已提交
87
export function createFileInput(instantiationService: IInstantiationService, resource: URI): FileEditorInput {
R
Rob Lourens 已提交
88
	return instantiationService.createInstance(FileEditorInput, resource, undefined);
S
Sandeep Somavarapu 已提交
89 90
}

91
export const TestEnvironmentService = new WorkbenchEnvironmentService(parseArgs(process.argv) as IWindowConfiguration, process.execPath);
92

93
export class TestContextService implements IWorkspaceContextService {
94
	public _serviceBrand: any;
E
Erich Gamma 已提交
95

S
Sandeep Somavarapu 已提交
96
	private workspace: Workspace;
E
Erich Gamma 已提交
97 98
	private options: any;

M
Matt Bierner 已提交
99 100 101
	private readonly _onDidChangeWorkspaceName: Emitter<void>;
	private readonly _onDidChangeWorkspaceFolders: Emitter<IWorkspaceFoldersChangeEvent>;
	private readonly _onDidChangeWorkbenchState: Emitter<WorkbenchState>;
102

103
	constructor(workspace: any = TestWorkspace, options: any = null) {
E
Erich Gamma 已提交
104
		this.workspace = workspace;
105
		this.options = options || Object.create(null);
106
		this._onDidChangeWorkspaceFolders = new Emitter<IWorkspaceFoldersChangeEvent>();
S
Sandeep Somavarapu 已提交
107
		this._onDidChangeWorkbenchState = new Emitter<WorkbenchState>();
108 109
	}

S
Sandeep Somavarapu 已提交
110 111 112 113
	public get onDidChangeWorkspaceName(): Event<void> {
		return this._onDidChangeWorkspaceName.event;
	}

114
	public get onDidChangeWorkspaceFolders(): Event<IWorkspaceFoldersChangeEvent> {
S
Sandeep Somavarapu 已提交
115
		return this._onDidChangeWorkspaceFolders.event;
116 117
	}

118 119 120 121
	public get onDidChangeWorkbenchState(): Event<WorkbenchState> {
		return this._onDidChangeWorkbenchState.event;
	}

S
Sandeep Somavarapu 已提交
122
	public getFolders(): IWorkspaceFolder[] {
S
Sandeep Somavarapu 已提交
123
		return this.workspace ? this.workspace.folders : [];
E
Erich Gamma 已提交
124 125
	}

126
	public getWorkbenchState(): WorkbenchState {
B
Benjamin Pasero 已提交
127 128 129 130 131
		if (this.workspace.configuration) {
			return WorkbenchState.WORKSPACE;
		}

		if (this.workspace.folders.length) {
132
			return WorkbenchState.FOLDER;
133
		}
B
Benjamin Pasero 已提交
134

135
		return WorkbenchState.EMPTY;
S
Sandeep Somavarapu 已提交
136 137
	}

138 139 140 141
	getCompleteWorkspace(): Promise<IWorkbenchWorkspace> {
		return Promise.resolve(this.getWorkspace());
	}

142
	public getWorkspace(): IWorkbenchWorkspace {
B
Benjamin Pasero 已提交
143
		return this.workspace;
144 145
	}

146
	public getWorkspaceFolder(resource: URI): IWorkspaceFolder | null {
S
Sandeep Somavarapu 已提交
147
		return this.workspace.getFolder(resource);
148 149
	}

D
Daniel Imms 已提交
150 151 152 153
	public setWorkspace(workspace: any): void {
		this.workspace = workspace;
	}

E
Erich Gamma 已提交
154 155 156 157 158 159 160 161 162 163
	public getOptions() {
		return this.options;
	}

	public updateOptions() {

	}

	public isInsideWorkspace(resource: URI): boolean {
		if (resource && this.workspace) {
164
			return resources.isEqualOrParent(resource, this.workspace.folders[0].uri);
E
Erich Gamma 已提交
165 166 167 168 169 170
		}

		return false;
	}

	public toResource(workspaceRelativePath: string): URI {
171
		return URI.file(join('C:\\', workspaceRelativePath));
E
Erich Gamma 已提交
172
	}
173

174
	public isCurrentWorkspace(workspaceIdentifier: ISingleFolderWorkspaceIdentifier | IWorkspaceIdentifier): boolean {
175
		return isSingleFolderWorkspaceIdentifier(workspaceIdentifier) && resources.isEqual(this.workspace.folders[0].uri, workspaceIdentifier);
176
	}
E
Erich Gamma 已提交
177 178
}

B
Benjamin Pasero 已提交
179
export class TestTextFileService extends BrowserTextFileService {
180 181
	public cleanupBackupsBeforeShutdownCalled: boolean;

M
Martin Aeschlimann 已提交
182
	private promptPath: URI;
183
	private confirmResult: ConfirmResult;
184
	private resolveTextContentError: FileOperationError | null;
A
Alex Dima 已提交
185 186

	constructor(
187
		@IWorkspaceContextService contextService: IWorkspaceContextService,
188
		@IFileService protected fileService: IFileService,
189
		@IUntitledEditorService untitledEditorService: IUntitledEditorService,
190
		@ILifecycleService lifecycleService: ILifecycleService,
191
		@IInstantiationService instantiationService: IInstantiationService,
192 193 194
		@IConfigurationService configurationService: IConfigurationService,
		@IModeService modeService: IModeService,
		@IModelService modelService: IModelService,
195
		@IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService,
196
		@INotificationService notificationService: INotificationService,
197
		@IBackupFileService backupFileService: IBackupFileService,
198
		@IWindowsService windowsService: IWindowsService,
I
isidor 已提交
199
		@IHistoryService historyService: IHistoryService,
B
Benjamin Pasero 已提交
200
		@IContextKeyService contextKeyService: IContextKeyService,
201 202
		@IDialogService dialogService: IDialogService,
		@IFileDialogService fileDialogService: IFileDialogService,
B
Benjamin Pasero 已提交
203 204
		@IEditorService editorService: IEditorService,
		@ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService
A
Alex Dima 已提交
205
	) {
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222
		super(
			contextService,
			fileService,
			untitledEditorService,
			lifecycleService,
			instantiationService,
			configurationService,
			modeService,
			modelService,
			environmentService,
			notificationService,
			backupFileService,
			windowsService,
			historyService,
			contextKeyService,
			dialogService,
			fileDialogService,
B
Benjamin Pasero 已提交
223 224
			editorService,
			textResourceConfigurationService
225
		);
A
Alex Dima 已提交
226
	}
227

M
Martin Aeschlimann 已提交
228
	public setPromptPath(path: URI): void {
229 230 231 232 233 234 235
		this.promptPath = path;
	}

	public setConfirmResult(result: ConfirmResult): void {
		this.confirmResult = result;
	}

236
	public setResolveTextContentErrorOnce(error: FileOperationError): void {
237 238 239
		this.resolveTextContentError = error;
	}

240
	public readStream(resource: URI, options?: IReadTextFileOptions): Promise<ITextFileStreamContent> {
241 242 243 244
		if (this.resolveTextContentError) {
			const error = this.resolveTextContentError;
			this.resolveTextContentError = null;

B
Benjamin Pasero 已提交
245
			return Promise.reject(error);
246 247
		}

B
Benjamin Pasero 已提交
248
		return this.fileService.readFileStream(resource, options).then(async (content): Promise<ITextFileStreamContent> => {
249
			return {
250
				resource: content.resource,
251 252 253
				name: content.name,
				mtime: content.mtime,
				etag: content.etag,
B
Benjamin Pasero 已提交
254 255 256
				encoding: 'utf8',
				value: await createTextBufferFactoryFromStream(content.value),
				size: 10
257 258 259
			};
		});
	}
260

J
Johannes Rieken 已提交
261
	public promptForPath(_resource: URI, _defaultPath: URI): Promise<URI> {
B
Benjamin Pasero 已提交
262
		return Promise.resolve(this.promptPath);
263 264
	}

J
Johannes Rieken 已提交
265
	public confirmSave(_resources?: URI[]): Promise<ConfirmResult> {
B
Benjamin Pasero 已提交
266
		return Promise.resolve(this.confirmResult);
267
	}
D
Daniel Imms 已提交
268

B
Benjamin Pasero 已提交
269 270 271 272
	public confirmOverwrite(_resource: URI): Promise<boolean> {
		return Promise.resolve(true);
	}

273 274
	public onFilesConfigurationChange(configuration: any): void {
		super.onFilesConfigurationChange(configuration);
275 276
	}

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

283
export function workbenchInstantiationService(): IInstantiationService {
284
	let instantiationService = new TestInstantiationService(new ServiceCollection([ILifecycleService, new TestLifecycleService()]));
285
	instantiationService.stub(IEnvironmentService, TestEnvironmentService);
I
isidor 已提交
286
	instantiationService.stub(IContextKeyService, <IContextKeyService>instantiationService.createInstance(MockContextKeyService));
I
isidor 已提交
287 288
	const workspaceContextService = new TestContextService(TestWorkspace);
	instantiationService.stub(IWorkspaceContextService, workspaceContextService);
289 290 291
	const configService = new TestConfigurationService();
	instantiationService.stub(IConfigurationService, configService);
	instantiationService.stub(ITextResourceConfigurationService, new TestTextResourceConfigurationService(configService));
292
	instantiationService.stub(IUntitledEditorService, instantiationService.createInstance(UntitledEditorService));
293
	instantiationService.stub(IStorageService, new TestStorageService());
294
	instantiationService.stub(IWorkbenchLayoutService, new TestLayoutService());
J
Johannes Rieken 已提交
295
	instantiationService.stub(IModeService, instantiationService.createInstance(ModeServiceImpl));
B
Benjamin Pasero 已提交
296
	instantiationService.stub(IHistoryService, new TestHistoryService());
S
Sandeep Somavarapu 已提交
297
	instantiationService.stub(ITextResourcePropertiesService, new TestTextResourcePropertiesService(configService));
S
Sandeep Somavarapu 已提交
298
	instantiationService.stub(IModelService, instantiationService.createInstance(ModelServiceImpl));
299
	instantiationService.stub(IFileService, new TestFileService());
300
	instantiationService.stub(IBackupFileService, new TestBackupFileService());
301
	instantiationService.stub(ITelemetryService, NullTelemetryService);
302
	instantiationService.stub(INotificationService, new TestNotificationService());
B
Benjamin Pasero 已提交
303
	instantiationService.stub(IUntitledEditorService, instantiationService.createInstance(UntitledEditorService));
304
	instantiationService.stub(IWindowService, new TestWindowService());
B
Benjamin Pasero 已提交
305 306 307 308
	instantiationService.stub(IMenuService, new TestMenuService());
	instantiationService.stub(IKeybindingService, new MockKeybindingService());
	instantiationService.stub(IDecorationsService, new TestDecorationsService());
	instantiationService.stub(IExtensionService, new TestExtensionService());
309
	instantiationService.stub(IWindowsService, new TestWindowsService());
310
	instantiationService.stub(ITextFileService, <ITextFileService>instantiationService.createInstance(TestTextFileService));
311
	instantiationService.stub(ITextModelService, <ITextModelService>instantiationService.createInstance(TextModelResolverService));
B
Benjamin Pasero 已提交
312
	instantiationService.stub(IThemeService, new TestThemeService());
I
isidor 已提交
313
	instantiationService.stub(ILogService, new TestLogService());
314
	instantiationService.stub(IEditorGroupsService, new TestEditorGroupsService([new TestEditorGroup(0)]));
M
Martin Aeschlimann 已提交
315
	instantiationService.stub(ILabelService, <ILabelService>instantiationService.createInstance(LabelService));
B
Benjamin Pasero 已提交
316
	const editorService = new TestEditorService();
317
	instantiationService.stub(IEditorService, editorService);
B
Benjamin Pasero 已提交
318
	instantiationService.stub(ICodeEditorService, new TestCodeEditorService());
319
	instantiationService.stub(IViewletService, new TestViewletService());
320 321 322 323

	return instantiationService;
}

I
isidor 已提交
324 325 326
export class TestLogService implements ILogService {
	_serviceBrand: any; onDidChangeLogLevel: Event<LogLevel>;
	getLevel(): LogLevel { return LogLevel.Info; }
327 328 329 330 331 332 333
	setLevel(_level: LogLevel): void { }
	trace(_message: string, ..._args: any[]): void { }
	debug(_message: string, ..._args: any[]): void { }
	info(_message: string, ..._args: any[]): void { }
	warn(_message: string, ..._args: any[]): void { }
	error(_message: string | Error, ..._args: any[]): void { }
	critical(_message: string | Error, ..._args: any[]): void { }
I
isidor 已提交
334 335 336
	dispose(): void { }
}

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

344
export class TestExtensionService extends NullExtensionService { }
B
Benjamin Pasero 已提交
345 346 347 348 349

export class TestMenuService implements IMenuService {

	public _serviceBrand: any;

350
	createMenu(_id: MenuId, _scopedKeybindingService: IContextKeyService): IMenu {
B
Benjamin Pasero 已提交
351 352
		return {
			onDidChange: Event.None,
R
Rob Lourens 已提交
353
			dispose: () => undefined,
B
Benjamin Pasero 已提交
354 355 356 357 358
			getActions: () => []
		};
	}
}

B
Benjamin Pasero 已提交
359 360 361 362 363 364 365 366 367 368
export class TestHistoryService implements IHistoryService {

	public _serviceBrand: any;

	constructor(private root?: URI) {
	}

	public reopenLastClosedEditor(): void {
	}

369
	public forward(_acrossEditors?: boolean): void {
B
Benjamin Pasero 已提交
370 371
	}

372
	public back(_acrossEditors?: boolean): void {
B
Benjamin Pasero 已提交
373 374
	}

375 376 377
	public last(): void {
	}

378
	public remove(_input: IEditorInput | IResourceInput): void {
B
Benjamin Pasero 已提交
379 380 381 382 383
	}

	public clear(): void {
	}

B
Benjamin Pasero 已提交
384 385 386
	public clearRecentlyOpened(): void {
	}

387
	public getHistory(): Array<IEditorInput | IResourceInput> {
B
Benjamin Pasero 已提交
388 389 390
		return [];
	}

391
	public getLastActiveWorkspaceRoot(_schemeFilter: string): URI | undefined {
B
Benjamin Pasero 已提交
392 393
		return this.root;
	}
394

395
	public getLastActiveFile(_schemeFilter: string): URI | undefined {
R
Rob Lourens 已提交
396
		return undefined;
397
	}
B
Benjamin Pasero 已提交
398 399 400

	public openLastEditLocation(): void {
	}
B
Benjamin Pasero 已提交
401 402
}

403
export class TestDialogService implements IDialogService {
404 405

	public _serviceBrand: any;
E
Erich Gamma 已提交
406

J
Johannes Rieken 已提交
407
	public confirm(_confirmation: IConfirmation): Promise<IConfirmationResult> {
B
Benjamin Pasero 已提交
408
		return Promise.resolve({ confirmed: false });
409
	}
410

J
Johannes Rieken 已提交
411
	public show(_severity: Severity, _message: string, _buttons: string[], _options?: IDialogOptions): Promise<number> {
B
Benjamin Pasero 已提交
412
		return Promise.resolve(0);
413
	}
E
Erich Gamma 已提交
414 415
}

M
Martin Aeschlimann 已提交
416 417 418 419
export class TestFileDialogService implements IFileDialogService {

	public _serviceBrand: any;

420
	public defaultFilePath(_schemeFilter?: string): URI | undefined {
R
Rob Lourens 已提交
421
		return undefined;
M
Martin Aeschlimann 已提交
422
	}
423
	public defaultFolderPath(_schemeFilter?: string): URI | undefined {
R
Rob Lourens 已提交
424
		return undefined;
M
Martin Aeschlimann 已提交
425
	}
426
	public defaultWorkspacePath(_schemeFilter?: string): URI | undefined {
R
Rob Lourens 已提交
427
		return undefined;
M
Martin Aeschlimann 已提交
428
	}
J
Johannes Rieken 已提交
429
	public pickFileFolderAndOpen(_options: IPickAndOpenOptions): Promise<any> {
B
Benjamin Pasero 已提交
430
		return Promise.resolve(0);
M
Martin Aeschlimann 已提交
431
	}
J
Johannes Rieken 已提交
432
	public pickFileAndOpen(_options: IPickAndOpenOptions): Promise<any> {
B
Benjamin Pasero 已提交
433
		return Promise.resolve(0);
M
Martin Aeschlimann 已提交
434
	}
J
Johannes Rieken 已提交
435
	public pickFolderAndOpen(_options: IPickAndOpenOptions): Promise<any> {
B
Benjamin Pasero 已提交
436
		return Promise.resolve(0);
M
Martin Aeschlimann 已提交
437
	}
J
Johannes Rieken 已提交
438
	public pickWorkspaceAndOpen(_options: IPickAndOpenOptions): Promise<any> {
B
Benjamin Pasero 已提交
439
		return Promise.resolve(0);
M
Martin Aeschlimann 已提交
440
	}
441
	public showSaveDialog(_options: ISaveDialogOptions): Promise<URI | undefined> {
J
Johannes Rieken 已提交
442
		return Promise.resolve(undefined);
M
Martin Aeschlimann 已提交
443
	}
444
	public showOpenDialog(_options: IOpenDialogOptions): Promise<URI[] | undefined> {
J
Johannes Rieken 已提交
445
		return Promise.resolve(undefined);
M
Martin Aeschlimann 已提交
446 447 448
	}
}

449
export class TestLayoutService implements IWorkbenchLayoutService {
B
Benjamin Pasero 已提交
450

451
	public _serviceBrand: any;
E
Erich Gamma 已提交
452

453 454
	dimension: IDimension = { width: 800, height: 600 };

455 456
	container: HTMLElement = window.document.body;

B
Benjamin Pasero 已提交
457
	onZenModeChange: Event<boolean> = Event.None;
458
	onLayout = Event.None;
B
Benjamin Pasero 已提交
459

460
	private _onTitleBarVisibilityChange = new Emitter<void>();
461
	private _onMenubarVisibilityChange = new Emitter<Dimension>();
462 463 464 465 466

	public get onTitleBarVisibilityChange(): Event<void> {
		return this._onTitleBarVisibilityChange.event;
	}

467 468 469 470
	public get onMenubarVisibilityChange(): Event<Dimension> {
		return this._onMenubarVisibilityChange.event;
	}

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

475
	public hasFocus(_part: Parts): boolean {
E
Erich Gamma 已提交
476 477 478
		return false;
	}

479
	public isVisible(_part: Parts): boolean {
E
Erich Gamma 已提交
480 481 482
		return true;
	}

B
Benjamin Pasero 已提交
483 484
	public getContainer(_part: Parts): HTMLElement {
		return null!;
485 486
	}

B
Benjamin Pasero 已提交
487 488 489 490
	public isTitleBarHidden(): boolean {
		return false;
	}

491 492 493 494
	public getTitleBarOffset(): number {
		return 0;
	}

495 496 497 498
	public isStatusBarHidden(): boolean {
		return false;
	}

S
Sanders Lauture 已提交
499 500 501 502
	public isActivityBarHidden(): boolean {
		return false;
	}

503
	public setActivityBarHidden(_hidden: boolean): void { }
S
Sanders Lauture 已提交
504

E
Erich Gamma 已提交
505 506 507 508
	public isSideBarHidden(): boolean {
		return false;
	}

509
	public setEditorHidden(_hidden: boolean): Promise<void> { return Promise.resolve(); }
S
SteVen Batten 已提交
510

511
	public setSideBarHidden(_hidden: boolean): Promise<void> { return Promise.resolve(); }
E
Erich Gamma 已提交
512

I
isidor 已提交
513
	public isPanelHidden(): boolean {
I
isidor 已提交
514 515 516
		return false;
	}

517
	public setPanelHidden(_hidden: boolean): Promise<void> { return Promise.resolve(); }
I
isidor 已提交
518

I
isidor 已提交
519 520
	public toggleMaximizedPanel(): void { }

B
Benjamin Pasero 已提交
521 522 523 524
	public isPanelMaximized(): boolean {
		return false;
	}

S
SteVen Batten 已提交
525
	public getMenubarVisibility(): MenuBarVisibility {
526
		throw new Error('not implemented');
S
SteVen Batten 已提交
527 528
	}

E
Erich Gamma 已提交
529 530 531 532
	public getSideBarPosition() {
		return 0;
	}

I
isidor 已提交
533 534 535 536
	public getPanelPosition() {
		return 0;
	}

J
Johannes Rieken 已提交
537
	public setPanelPosition(_position: PartPosition): Promise<void> {
538
		return Promise.resolve();
I
isidor 已提交
539 540
	}

541 542
	public addClass(_clazz: string): void { }
	public removeClass(_clazz: string): void { }
543
	public getWorkbenchElement(): HTMLElement { throw new Error('not implemented'); }
B
Benjamin Pasero 已提交
544

I
isidor 已提交
545
	public toggleZenMode(): void { }
546

B
Benjamin Pasero 已提交
547
	public isEditorLayoutCentered(): boolean { return false; }
548
	public centerEditorLayout(_active: boolean): void { }
S
SrTobi 已提交
549 550


551
	public resizePart(_part: Parts, _sizeChange: number): void { }
552 553

	public registerPart(part: Part): void { }
E
Erich Gamma 已提交
554 555
}

556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600
let activeViewlet: Viewlet = {} as any;

export class TestViewletService implements IViewletService {
	public _serviceBrand: any;

	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;

	public openViewlet(id: string, focus?: boolean): Promise<IViewlet> {
		return Promise.resolve(null!);
	}

	public getViewlets(): ViewletDescriptor[] {
		return [];
	}

	public getAllViewlets(): ViewletDescriptor[] {
		return [];
	}

	public getActiveViewlet(): IViewlet {
		return activeViewlet;
	}

	public dispose() {
	}

	public getDefaultViewletId(): string {
		return 'workbench.view.explorer';
	}

	public getViewlet(id: string): ViewletDescriptor | undefined {
		return undefined;
	}

	public getProgressIndicator(id: string) {
		return null!;
	}
601 602 603 604

	public hideActiveViewlet(): void { }

	public getLastActiveViewletId(): string {
M
Matt Bierner 已提交
605
		return undefined!;
606
	}
607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642
}

export class TestPanelService implements IPanelService {
	public _serviceBrand: any;

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

	public openPanel(id: string, focus?: boolean): IPanel {
		return null!;
	}

	public getPanels(): any[] {
		return [];
	}

	public getPinnedPanels(): any[] {
		return [];
	}

	public getActivePanel(): IViewlet {
		return activeViewlet;
	}

	public setPanelEnablement(id: string, enabled: boolean): void { }

	public dispose() {
	}

	public showActivity(panelId: string, badge: IBadge, clazz?: string): IDisposable {
		throw new Error('Method not implemented.');
	}

	public hideActivePanel(): void { }

	public getLastActivePanelId(): string {
M
Matt Bierner 已提交
643
		return undefined!;
644
	}
E
Erich Gamma 已提交
645 646
}

647
export class TestStorageService extends InMemoryStorageService { }
648

649 650
export class TestEditorGroupsService implements IEditorGroupsService {

651 652
	_serviceBrand: ServiceIdentifier<any>;

B
Benjamin Pasero 已提交
653
	constructor(public groups: TestEditorGroup[] = []) { }
654

655
	onDidActiveGroupChange: Event<IEditorGroup> = Event.None;
B
Benjamin Pasero 已提交
656
	onDidActivateGroup: Event<IEditorGroup> = Event.None;
657 658 659
	onDidAddGroup: Event<IEditorGroup> = Event.None;
	onDidRemoveGroup: Event<IEditorGroup> = Event.None;
	onDidMoveGroup: Event<IEditorGroup> = Event.None;
660
	onDidLayout: Event<IDimension> = Event.None;
661 662

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

B
Benjamin Pasero 已提交
666 667
	dimension = { width: 800, height: 600 };

668
	get activeGroup(): IEditorGroup {
669 670 671 672 673 674 675
		return this.groups[0];
	}

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

676
	getGroups(_order?: GroupsOrder): ReadonlyArray<IEditorGroup> {
677 678 679
		return this.groups;
	}

680
	getGroup(identifier: number): IEditorGroup {
681 682 683
		for (const group of this.groups) {
			if (group.id === identifier) {
				return group;
684 685 686
			}
		}

687
		return undefined!;
688 689
	}

690
	getLabel(_identifier: number): string {
691 692 693
		return 'Group 1';
	}

694
	findGroup(_scope: IFindGroupScope, _source?: number | IEditorGroup, _wrap?: boolean): IEditorGroup {
695
		throw new Error('not implemented');
696 697
	}

698
	activateGroup(_group: number | IEditorGroup): IEditorGroup {
699
		throw new Error('not implemented');
700 701
	}

702
	getSize(_group: number | IEditorGroup): number {
703
		return 100;
704 705
	}

706
	setSize(_group: number | IEditorGroup, _size: number): void { }
707

708
	arrangeGroups(_arrangement: GroupsArrangement): void { }
709

710
	applyLayout(_layout: EditorGroupLayout): void { }
711

712
	setGroupOrientation(_orientation: any): void { }
713

714
	addGroup(_location: number | IEditorGroup, _direction: GroupDirection, _options?: IAddGroupOptions): IEditorGroup {
715
		throw new Error('not implemented');
716 717
	}

718
	removeGroup(_group: number | IEditorGroup): void { }
719

720
	moveGroup(_group: number | IEditorGroup, _location: number | IEditorGroup, _direction: GroupDirection): IEditorGroup {
721
		throw new Error('not implemented');
722 723
	}

724
	mergeGroup(_group: number | IEditorGroup, _target: number | IEditorGroup, _options?: IMergeGroupOptions): IEditorGroup {
725
		throw new Error('not implemented');
726 727
	}

728
	copyGroup(_group: number | IEditorGroup, _location: number | IEditorGroup, _direction: GroupDirection): IEditorGroup {
729
		throw new Error('not implemented');
730
	}
731 732 733 734 735 736 737 738 739 740 741

	centerLayout(active: boolean): void { }

	isLayoutCentered(): boolean {
		return false;
	}

	partOptions: IEditorPartOptions;
	enforcePartOptions(options: IEditorPartOptions): IDisposable {
		return Disposable.None;
	}
742 743
}

B
Benjamin Pasero 已提交
744
export class TestEditorGroup implements IEditorGroupView {
745 746 747

	constructor(public id: number) { }

748
	get group(): EditorGroup { throw new Error('not implemented'); }
749
	activeControl: IVisibleEditor;
750 751 752
	activeEditor: IEditorInput;
	previewEditor: IEditorInput;
	count: number;
B
Benjamin Pasero 已提交
753
	disposed: boolean;
B
Benjamin Pasero 已提交
754
	editors: ReadonlyArray<IEditorInput> = [];
755
	label: string;
R
Rob Lourens 已提交
756
	whenRestored: Promise<void> = Promise.resolve(undefined);
B
Benjamin Pasero 已提交
757 758 759 760 761
	element: HTMLElement;
	minimumWidth: number;
	maximumWidth: number;
	minimumHeight: number;
	maximumHeight: number;
762 763

	onWillDispose: Event<void> = Event.None;
764
	onDidGroupChange: Event<IGroupChangeEvent> = Event.None;
B
Benjamin Pasero 已提交
765 766
	onWillCloseEditor: Event<IEditorCloseEvent> = Event.None;
	onDidCloseEditor: Event<IEditorCloseEvent> = Event.None;
767 768
	onWillOpenEditor: Event<IEditorOpeningEvent> = Event.None;
	onDidOpenEditorFail: Event<IEditorInput> = Event.None;
B
Benjamin Pasero 已提交
769 770
	onDidFocus: Event<void> = Event.None;
	onDidChange: Event<{ width: number; height: number; }> = Event.None;
771

772
	getEditors(_order?: EditorsOrder): ReadonlyArray<IEditorInput> {
B
Benjamin Pasero 已提交
773 774 775
		return [];
	}

776
	getEditor(_index: number): IEditorInput {
777
		throw new Error('not implemented');
778 779
	}

780
	getIndexOfEditor(_editor: IEditorInput): number {
781 782 783
		return -1;
	}

J
Johannes Rieken 已提交
784
	openEditor(_editor: IEditorInput, _options?: IEditorOptions): Promise<IEditor> {
785
		throw new Error('not implemented');
786 787
	}

J
Johannes Rieken 已提交
788
	openEditors(_editors: IEditorInputWithOptions[]): Promise<IEditor> {
789
		throw new Error('not implemented');
790 791
	}

792
	isOpened(_editor: IEditorInput): boolean {
793 794 795
		return false;
	}

796
	isPinned(_editor: IEditorInput): boolean {
797 798 799
		return false;
	}

800
	isActive(_editor: IEditorInput): boolean {
801 802 803
		return false;
	}

804
	moveEditor(_editor: IEditorInput, _target: IEditorGroup, _options?: IMoveEditorOptions): void { }
805

806
	copyEditor(_editor: IEditorInput, _target: IEditorGroup, _options?: ICopyEditorOptions): void { }
807

808
	closeEditor(_editor?: IEditorInput, options?: ICloseEditorOptions): Promise<void> {
B
Benjamin Pasero 已提交
809
		return Promise.resolve();
810 811
	}

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

J
Johannes Rieken 已提交
816
	closeAllEditors(): Promise<void> {
B
Benjamin Pasero 已提交
817
		return Promise.resolve();
818 819
	}

J
Johannes Rieken 已提交
820
	replaceEditors(_editors: IEditorReplacement[]): Promise<void> {
B
Benjamin Pasero 已提交
821
		return Promise.resolve();
822 823
	}

824
	pinEditor(_editor?: IEditorInput): void { }
825 826 827 828

	focus(): void { }

	invokeWithinContext<T>(fn: (accessor: ServicesAccessor) => T): T {
829
		throw new Error('not implemented');
830
	}
B
Benjamin Pasero 已提交
831 832

	isEmpty(): boolean { return true; }
833 834
	setActive(_isActive: boolean): void { }
	setLabel(_label: string): void { }
B
Benjamin Pasero 已提交
835 836
	dispose(): void { }
	toJSON(): object { return Object.create(null); }
837
	layout(_width: number, _height: number): void { }
838
	relayout() { }
839 840
}

B
Benjamin Pasero 已提交
841
export class TestEditorService implements EditorServiceImpl {
842 843 844 845 846

	_serviceBrand: ServiceIdentifier<any>;

	onDidActiveEditorChange: Event<void> = Event.None;
	onDidVisibleEditorsChange: Event<void> = Event.None;
B
Benjamin Pasero 已提交
847
	onDidCloseEditor: Event<IEditorCloseEvent> = Event.None;
848 849
	onDidOpenEditorFail: Event<IEditorIdentifier> = Event.None;

850
	activeControl: IVisibleEditor;
851
	activeTextEditorWidget: any;
852
	activeEditor: IEditorInput;
853
	editors: ReadonlyArray<IEditorInput> = [];
M
Matt Bierner 已提交
854
	visibleControls: ReadonlyArray<IVisibleEditor> = [];
855
	visibleTextEditorWidgets = [];
B
Benjamin Pasero 已提交
856
	visibleEditors: ReadonlyArray<IEditorInput> = [];
857

858
	overrideOpenEditor(_handler: IOpenEditorOverrideHandler): IDisposable {
R
Rob Lourens 已提交
859
		return toDisposable(() => undefined);
860 861
	}

862 863
	openEditor(_editor: any, _options?: any, _group?: any): Promise<any> {
		throw new Error('not implemented');
864 865
	}

866 867
	openEditors(_editors: any, _group?: any): Promise<IEditor[]> {
		throw new Error('not implemented');
868 869
	}

870
	isOpen(_editor: IEditorInput | IResourceInput | IUntitledResourceInput): boolean {
871 872 873
		return false;
	}

874
	getOpened(_editor: IEditorInput | IResourceInput | IUntitledResourceInput): IEditorInput {
875
		throw new Error('not implemented');
876 877
	}

878
	replaceEditors(_editors: any, _group: any) {
R
Rob Lourens 已提交
879
		return Promise.resolve(undefined);
880 881
	}

882
	invokeWithinEditorContext<T>(fn: (accessor: ServicesAccessor) => T): T {
883
		throw new Error('not implemented');
884 885
	}

886
	createInput(_input: IResourceInput | IUntitledResourceInput | IResourceDiffInput | IResourceSideBySideInput): IEditorInput {
887
		throw new Error('not implemented');
888 889 890
	}
}

891 892 893 894
export class TestFileService implements IFileService {

	public _serviceBrand: any;

M
Matt Bierner 已提交
895 896
	private readonly _onFileChanges: Emitter<FileChangesEvent>;
	private readonly _onAfterOperation: Emitter<FileOperationEvent>;
897

898
	readonly onWillActivateFileSystemProvider = Event.None;
899
	readonly onError: Event<Error> = Event.None;
900

901 902
	private content = 'Hello Html';

903 904 905 906 907
	constructor() {
		this._onFileChanges = new Emitter<FileChangesEvent>();
		this._onAfterOperation = new Emitter<FileOperationEvent>();
	}

908 909 910 911 912 913 914 915
	public setContent(content: string): void {
		this.content = content;
	}

	public getContent(): string {
		return this.content;
	}

916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931
	public get onFileChanges(): Event<FileChangesEvent> {
		return this._onFileChanges.event;
	}

	public fireFileChanges(event: FileChangesEvent): void {
		this._onFileChanges.fire(event);
	}

	public get onAfterOperation(): Event<FileOperationEvent> {
		return this._onAfterOperation.event;
	}

	public fireAfterOperation(event: FileOperationEvent): void {
		this._onAfterOperation.fire(event);
	}

B
Benjamin Pasero 已提交
932 933 934
	resolve(resource: URI, _options?: IResolveFileOptions): Promise<IFileStat>;
	resolve(resource: URI, _options: IResolveMetadataFileOptions): Promise<IFileStatWithMetadata>;
	resolve(resource: URI, _options?: IResolveFileOptions): Promise<IFileStat> {
B
Benjamin Pasero 已提交
935
		return Promise.resolve({
936 937
			resource,
			etag: Date.now().toString(),
B
Benjamin Pasero 已提交
938
			encoding: 'utf8',
B
Benjamin Pasero 已提交
939
			mtime: Date.now(),
940
			size: 42,
941
			isDirectory: false,
B
Benjamin Pasero 已提交
942
			name: resources.basename(resource)
B
Benjamin Pasero 已提交
943
		});
944
	}
B
Benjamin Pasero 已提交
945

B
Benjamin Pasero 已提交
946 947
	resolveAll(toResolve: { resource: URI, options?: IResolveFileOptions }[]): Promise<IResolveFileResult[]> {
		return Promise.all(toResolve.map(resourceAndOption => this.resolve(resourceAndOption.resource, resourceAndOption.options))).then(stats => stats.map(stat => ({ stat, success: true })));
I
isidor 已提交
948 949
	}

B
Benjamin Pasero 已提交
950
	exists(_resource: URI): Promise<boolean> {
B
Benjamin Pasero 已提交
951
		return Promise.resolve(true);
952
	}
B
Benjamin Pasero 已提交
953

954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976
	readFile(resource: URI, options?: IReadFileOptions | undefined): Promise<IFileContent> {
		return Promise.resolve({
			resource: resource,
			value: VSBuffer.fromString(this.content),
			etag: 'index.txt',
			encoding: 'utf8',
			mtime: Date.now(),
			name: resources.basename(resource),
			size: 1
		});
	}

	readFileStream(resource: URI, options?: IReadFileOptions | undefined): Promise<IFileStreamContent> {
		return Promise.resolve({
			resource: resource,
			value: {
				on: (event: string, callback: Function): void => {
					if (event === 'data') {
						callback(this.content);
					}
					if (event === 'end') {
						callback();
					}
B
Benjamin Pasero 已提交
977 978 979 980
				},
				resume: () => { },
				pause: () => { },
				destroy: () => { }
981 982 983 984 985 986 987 988 989
			},
			etag: 'index.txt',
			encoding: 'utf8',
			mtime: Date.now(),
			size: 1,
			name: resources.basename(resource)
		});
	}

990
	writeFile(resource: URI, bufferOrReadable: VSBuffer | VSBufferReadable, options?: IWriteFileOptions): Promise<IFileStatWithMetadata> {
B
Benjamin Pasero 已提交
991
		return timeout(0).then(() => ({
992 993 994 995
			resource,
			etag: 'index.txt',
			encoding: 'utf8',
			mtime: Date.now(),
996
			size: 42,
997
			isDirectory: false,
B
Benjamin Pasero 已提交
998
			name: resources.basename(resource)
B
Benjamin Pasero 已提交
999
		}));
1000
	}
D
Daniel Imms 已提交
1001

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

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

1010
	createFile(_resource: URI, _content?: VSBuffer | VSBufferReadable, _options?: ICreateFileOptions): Promise<IFileStatWithMetadata> {
1011 1012 1013
		throw new Error('not implemented');
	}

1014
	createFolder(_resource: URI): Promise<IFileStatWithMetadata> {
1015
		throw new Error('not implemented');
1016 1017
	}

1018 1019
	onDidChangeFileSystemProviderRegistrations = Event.None;

1020 1021 1022 1023 1024 1025
	private providers = new Map<string, IFileSystemProvider>();

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

		return toDisposable(() => this.providers.delete(scheme));
1026 1027
	}

1028 1029
	activateProvider(_scheme: string): Promise<void> {
		throw new Error('not implemented');
1030 1031
	}

1032
	canHandleResource(resource: URI): boolean {
1033
		return resource.scheme === 'file' || this.providers.has(resource.scheme);
1034 1035
	}

1036
	hasCapability(resource: URI, capability: FileSystemProviderCapabilities): boolean { return false; }
1037

J
Johannes Rieken 已提交
1038
	del(_resource: URI, _options?: { useTrash?: boolean, recursive?: boolean }): Promise<void> {
1039
		return Promise.resolve();
1040 1041
	}

1042 1043
	watch(_resource: URI): IDisposable {
		return Disposable.None;
1044 1045
	}

1046 1047
	getWriteEncoding(_resource: URI): IResourceEncoding {
		return { encoding: 'utf8', hasBOM: false };
1048
	}
D
Daniel Imms 已提交
1049

1050
	dispose(): void {
E
Erich Gamma 已提交
1051
	}
1052
}
1053

1054 1055
export class TestBackupFileService implements IBackupFileService {
	public _serviceBrand: any;
1056

J
Johannes Rieken 已提交
1057
	public hasBackups(): Promise<boolean> {
B
Benjamin Pasero 已提交
1058
		return Promise.resolve(false);
1059 1060
	}

J
Johannes Rieken 已提交
1061
	public hasBackup(_resource: URI): Promise<boolean> {
B
Benjamin Pasero 已提交
1062
		return Promise.resolve(false);
1063 1064
	}

1065
	public loadBackupResource(resource: URI): Promise<URI | undefined> {
B
Benjamin Pasero 已提交
1066 1067
		return this.hasBackup(resource).then(hasBackup => {
			if (hasBackup) {
1068
				return this.toBackupResource(resource);
B
Benjamin Pasero 已提交
1069 1070
			}

R
Rob Lourens 已提交
1071
			return undefined;
B
Benjamin Pasero 已提交
1072 1073 1074
		});
	}

J
Johannes Rieken 已提交
1075
	public registerResourceForBackup(_resource: URI): Promise<void> {
B
Benjamin Pasero 已提交
1076
		return Promise.resolve();
D
Daniel Imms 已提交
1077 1078
	}

J
Johannes Rieken 已提交
1079
	public deregisterResourceForBackup(_resource: URI): Promise<void> {
B
Benjamin Pasero 已提交
1080
		return Promise.resolve();
D
Daniel Imms 已提交
1081 1082
	}

1083
	public toBackupResource(_resource: URI): URI {
1084
		throw new Error('not implemented');
D
Daniel Imms 已提交
1085
	}
1086

J
Johannes Rieken 已提交
1087
	public backupResource(_resource: URI, _content: ITextSnapshot): Promise<void> {
B
Benjamin Pasero 已提交
1088
		return Promise.resolve();
1089 1090
	}

J
Johannes Rieken 已提交
1091
	public getWorkspaceFileBackups(): Promise<URI[]> {
B
Benjamin Pasero 已提交
1092
		return Promise.resolve([]);
1093 1094
	}

1095 1096 1097 1098 1099
	public parseBackupContent(textBufferFactory: ITextBufferFactory): string {
		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);
1100 1101
	}

J
Johannes Rieken 已提交
1102
	public resolveBackupContent(_backup: URI): Promise<ITextBufferFactory> {
1103
		throw new Error('not implemented');
1104 1105
	}

J
Johannes Rieken 已提交
1106
	public discardResourceBackup(_resource: URI): Promise<void> {
B
Benjamin Pasero 已提交
1107
		return Promise.resolve();
1108 1109
	}

J
Johannes Rieken 已提交
1110
	public discardAllWorkspaceBackups(): Promise<void> {
B
Benjamin Pasero 已提交
1111
		return Promise.resolve();
1112
	}
1113
}
D
Daniel Imms 已提交
1114

B
Benjamin Pasero 已提交
1115 1116 1117 1118 1119 1120 1121
export class TestCodeEditorService implements ICodeEditorService {
	_serviceBrand: any;

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

1124 1125
	addCodeEditor(_editor: ICodeEditor): void { }
	removeCodeEditor(_editor: ICodeEditor): void { }
B
Benjamin Pasero 已提交
1126
	listCodeEditors(): ICodeEditor[] { return []; }
1127 1128
	addDiffEditor(_editor: IDiffEditor): void { }
	removeDiffEditor(_editor: IDiffEditor): void { }
B
Benjamin Pasero 已提交
1129
	listDiffEditors(): IDiffEditor[] { return []; }
1130
	getFocusedCodeEditor(): ICodeEditor | null { return null; }
1131 1132 1133 1134 1135
	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) { }
1136 1137
	getActiveCodeEditor(): ICodeEditor | null { return null; }
	openCodeEditor(_input: IResourceInput, _source: ICodeEditor, _sideBySide?: boolean): Promise<ICodeEditor | null> { return Promise.resolve(null); }
B
Benjamin Pasero 已提交
1138 1139
}

1140 1141 1142 1143
export class TestWindowService implements IWindowService {

	public _serviceBrand: any;

1144
	onDidChangeFocus: Event<boolean> = new Emitter<boolean>().event;
S
SteVen Batten 已提交
1145
	onDidChangeMaximize: Event<boolean>;
1146

1147 1148
	hasFocus = true;

1149 1150
	readonly windowId = 0;

J
Johannes Rieken 已提交
1151
	isFocused(): Promise<boolean> {
B
Benjamin Pasero 已提交
1152
		return Promise.resolve(false);
1153 1154
	}

J
Johannes Rieken 已提交
1155
	isMaximized(): Promise<boolean> {
B
Benjamin Pasero 已提交
1156
		return Promise.resolve(false);
S
SteVen Batten 已提交
1157 1158
	}

J
Johannes Rieken 已提交
1159
	pickFileFolderAndOpen(_options: INativeOpenDialogOptions): Promise<void> {
B
Benjamin Pasero 已提交
1160
		return Promise.resolve();
1161 1162
	}

J
Johannes Rieken 已提交
1163
	pickFileAndOpen(_options: INativeOpenDialogOptions): Promise<void> {
B
Benjamin Pasero 已提交
1164
		return Promise.resolve();
1165 1166
	}

J
Johannes Rieken 已提交
1167
	pickFolderAndOpen(_options: INativeOpenDialogOptions): Promise<void> {
B
Benjamin Pasero 已提交
1168
		return Promise.resolve();
1169 1170
	}

J
Johannes Rieken 已提交
1171
	pickWorkspaceAndOpen(_options: INativeOpenDialogOptions): Promise<void> {
B
Benjamin Pasero 已提交
1172
		return Promise.resolve();
1173 1174
	}

J
Johannes Rieken 已提交
1175
	reloadWindow(): Promise<void> {
B
Benjamin Pasero 已提交
1176
		return Promise.resolve();
1177 1178
	}

J
Johannes Rieken 已提交
1179
	openDevTools(): Promise<void> {
B
Benjamin Pasero 已提交
1180
		return Promise.resolve();
1181 1182
	}

J
Johannes Rieken 已提交
1183
	toggleDevTools(): Promise<void> {
B
Benjamin Pasero 已提交
1184
		return Promise.resolve();
1185 1186
	}

J
Johannes Rieken 已提交
1187
	closeWorkspace(): Promise<void> {
B
Benjamin Pasero 已提交
1188
		return Promise.resolve();
1189 1190
	}

M
Matt Bierner 已提交
1191
	enterWorkspace(_path: URI): Promise<IEnterWorkspaceResult | undefined> {
J
Johannes Rieken 已提交
1192
		return Promise.resolve(undefined);
1193 1194
	}

J
Johannes Rieken 已提交
1195
	toggleFullScreen(): Promise<void> {
B
Benjamin Pasero 已提交
1196
		return Promise.resolve();
1197 1198
	}

J
Johannes Rieken 已提交
1199
	setRepresentedFilename(_fileName: string): Promise<void> {
B
Benjamin Pasero 已提交
1200
		return Promise.resolve();
1201 1202
	}

J
Johannes Rieken 已提交
1203
	getRecentlyOpened(): Promise<IRecentlyOpened> {
1204 1205 1206 1207
		return Promise.resolve({
			workspaces: [],
			files: []
		});
1208 1209
	}

J
Johannes Rieken 已提交
1210
	focusWindow(): Promise<void> {
B
Benjamin Pasero 已提交
1211
		return Promise.resolve();
1212 1213
	}

J
Johannes Rieken 已提交
1214
	maximizeWindow(): Promise<void> {
B
Benjamin Pasero 已提交
1215
		return Promise.resolve();
S
SteVen Batten 已提交
1216 1217
	}

J
Johannes Rieken 已提交
1218
	unmaximizeWindow(): Promise<void> {
B
Benjamin Pasero 已提交
1219
		return Promise.resolve();
S
SteVen Batten 已提交
1220 1221
	}

J
Johannes Rieken 已提交
1222
	minimizeWindow(): Promise<void> {
B
Benjamin Pasero 已提交
1223
		return Promise.resolve();
S
SteVen Batten 已提交
1224 1225
	}

M
Martin Aeschlimann 已提交
1226
	openWindow(_uris: IURIToOpen[], _options?: IOpenSettings): Promise<void> {
B
Benjamin Pasero 已提交
1227
		return Promise.resolve();
B
Benjamin Pasero 已提交
1228 1229
	}

J
Johannes Rieken 已提交
1230
	closeWindow(): Promise<void> {
B
Benjamin Pasero 已提交
1231
		return Promise.resolve();
1232 1233
	}

J
Johannes Rieken 已提交
1234
	setDocumentEdited(_flag: boolean): Promise<void> {
B
Benjamin Pasero 已提交
1235
		return Promise.resolve();
1236 1237
	}

J
Johannes Rieken 已提交
1238
	onWindowTitleDoubleClick(): Promise<void> {
B
Benjamin Pasero 已提交
1239
		return Promise.resolve();
1240
	}
1241

J
Johannes Rieken 已提交
1242
	showMessageBox(_options: Electron.MessageBoxOptions): Promise<IMessageBoxResult> {
B
Benjamin Pasero 已提交
1243
		return Promise.resolve({ button: 0 });
1244 1245
	}

J
Johannes Rieken 已提交
1246
	showSaveDialog(_options: Electron.SaveDialogOptions): Promise<string> {
1247
		throw new Error('not implemented');
1248
	}
1249

J
Johannes Rieken 已提交
1250
	showOpenDialog(_options: Electron.OpenDialogOptions): Promise<string[]> {
1251
		throw new Error('not implemented');
1252
	}
1253

J
Johannes Rieken 已提交
1254
	updateTouchBar(_items: ISerializableCommandAction[][]): Promise<void> {
B
Benjamin Pasero 已提交
1255
		return Promise.resolve();
1256
	}
1257 1258

	resolveProxy(url: string): Promise<string | undefined> {
R
Rob Lourens 已提交
1259
		return Promise.resolve(undefined);
1260
	}
1261 1262
}

1263 1264
export class TestLifecycleService implements ILifecycleService {

1265
	public _serviceBrand: any;
1266

1267
	public phase: LifecyclePhase;
1268
	public startupKind: StartupKind;
1269

1270
	private _onBeforeShutdown = new Emitter<BeforeShutdownEvent>();
1271
	private _onWillShutdown = new Emitter<WillShutdownEvent>();
1272
	private _onShutdown = new Emitter<void>();
1273

J
Johannes Rieken 已提交
1274
	when(): Promise<void> {
B
Benjamin Pasero 已提交
1275
		return Promise.resolve();
B
Benjamin Pasero 已提交
1276
	}
1277

1278
	public fireShutdown(reason = ShutdownReason.QUIT): void {
1279
		this._onWillShutdown.fire({
1280 1281 1282
			join: () => { },
			reason
		});
1283 1284
	}

1285 1286 1287 1288 1289 1290
	public fireWillShutdown(event: BeforeShutdownEvent): void {
		this._onBeforeShutdown.fire(event);
	}

	public get onBeforeShutdown(): Event<BeforeShutdownEvent> {
		return this._onBeforeShutdown.event;
1291 1292
	}

1293
	public get onWillShutdown(): Event<WillShutdownEvent> {
1294 1295 1296
		return this._onWillShutdown.event;
	}

1297
	public get onShutdown(): Event<void> {
1298 1299
		return this._onShutdown.event;
	}
1300 1301
}

1302 1303 1304 1305
export class TestWindowsService implements IWindowsService {

	_serviceBrand: any;

1306 1307
	public windowCount = 1;

1308 1309
	onWindowOpen: Event<number>;
	onWindowFocus: Event<number>;
1310
	onWindowBlur: Event<number>;
S
SteVen Batten 已提交
1311 1312
	onWindowMaximize: Event<number>;
	onWindowUnmaximize: Event<number>;
S
SteVen Batten 已提交
1313
	onRecentlyOpenedChange: Event<void>;
1314

J
Johannes Rieken 已提交
1315
	isFocused(_windowId: number): Promise<boolean> {
B
Benjamin Pasero 已提交
1316
		return Promise.resolve(false);
1317 1318
	}

J
Johannes Rieken 已提交
1319
	pickFileFolderAndOpen(_options: INativeOpenDialogOptions): Promise<void> {
B
Benjamin Pasero 已提交
1320
		return Promise.resolve();
1321
	}
1322

J
Johannes Rieken 已提交
1323
	pickFileAndOpen(_options: INativeOpenDialogOptions): Promise<void> {
B
Benjamin Pasero 已提交
1324
		return Promise.resolve();
1325
	}
1326

J
Johannes Rieken 已提交
1327
	pickFolderAndOpen(_options: INativeOpenDialogOptions): Promise<void> {
B
Benjamin Pasero 已提交
1328
		return Promise.resolve();
1329
	}
1330

J
Johannes Rieken 已提交
1331
	pickWorkspaceAndOpen(_options: INativeOpenDialogOptions): Promise<void> {
B
Benjamin Pasero 已提交
1332
		return Promise.resolve();
1333 1334
	}

J
Johannes Rieken 已提交
1335
	reloadWindow(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1336
		return Promise.resolve();
1337
	}
1338

J
Johannes Rieken 已提交
1339
	openDevTools(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1340
		return Promise.resolve();
1341
	}
1342

J
Johannes Rieken 已提交
1343
	toggleDevTools(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1344
		return Promise.resolve();
1345
	}
1346

J
Johannes Rieken 已提交
1347
	closeWorkspace(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1348
		return Promise.resolve();
1349
	}
1350

1351
	enterWorkspace(_windowId: number, _path: URI): Promise<IEnterWorkspaceResult | undefined> {
J
Johannes Rieken 已提交
1352
		return Promise.resolve(undefined);
1353 1354
	}

J
Johannes Rieken 已提交
1355
	toggleFullScreen(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1356
		return Promise.resolve();
1357
	}
1358

J
Johannes Rieken 已提交
1359
	setRepresentedFilename(_windowId: number, _fileName: string): Promise<void> {
B
Benjamin Pasero 已提交
1360
		return Promise.resolve();
1361
	}
1362

M
Martin Aeschlimann 已提交
1363
	addRecentlyOpened(_recents: IRecent[]): Promise<void> {
B
Benjamin Pasero 已提交
1364
		return Promise.resolve();
1365
	}
1366

J
Johannes Rieken 已提交
1367
	removeFromRecentlyOpened(_paths: URI[]): Promise<void> {
B
Benjamin Pasero 已提交
1368
		return Promise.resolve();
1369
	}
1370

J
Johannes Rieken 已提交
1371
	clearRecentlyOpened(): Promise<void> {
B
Benjamin Pasero 已提交
1372
		return Promise.resolve();
C
22768  
Cristian 已提交
1373
	}
1374

J
Johannes Rieken 已提交
1375
	getRecentlyOpened(_windowId: number): Promise<IRecentlyOpened> {
1376 1377 1378 1379
		return Promise.resolve({
			workspaces: [],
			files: []
		});
1380
	}
1381

J
Johannes Rieken 已提交
1382
	focusWindow(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1383
		return Promise.resolve();
1384
	}
1385

J
Johannes Rieken 已提交
1386
	closeWindow(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1387
		return Promise.resolve();
1388 1389
	}

J
Johannes Rieken 已提交
1390
	isMaximized(_windowId: number): Promise<boolean> {
1391
		return Promise.resolve(false);
1392
	}
1393

J
Johannes Rieken 已提交
1394
	maximizeWindow(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1395
		return Promise.resolve();
1396
	}
1397

J
Johannes Rieken 已提交
1398
	minimizeWindow(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1399
		return Promise.resolve();
S
SteVen Batten 已提交
1400 1401
	}

J
Johannes Rieken 已提交
1402
	unmaximizeWindow(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1403
		return Promise.resolve();
1404
	}
1405

J
Johannes Rieken 已提交
1406
	onWindowTitleDoubleClick(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1407
		return Promise.resolve();
1408
	}
1409

J
Johannes Rieken 已提交
1410
	setDocumentEdited(_windowId: number, _flag: boolean): Promise<void> {
B
Benjamin Pasero 已提交
1411
		return Promise.resolve();
1412
	}
1413

J
Johannes Rieken 已提交
1414
	quit(): Promise<void> {
B
Benjamin Pasero 已提交
1415
		return Promise.resolve();
1416
	}
1417

J
Johannes Rieken 已提交
1418
	relaunch(_options: { addArgs?: string[], removeArgs?: string[] }): Promise<void> {
B
Benjamin Pasero 已提交
1419
		return Promise.resolve();
J
Johannes Rieken 已提交
1420
	}
1421

J
Johannes Rieken 已提交
1422
	whenSharedProcessReady(): Promise<void> {
B
Benjamin Pasero 已提交
1423
		return Promise.resolve();
1424
	}
1425

J
Johannes Rieken 已提交
1426
	toggleSharedProcess(): Promise<void> {
B
Benjamin Pasero 已提交
1427
		return Promise.resolve();
1428
	}
1429

1430
	// Global methods
M
Martin Aeschlimann 已提交
1431
	openWindow(_windowId: number, _uris: IURIToOpen[], _options: IOpenSettings): Promise<void> {
B
Benjamin Pasero 已提交
1432
		return Promise.resolve();
1433
	}
1434

J
Johannes Rieken 已提交
1435
	openNewWindow(): Promise<void> {
B
Benjamin Pasero 已提交
1436
		return Promise.resolve();
1437
	}
1438

J
Johannes Rieken 已提交
1439
	getWindows(): Promise<{ id: number; workspace?: IWorkspaceIdentifier; folderUri?: ISingleFolderWorkspaceIdentifier; title: string; filename?: string; }[]> {
1440
		throw new Error('not implemented');
1441
	}
1442

J
Johannes Rieken 已提交
1443
	getWindowCount(): Promise<number> {
B
Benjamin Pasero 已提交
1444
		return Promise.resolve(this.windowCount);
1445
	}
1446

J
Johannes Rieken 已提交
1447
	log(_severity: string, ..._messages: string[]): Promise<void> {
B
Benjamin Pasero 已提交
1448
		return Promise.resolve();
1449
	}
1450

M
Martin Aeschlimann 已提交
1451
	showItemInFolder(_path: URI): Promise<void> {
B
Benjamin Pasero 已提交
1452
		return Promise.resolve();
1453 1454
	}

J
Johannes Rieken 已提交
1455
	newWindowTab(): Promise<void> {
B
Benjamin Pasero 已提交
1456
		return Promise.resolve();
1457 1458
	}

J
Johannes Rieken 已提交
1459
	showPreviousWindowTab(): Promise<void> {
B
Benjamin Pasero 已提交
1460
		return Promise.resolve();
1461 1462
	}

J
Johannes Rieken 已提交
1463
	showNextWindowTab(): Promise<void> {
B
Benjamin Pasero 已提交
1464
		return Promise.resolve();
1465 1466
	}

J
Johannes Rieken 已提交
1467
	moveWindowTabToNewWindow(): Promise<void> {
B
Benjamin Pasero 已提交
1468
		return Promise.resolve();
1469 1470
	}

J
Johannes Rieken 已提交
1471
	mergeAllWindowTabs(): Promise<void> {
B
Benjamin Pasero 已提交
1472
		return Promise.resolve();
1473 1474
	}

J
Johannes Rieken 已提交
1475
	toggleWindowTabsBar(): Promise<void> {
B
Benjamin Pasero 已提交
1476
		return Promise.resolve();
1477 1478
	}

J
Johannes Rieken 已提交
1479
	updateTouchBar(_windowId: number, _items: ISerializableCommandAction[][]): Promise<void> {
B
Benjamin Pasero 已提交
1480
		return Promise.resolve();
1481 1482
	}

J
Johannes Rieken 已提交
1483
	getActiveWindowId(): Promise<number | undefined> {
B
Benjamin Pasero 已提交
1484
		return Promise.resolve(undefined);
J
Joao Moreno 已提交
1485 1486
	}

1487 1488
	// This needs to be handled from browser process to prevent
	// foreground ordering issues on Windows
J
Johannes Rieken 已提交
1489
	openExternal(_url: string): Promise<boolean> {
B
Benjamin Pasero 已提交
1490
		return Promise.resolve(true);
1491 1492 1493
	}

	// TODO: this is a bit backwards
J
Johannes Rieken 已提交
1494
	startCrashReporter(_config: Electron.CrashReporterStartOptions): Promise<void> {
B
Benjamin Pasero 已提交
1495
		return Promise.resolve();
1496
	}
1497

J
Johannes Rieken 已提交
1498
	showMessageBox(_windowId: number, _options: Electron.MessageBoxOptions): Promise<IMessageBoxResult> {
1499
		throw new Error('not implemented');
1500 1501
	}

J
Johannes Rieken 已提交
1502
	showSaveDialog(_windowId: number, _options: Electron.SaveDialogOptions): Promise<string> {
1503
		throw new Error('not implemented');
1504 1505
	}

J
Johannes Rieken 已提交
1506
	showOpenDialog(_windowId: number, _options: Electron.OpenDialogOptions): Promise<string[]> {
1507
		throw new Error('not implemented');
1508
	}
J
Joao Moreno 已提交
1509

J
Johannes Rieken 已提交
1510
	openAboutDialog(): Promise<void> {
B
Benjamin Pasero 已提交
1511
		return Promise.resolve();
J
Joao Moreno 已提交
1512
	}
1513 1514

	resolveProxy(windowId: number, url: string): Promise<string | undefined> {
R
Rob Lourens 已提交
1515
		return Promise.resolve(undefined);
1516
	}
1517
}
B
Benjamin Pasero 已提交
1518

1519 1520 1521 1522 1523 1524 1525
export class TestTextResourceConfigurationService implements ITextResourceConfigurationService {

	_serviceBrand: any;

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

1526
	public onDidChangeConfiguration() {
1527 1528 1529
		return { dispose() { } };
	}

1530
	getValue<T>(resource: URI, arg2?: any, arg3?: any): T {
1531 1532
		const position: IPosition | null = EditorPosition.isIPosition(arg2) ? arg2 : null;
		const section: string | undefined = position ? (typeof arg3 === 'string' ? arg3 : undefined) : (typeof arg2 === 'string' ? arg2 : undefined);
1533
		return this.configurationService.getValue(section, { resource });
1534
	}
B
Benjamin Pasero 已提交
1535 1536
}

S
Sandeep Somavarapu 已提交
1537 1538 1539 1540 1541
export class TestTextResourcePropertiesService implements ITextResourcePropertiesService {

	_serviceBrand: any;

	constructor(
1542
		@IConfigurationService private readonly configurationService: IConfigurationService,
S
Sandeep Somavarapu 已提交
1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557
	) {
	}

	getEOL(resource: URI): string {
		const filesConfiguration = this.configurationService.getValue<{ eol: string }>('files');
		if (filesConfiguration && filesConfiguration.eol) {
			if (filesConfiguration.eol !== 'auto') {
				return filesConfiguration.eol;
			}
		}
		return (isLinux || isMacintosh) ? '\n' : '\r\n';
	}
}


1558 1559 1560 1561 1562 1563 1564 1565 1566
export class TestSharedProcessService implements ISharedProcessService {

	_serviceBrand: ServiceIdentifier<any>;

	getChannel(channelName: string): any {
		return undefined;
	}

	registerChannel(channelName: string, channel: any): void { }
1567 1568 1569 1570 1571 1572 1573 1574 1575
}

export class NullFileSystemProvider implements IFileSystemProvider {

	capabilities: FileSystemProviderCapabilities = FileSystemProviderCapabilities.Readonly;

	onDidChangeCapabilities: Event<void> = Event.None;
	onDidChangeFile: Event<IFileChange[]> = Event.None;

1576 1577 1578
	constructor(private disposableFactory: () => IDisposable = () => Disposable.None) { }

	watch(resource: URI, opts: IWatchOptions): IDisposable { return this.disposableFactory(); }
1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590
	stat(resource: URI): Promise<IStat> { return Promise.resolve(undefined!); }
	mkdir(resource: URI): Promise<void> { return Promise.resolve(undefined!); }
	readdir(resource: URI): Promise<[string, FileType][]> { return Promise.resolve(undefined!); }
	delete(resource: URI, opts: FileDeleteOptions): Promise<void> { return Promise.resolve(undefined!); }
	rename(from: URI, to: URI, opts: FileOverwriteOptions): Promise<void> { return Promise.resolve(undefined!); }
	copy?(from: URI, to: URI, opts: FileOverwriteOptions): Promise<void> { return Promise.resolve(undefined!); }
	readFile?(resource: URI): Promise<Uint8Array> { return Promise.resolve(undefined!); }
	writeFile?(resource: URI, content: Uint8Array, opts: FileWriteOptions): Promise<void> { return Promise.resolve(undefined!); }
	open?(resource: URI, opts: FileOpenOptions): Promise<number> { return Promise.resolve(undefined!); }
	close?(fd: number): Promise<void> { return Promise.resolve(undefined!); }
	read?(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise<number> { return Promise.resolve(undefined!); }
	write?(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise<number> { return Promise.resolve(undefined!); }
1591
}