workbenchTestServices.ts 51.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 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';
B
Benjamin Pasero 已提交
28
import { FileOperationEvent, IFileService, IReadTextFileOptions, FileOperationError, IFileStat, IResolveFileResult, FileChangesEvent, IResolveFileOptions, IContent, IStreamContent, ICreateFileOptions, ITextSnapshot, IResourceEncoding, 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';
B
Benjamin Pasero 已提交
32
import { ITextFileContent, ITextFileService } 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';
40
import { createTextBufferFactory } 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';
B
Benjamin Pasero 已提交
51
import { ITextBufferFactory, DefaultEndOfLine, EndOfLinePreference, IModelDecorationOptions, ITextModel } 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 203
		@IDialogService dialogService: IDialogService,
		@IFileDialogService fileDialogService: IFileDialogService,
		@IEditorService editorService: IEditorService
A
Alex Dima 已提交
204
	) {
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
		super(
			contextService,
			fileService,
			untitledEditorService,
			lifecycleService,
			instantiationService,
			configurationService,
			modeService,
			modelService,
			environmentService,
			notificationService,
			backupFileService,
			windowsService,
			historyService,
			contextKeyService,
			dialogService,
			fileDialogService,
			editorService
		);
A
Alex Dima 已提交
224
	}
225

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

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

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

238 239 240 241
	public legacyRead(resource: URI, options?: IReadTextFileOptions): Promise<ITextFileContent> {
		return this.read(resource, options);
	}

B
Benjamin Pasero 已提交
242
	public read(resource: URI, options?: IReadTextFileOptions): Promise<ITextFileContent> {
243 244 245 246
		if (this.resolveTextContentError) {
			const error = this.resolveTextContentError;
			this.resolveTextContentError = null;

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

B
Benjamin Pasero 已提交
250
		return this.fileService.resolveContent(resource, options).then((content): ITextFileContent => {
251
			return {
252
				resource: content.resource,
253 254 255 256
				name: content.name,
				mtime: content.mtime,
				etag: content.etag,
				encoding: content.encoding,
257 258
				value: createTextBufferFactory(content.value),
				size: content.value.length
259 260 261
			};
		});
	}
262

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

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

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

275 276
	public onFilesConfigurationChange(configuration: any): void {
		super.onFilesConfigurationChange(configuration);
277 278
	}

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

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

	return instantiationService;
}

I
isidor 已提交
326 327 328
export class TestLogService implements ILogService {
	_serviceBrand: any; onDidChangeLogLevel: Event<LogLevel>;
	getLevel(): LogLevel { return LogLevel.Info; }
329 330 331 332 333 334 335
	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 已提交
336 337 338
	dispose(): void { }
}

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

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

export class TestMenuService implements IMenuService {

	public _serviceBrand: any;

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

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

	public _serviceBrand: any;

	constructor(private root?: URI) {
	}

	public reopenLastClosedEditor(): void {
	}

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

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

377 378 379
	public last(): void {
	}

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

	public clear(): void {
	}

B
Benjamin Pasero 已提交
386 387 388
	public clearRecentlyOpened(): void {
	}

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

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

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

	public openLastEditLocation(): void {
	}
B
Benjamin Pasero 已提交
403 404
}

405
export class TestDialogService implements IDialogService {
406 407

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

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

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

M
Martin Aeschlimann 已提交
418 419 420 421
export class TestFileDialogService implements IFileDialogService {

	public _serviceBrand: any;

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

451
export class TestLayoutService implements IWorkbenchLayoutService {
B
Benjamin Pasero 已提交
452

453
	public _serviceBrand: any;
E
Erich Gamma 已提交
454

455 456
	dimension: IDimension = { width: 800, height: 600 };

457 458
	container: HTMLElement = window.document.body;

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

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

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

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

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

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

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

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

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

493 494 495 496
	public getTitleBarOffset(): number {
		return 0;
	}

497 498 499 500
	public isStatusBarHidden(): boolean {
		return false;
	}

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

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

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

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

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

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

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

I
isidor 已提交
521 522
	public toggleMaximizedPanel(): void { }

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

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

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

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

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

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

I
isidor 已提交
547
	public toggleZenMode(): void { }
548

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


553
	public resizePart(_part: Parts, _sizeChange: number): void { }
554 555

	public registerPart(part: Part): void { }
E
Erich Gamma 已提交
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 601 602
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!;
	}
603 604 605 606

	public hideActiveViewlet(): void { }

	public getLastActiveViewletId(): string {
M
Matt Bierner 已提交
607
		return undefined!;
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 643 644
}

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 已提交
645
		return undefined!;
646
	}
E
Erich Gamma 已提交
647 648
}

649
export class TestStorageService extends InMemoryStorageService { }
650

651 652
export class TestEditorGroupsService implements IEditorGroupsService {

653 654
	_serviceBrand: ServiceIdentifier<any>;

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

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

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

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

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

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

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

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

689
		return undefined!;
690 691
	}

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

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

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

704
	getSize(_group: number | IEditorGroup): number {
705
		return 100;
706 707
	}

708
	setSize(_group: number | IEditorGroup, _size: number): void { }
709

710
	arrangeGroups(_arrangement: GroupsArrangement): void { }
711

712
	applyLayout(_layout: EditorGroupLayout): void { }
713

714
	setGroupOrientation(_orientation: any): void { }
715

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

720
	removeGroup(_group: number | IEditorGroup): void { }
721

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

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

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

	centerLayout(active: boolean): void { }

	isLayoutCentered(): boolean {
		return false;
	}

	partOptions: IEditorPartOptions;
	enforcePartOptions(options: IEditorPartOptions): IDisposable {
		return Disposable.None;
	}
744 745
}

B
Benjamin Pasero 已提交
746
export class TestEditorGroup implements IEditorGroupView {
747 748 749

	constructor(public id: number) { }

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

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

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

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

782
	getIndexOfEditor(_editor: IEditorInput): number {
783 784 785
		return -1;
	}

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

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

794
	isOpened(_editor: IEditorInput): boolean {
795 796 797
		return false;
	}

798
	isPinned(_editor: IEditorInput): boolean {
799 800 801
		return false;
	}

802
	isActive(_editor: IEditorInput): boolean {
803 804 805
		return false;
	}

806
	moveEditor(_editor: IEditorInput, _target: IEditorGroup, _options?: IMoveEditorOptions): void { }
807

808
	copyEditor(_editor: IEditorInput, _target: IEditorGroup, _options?: ICopyEditorOptions): void { }
809

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

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

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

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

826
	pinEditor(_editor?: IEditorInput): void { }
827 828 829 830

	focus(): void { }

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

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

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

	_serviceBrand: ServiceIdentifier<any>;

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

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

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

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

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

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

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

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

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

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

893 894 895 896
export class TestFileService implements IFileService {

	public _serviceBrand: any;

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

900
	readonly onWillActivateFileSystemProvider = Event.None;
901
	readonly onError: Event<Error> = Event.None;
902

903 904
	private content = 'Hello Html';

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

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

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

918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933
	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 已提交
934 935 936
	resolve(resource: URI, _options?: IResolveFileOptions): Promise<IFileStat>;
	resolve(resource: URI, _options: IResolveMetadataFileOptions): Promise<IFileStatWithMetadata>;
	resolve(resource: URI, _options?: IResolveFileOptions): Promise<IFileStat> {
B
Benjamin Pasero 已提交
937
		return Promise.resolve({
938 939
			resource,
			etag: Date.now().toString(),
B
Benjamin Pasero 已提交
940
			encoding: 'utf8',
B
Benjamin Pasero 已提交
941
			mtime: Date.now(),
942
			size: 42,
943
			isDirectory: false,
B
Benjamin Pasero 已提交
944
			name: resources.basename(resource)
B
Benjamin Pasero 已提交
945
		});
946
	}
B
Benjamin Pasero 已提交
947

B
Benjamin Pasero 已提交
948 949
	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 已提交
950 951
	}

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

B
Benjamin Pasero 已提交
956
	resolveContent(resource: URI, _options?: IReadTextFileOptions): Promise<IContent> {
B
Benjamin Pasero 已提交
957
		return Promise.resolve({
B
Benjamin Pasero 已提交
958
			resource: resource,
959
			value: this.content,
960
			etag: 'index.txt',
B
Benjamin Pasero 已提交
961 962
			encoding: 'utf8',
			mtime: Date.now(),
963 964
			name: resources.basename(resource),
			size: 1
E
Erich Gamma 已提交
965
		});
966
	}
E
Erich Gamma 已提交
967

B
Benjamin Pasero 已提交
968
	resolveStreamContent(resource: URI, _options?: IReadTextFileOptions): Promise<IStreamContent> {
B
Benjamin Pasero 已提交
969
		return Promise.resolve({
A
Alex Dima 已提交
970 971
			resource: resource,
			value: {
972
				on: (event: string, callback: Function): void => {
A
Alex Dima 已提交
973
					if (event === 'data') {
974
						callback(this.content);
A
Alex Dima 已提交
975 976 977 978 979 980 981 982
					}
					if (event === 'end') {
						callback();
					}
				}
			},
			etag: 'index.txt',
			encoding: 'utf8',
B
Benjamin Pasero 已提交
983
			mtime: Date.now(),
984
			size: 1,
B
Benjamin Pasero 已提交
985
			name: resources.basename(resource)
A
Alex Dima 已提交
986
		});
987 988
	}

989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021
	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();
					}
				}
			},
			etag: 'index.txt',
			encoding: 'utf8',
			mtime: Date.now(),
			size: 1,
			name: resources.basename(resource)
		});
	}

1022
	writeFile(resource: URI, bufferOrReadable: VSBuffer | VSBufferReadable, options?: IWriteFileOptions): Promise<IFileStatWithMetadata> {
B
Benjamin Pasero 已提交
1023
		return timeout(0).then(() => ({
1024 1025 1026 1027
			resource,
			etag: 'index.txt',
			encoding: 'utf8',
			mtime: Date.now(),
1028
			size: 42,
1029
			isDirectory: false,
B
Benjamin Pasero 已提交
1030
			name: resources.basename(resource)
B
Benjamin Pasero 已提交
1031
		}));
1032
	}
D
Daniel Imms 已提交
1033

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

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

1042
	createFile(_resource: URI, _content?: VSBuffer | VSBufferReadable, _options?: ICreateFileOptions): Promise<IFileStatWithMetadata> {
1043 1044 1045
		throw new Error('not implemented');
	}

1046
	createFolder(_resource: URI): Promise<IFileStatWithMetadata> {
1047
		throw new Error('not implemented');
1048 1049
	}

1050 1051
	onDidChangeFileSystemProviderRegistrations = Event.None;

B
Benjamin Pasero 已提交
1052
	registerProvider(_scheme: string, _provider: IFileSystemProvider) {
1053 1054 1055
		return { dispose() { } };
	}

1056 1057
	activateProvider(_scheme: string): Promise<void> {
		throw new Error('not implemented');
1058 1059
	}

1060 1061 1062 1063
	canHandleResource(resource: URI): boolean {
		return resource.scheme === 'file';
	}

1064
	hasCapability(resource: URI, capability: FileSystemProviderCapabilities): boolean { return false; }
1065

J
Johannes Rieken 已提交
1066
	del(_resource: URI, _options?: { useTrash?: boolean, recursive?: boolean }): Promise<void> {
1067
		return Promise.resolve();
1068 1069
	}

1070 1071
	watch(_resource: URI): IDisposable {
		return Disposable.None;
1072 1073
	}

1074 1075
	getWriteEncoding(_resource: URI): IResourceEncoding {
		return { encoding: 'utf8', hasBOM: false };
1076
	}
D
Daniel Imms 已提交
1077

1078
	dispose(): void {
E
Erich Gamma 已提交
1079
	}
1080
}
1081

1082 1083
export class TestBackupFileService implements IBackupFileService {
	public _serviceBrand: any;
1084

J
Johannes Rieken 已提交
1085
	public hasBackups(): Promise<boolean> {
B
Benjamin Pasero 已提交
1086
		return Promise.resolve(false);
1087 1088
	}

J
Johannes Rieken 已提交
1089
	public hasBackup(_resource: URI): Promise<boolean> {
B
Benjamin Pasero 已提交
1090
		return Promise.resolve(false);
1091 1092
	}

1093
	public loadBackupResource(resource: URI): Promise<URI | undefined> {
B
Benjamin Pasero 已提交
1094 1095
		return this.hasBackup(resource).then(hasBackup => {
			if (hasBackup) {
1096
				return this.toBackupResource(resource);
B
Benjamin Pasero 已提交
1097 1098
			}

R
Rob Lourens 已提交
1099
			return undefined;
B
Benjamin Pasero 已提交
1100 1101 1102
		});
	}

J
Johannes Rieken 已提交
1103
	public registerResourceForBackup(_resource: URI): Promise<void> {
B
Benjamin Pasero 已提交
1104
		return Promise.resolve();
D
Daniel Imms 已提交
1105 1106
	}

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

1111
	public toBackupResource(_resource: URI): URI {
1112
		throw new Error('not implemented');
D
Daniel Imms 已提交
1113
	}
1114

J
Johannes Rieken 已提交
1115
	public backupResource(_resource: URI, _content: ITextSnapshot): Promise<void> {
B
Benjamin Pasero 已提交
1116
		return Promise.resolve();
1117 1118
	}

J
Johannes Rieken 已提交
1119
	public getWorkspaceFileBackups(): Promise<URI[]> {
B
Benjamin Pasero 已提交
1120
		return Promise.resolve([]);
1121 1122
	}

1123 1124 1125 1126 1127
	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);
1128 1129
	}

J
Johannes Rieken 已提交
1130
	public resolveBackupContent(_backup: URI): Promise<ITextBufferFactory> {
1131
		throw new Error('not implemented');
1132 1133
	}

J
Johannes Rieken 已提交
1134
	public discardResourceBackup(_resource: URI): Promise<void> {
B
Benjamin Pasero 已提交
1135
		return Promise.resolve();
1136 1137
	}

J
Johannes Rieken 已提交
1138
	public discardAllWorkspaceBackups(): Promise<void> {
B
Benjamin Pasero 已提交
1139
		return Promise.resolve();
1140
	}
1141
}
D
Daniel Imms 已提交
1142

B
Benjamin Pasero 已提交
1143 1144 1145 1146 1147 1148 1149
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 已提交
1150
	onDidChangeTransientModelProperty: Event<ITextModel> = Event.None;
B
Benjamin Pasero 已提交
1151

1152 1153
	addCodeEditor(_editor: ICodeEditor): void { }
	removeCodeEditor(_editor: ICodeEditor): void { }
B
Benjamin Pasero 已提交
1154
	listCodeEditors(): ICodeEditor[] { return []; }
1155 1156
	addDiffEditor(_editor: IDiffEditor): void { }
	removeDiffEditor(_editor: IDiffEditor): void { }
B
Benjamin Pasero 已提交
1157
	listDiffEditors(): IDiffEditor[] { return []; }
1158
	getFocusedCodeEditor(): ICodeEditor | null { return null; }
1159 1160 1161 1162 1163
	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) { }
1164 1165
	getActiveCodeEditor(): ICodeEditor | null { return null; }
	openCodeEditor(_input: IResourceInput, _source: ICodeEditor, _sideBySide?: boolean): Promise<ICodeEditor | null> { return Promise.resolve(null); }
B
Benjamin Pasero 已提交
1166 1167
}

1168 1169 1170 1171
export class TestWindowService implements IWindowService {

	public _serviceBrand: any;

1172
	onDidChangeFocus: Event<boolean> = new Emitter<boolean>().event;
S
SteVen Batten 已提交
1173
	onDidChangeMaximize: Event<boolean>;
1174

1175 1176
	hasFocus = true;

1177 1178
	readonly windowId = 0;

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

J
Johannes Rieken 已提交
1183
	isMaximized(): Promise<boolean> {
B
Benjamin Pasero 已提交
1184
		return Promise.resolve(false);
S
SteVen Batten 已提交
1185 1186
	}

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

J
Johannes Rieken 已提交
1191
	pickFileAndOpen(_options: INativeOpenDialogOptions): Promise<void> {
B
Benjamin Pasero 已提交
1192
		return Promise.resolve();
1193 1194
	}

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

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

J
Johannes Rieken 已提交
1203
	reloadWindow(): Promise<void> {
B
Benjamin Pasero 已提交
1204
		return Promise.resolve();
1205 1206
	}

J
Johannes Rieken 已提交
1207
	openDevTools(): Promise<void> {
B
Benjamin Pasero 已提交
1208
		return Promise.resolve();
1209 1210
	}

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

J
Johannes Rieken 已提交
1215
	closeWorkspace(): Promise<void> {
B
Benjamin Pasero 已提交
1216
		return Promise.resolve();
1217 1218
	}

M
Matt Bierner 已提交
1219
	enterWorkspace(_path: URI): Promise<IEnterWorkspaceResult | undefined> {
J
Johannes Rieken 已提交
1220
		return Promise.resolve(undefined);
1221 1222
	}

J
Johannes Rieken 已提交
1223
	toggleFullScreen(): Promise<void> {
B
Benjamin Pasero 已提交
1224
		return Promise.resolve();
1225 1226
	}

J
Johannes Rieken 已提交
1227
	setRepresentedFilename(_fileName: string): Promise<void> {
B
Benjamin Pasero 已提交
1228
		return Promise.resolve();
1229 1230
	}

J
Johannes Rieken 已提交
1231
	getRecentlyOpened(): Promise<IRecentlyOpened> {
1232 1233 1234 1235
		return Promise.resolve({
			workspaces: [],
			files: []
		});
1236 1237
	}

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

J
Johannes Rieken 已提交
1242
	maximizeWindow(): Promise<void> {
B
Benjamin Pasero 已提交
1243
		return Promise.resolve();
S
SteVen Batten 已提交
1244 1245
	}

J
Johannes Rieken 已提交
1246
	unmaximizeWindow(): Promise<void> {
B
Benjamin Pasero 已提交
1247
		return Promise.resolve();
S
SteVen Batten 已提交
1248 1249
	}

J
Johannes Rieken 已提交
1250
	minimizeWindow(): Promise<void> {
B
Benjamin Pasero 已提交
1251
		return Promise.resolve();
S
SteVen Batten 已提交
1252 1253
	}

M
Martin Aeschlimann 已提交
1254
	openWindow(_uris: IURIToOpen[], _options?: IOpenSettings): Promise<void> {
B
Benjamin Pasero 已提交
1255
		return Promise.resolve();
B
Benjamin Pasero 已提交
1256 1257
	}

J
Johannes Rieken 已提交
1258
	closeWindow(): Promise<void> {
B
Benjamin Pasero 已提交
1259
		return Promise.resolve();
1260 1261
	}

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

J
Johannes Rieken 已提交
1266
	onWindowTitleDoubleClick(): Promise<void> {
B
Benjamin Pasero 已提交
1267
		return Promise.resolve();
1268
	}
1269

J
Johannes Rieken 已提交
1270
	showMessageBox(_options: Electron.MessageBoxOptions): Promise<IMessageBoxResult> {
B
Benjamin Pasero 已提交
1271
		return Promise.resolve({ button: 0 });
1272 1273
	}

J
Johannes Rieken 已提交
1274
	showSaveDialog(_options: Electron.SaveDialogOptions): Promise<string> {
1275
		throw new Error('not implemented');
1276
	}
1277

J
Johannes Rieken 已提交
1278
	showOpenDialog(_options: Electron.OpenDialogOptions): Promise<string[]> {
1279
		throw new Error('not implemented');
1280
	}
1281

J
Johannes Rieken 已提交
1282
	updateTouchBar(_items: ISerializableCommandAction[][]): Promise<void> {
B
Benjamin Pasero 已提交
1283
		return Promise.resolve();
1284
	}
1285 1286

	resolveProxy(url: string): Promise<string | undefined> {
R
Rob Lourens 已提交
1287
		return Promise.resolve(undefined);
1288
	}
1289 1290
}

1291 1292
export class TestLifecycleService implements ILifecycleService {

1293
	public _serviceBrand: any;
1294

1295
	public phase: LifecyclePhase;
1296
	public startupKind: StartupKind;
1297

1298
	private _onBeforeShutdown = new Emitter<BeforeShutdownEvent>();
1299
	private _onWillShutdown = new Emitter<WillShutdownEvent>();
1300
	private _onShutdown = new Emitter<void>();
1301

J
Johannes Rieken 已提交
1302
	when(): Promise<void> {
B
Benjamin Pasero 已提交
1303
		return Promise.resolve();
B
Benjamin Pasero 已提交
1304
	}
1305

1306
	public fireShutdown(reason = ShutdownReason.QUIT): void {
1307
		this._onWillShutdown.fire({
1308 1309 1310
			join: () => { },
			reason
		});
1311 1312
	}

1313 1314 1315 1316 1317 1318
	public fireWillShutdown(event: BeforeShutdownEvent): void {
		this._onBeforeShutdown.fire(event);
	}

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

1321
	public get onWillShutdown(): Event<WillShutdownEvent> {
1322 1323 1324
		return this._onWillShutdown.event;
	}

1325
	public get onShutdown(): Event<void> {
1326 1327
		return this._onShutdown.event;
	}
1328 1329
}

1330 1331 1332 1333
export class TestWindowsService implements IWindowsService {

	_serviceBrand: any;

1334 1335
	public windowCount = 1;

1336 1337
	onWindowOpen: Event<number>;
	onWindowFocus: Event<number>;
1338
	onWindowBlur: Event<number>;
S
SteVen Batten 已提交
1339 1340
	onWindowMaximize: Event<number>;
	onWindowUnmaximize: Event<number>;
S
SteVen Batten 已提交
1341
	onRecentlyOpenedChange: Event<void>;
1342

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

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

J
Johannes Rieken 已提交
1351
	pickFileAndOpen(_options: INativeOpenDialogOptions): Promise<void> {
B
Benjamin Pasero 已提交
1352
		return Promise.resolve();
1353
	}
1354

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

J
Johannes Rieken 已提交
1359
	pickWorkspaceAndOpen(_options: INativeOpenDialogOptions): Promise<void> {
B
Benjamin Pasero 已提交
1360
		return Promise.resolve();
1361 1362
	}

J
Johannes Rieken 已提交
1363
	reloadWindow(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1364
		return Promise.resolve();
1365
	}
1366

J
Johannes Rieken 已提交
1367
	openDevTools(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1368
		return Promise.resolve();
1369
	}
1370

J
Johannes Rieken 已提交
1371
	toggleDevTools(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1372
		return Promise.resolve();
1373
	}
1374

J
Johannes Rieken 已提交
1375
	closeWorkspace(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1376
		return Promise.resolve();
1377
	}
1378

1379
	enterWorkspace(_windowId: number, _path: URI): Promise<IEnterWorkspaceResult | undefined> {
J
Johannes Rieken 已提交
1380
		return Promise.resolve(undefined);
1381 1382
	}

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

J
Johannes Rieken 已提交
1387
	setRepresentedFilename(_windowId: number, _fileName: string): Promise<void> {
B
Benjamin Pasero 已提交
1388
		return Promise.resolve();
1389
	}
1390

M
Martin Aeschlimann 已提交
1391
	addRecentlyOpened(_recents: IRecent[]): Promise<void> {
B
Benjamin Pasero 已提交
1392
		return Promise.resolve();
1393
	}
1394

J
Johannes Rieken 已提交
1395
	removeFromRecentlyOpened(_paths: URI[]): Promise<void> {
B
Benjamin Pasero 已提交
1396
		return Promise.resolve();
1397
	}
1398

J
Johannes Rieken 已提交
1399
	clearRecentlyOpened(): Promise<void> {
B
Benjamin Pasero 已提交
1400
		return Promise.resolve();
C
22768  
Cristian 已提交
1401
	}
1402

J
Johannes Rieken 已提交
1403
	getRecentlyOpened(_windowId: number): Promise<IRecentlyOpened> {
1404 1405 1406 1407
		return Promise.resolve({
			workspaces: [],
			files: []
		});
1408
	}
1409

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

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

J
Johannes Rieken 已提交
1418
	isMaximized(_windowId: number): Promise<boolean> {
1419
		return Promise.resolve(false);
1420
	}
1421

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

J
Johannes Rieken 已提交
1426
	minimizeWindow(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1427
		return Promise.resolve();
S
SteVen Batten 已提交
1428 1429
	}

J
Johannes Rieken 已提交
1430
	unmaximizeWindow(_windowId: number): Promise<void> {
B
Benjamin Pasero 已提交
1431
		return Promise.resolve();
1432
	}
1433

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

J
Johannes Rieken 已提交
1438
	setDocumentEdited(_windowId: number, _flag: boolean): Promise<void> {
B
Benjamin Pasero 已提交
1439
		return Promise.resolve();
1440
	}
1441

J
Johannes Rieken 已提交
1442
	quit(): Promise<void> {
B
Benjamin Pasero 已提交
1443
		return Promise.resolve();
1444
	}
1445

J
Johannes Rieken 已提交
1446
	relaunch(_options: { addArgs?: string[], removeArgs?: string[] }): Promise<void> {
B
Benjamin Pasero 已提交
1447
		return Promise.resolve();
J
Johannes Rieken 已提交
1448
	}
1449

J
Johannes Rieken 已提交
1450
	whenSharedProcessReady(): Promise<void> {
B
Benjamin Pasero 已提交
1451
		return Promise.resolve();
1452
	}
1453

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

1458
	// Global methods
M
Martin Aeschlimann 已提交
1459
	openWindow(_windowId: number, _uris: IURIToOpen[], _options: IOpenSettings): Promise<void> {
B
Benjamin Pasero 已提交
1460
		return Promise.resolve();
1461
	}
1462

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

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

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

J
Johannes Rieken 已提交
1475
	log(_severity: string, ..._messages: string[]): Promise<void> {
B
Benjamin Pasero 已提交
1476
		return Promise.resolve();
1477
	}
1478

M
Martin Aeschlimann 已提交
1479
	showItemInFolder(_path: URI): Promise<void> {
B
Benjamin Pasero 已提交
1480
		return Promise.resolve();
1481 1482
	}

J
Johannes Rieken 已提交
1483
	newWindowTab(): Promise<void> {
B
Benjamin Pasero 已提交
1484
		return Promise.resolve();
1485 1486
	}

J
Johannes Rieken 已提交
1487
	showPreviousWindowTab(): Promise<void> {
B
Benjamin Pasero 已提交
1488
		return Promise.resolve();
1489 1490
	}

J
Johannes Rieken 已提交
1491
	showNextWindowTab(): Promise<void> {
B
Benjamin Pasero 已提交
1492
		return Promise.resolve();
1493 1494
	}

J
Johannes Rieken 已提交
1495
	moveWindowTabToNewWindow(): Promise<void> {
B
Benjamin Pasero 已提交
1496
		return Promise.resolve();
1497 1498
	}

J
Johannes Rieken 已提交
1499
	mergeAllWindowTabs(): Promise<void> {
B
Benjamin Pasero 已提交
1500
		return Promise.resolve();
1501 1502
	}

J
Johannes Rieken 已提交
1503
	toggleWindowTabsBar(): Promise<void> {
B
Benjamin Pasero 已提交
1504
		return Promise.resolve();
1505 1506
	}

J
Johannes Rieken 已提交
1507
	updateTouchBar(_windowId: number, _items: ISerializableCommandAction[][]): Promise<void> {
B
Benjamin Pasero 已提交
1508
		return Promise.resolve();
1509 1510
	}

J
Johannes Rieken 已提交
1511
	getActiveWindowId(): Promise<number | undefined> {
B
Benjamin Pasero 已提交
1512
		return Promise.resolve(undefined);
J
Joao Moreno 已提交
1513 1514
	}

1515 1516
	// This needs to be handled from browser process to prevent
	// foreground ordering issues on Windows
J
Johannes Rieken 已提交
1517
	openExternal(_url: string): Promise<boolean> {
B
Benjamin Pasero 已提交
1518
		return Promise.resolve(true);
1519 1520 1521
	}

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

J
Johannes Rieken 已提交
1526
	showMessageBox(_windowId: number, _options: Electron.MessageBoxOptions): Promise<IMessageBoxResult> {
1527
		throw new Error('not implemented');
1528 1529
	}

J
Johannes Rieken 已提交
1530
	showSaveDialog(_windowId: number, _options: Electron.SaveDialogOptions): Promise<string> {
1531
		throw new Error('not implemented');
1532 1533
	}

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

J
Johannes Rieken 已提交
1538
	openAboutDialog(): Promise<void> {
B
Benjamin Pasero 已提交
1539
		return Promise.resolve();
J
Joao Moreno 已提交
1540
	}
1541 1542

	resolveProxy(windowId: number, url: string): Promise<string | undefined> {
R
Rob Lourens 已提交
1543
		return Promise.resolve(undefined);
1544
	}
1545
}
B
Benjamin Pasero 已提交
1546

1547 1548 1549 1550 1551 1552 1553
export class TestTextResourceConfigurationService implements ITextResourceConfigurationService {

	_serviceBrand: any;

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

1554
	public onDidChangeConfiguration() {
1555 1556 1557
		return { dispose() { } };
	}

1558
	getValue<T>(resource: URI, arg2?: any, arg3?: any): T {
1559 1560
		const position: IPosition | null = EditorPosition.isIPosition(arg2) ? arg2 : null;
		const section: string | undefined = position ? (typeof arg3 === 'string' ? arg3 : undefined) : (typeof arg2 === 'string' ? arg2 : undefined);
1561
		return this.configurationService.getValue(section, { resource });
1562
	}
B
Benjamin Pasero 已提交
1563 1564
}

S
Sandeep Somavarapu 已提交
1565 1566 1567 1568 1569
export class TestTextResourcePropertiesService implements ITextResourcePropertiesService {

	_serviceBrand: any;

	constructor(
1570
		@IConfigurationService private readonly configurationService: IConfigurationService,
S
Sandeep Somavarapu 已提交
1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585
	) {
	}

	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';
	}
}


1586 1587 1588 1589 1590 1591 1592 1593 1594
export class TestSharedProcessService implements ISharedProcessService {

	_serviceBrand: ServiceIdentifier<any>;

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

	registerChannel(channelName: string, channel: any): void { }
1595 1596 1597 1598 1599 1600 1601 1602 1603
}

export class NullFileSystemProvider implements IFileSystemProvider {

	capabilities: FileSystemProviderCapabilities = FileSystemProviderCapabilities.Readonly;

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

1604 1605 1606
	constructor(private disposableFactory: () => IDisposable = () => Disposable.None) { }

	watch(resource: URI, opts: IWatchOptions): IDisposable { return this.disposableFactory(); }
1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618
	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!); }
1619
}