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

'use strict';

8
import 'vs/workbench/parts/files/electron-browser/files.contribution'; // load our contribution into the test
S
Sandeep Somavarapu 已提交
9
import { FileEditorInput } from 'vs/workbench/parts/files/common/editors/fileEditorInput';
J
Johannes Rieken 已提交
10
import { Promise, TPromise } from 'vs/base/common/winjs.base';
11
import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
12
import * as paths from 'vs/base/common/paths';
E
Erich Gamma 已提交
13
import URI from 'vs/base/common/uri';
14 15
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
16
import { StorageService, InMemoryLocalStorage } from 'vs/platform/storage/common/storageService';
17
import { IEditorGroup, ConfirmResult, IEditorOpeningEvent } from 'vs/workbench/common/editor';
M
Matt Bierner 已提交
18
import { Event, Emitter } from 'vs/base/common/event';
E
Erich Gamma 已提交
19
import Severity from 'vs/base/common/severity';
20
import { IBackupFileService } from 'vs/workbench/services/backup/common/backup';
21
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
J
Johannes Rieken 已提交
22
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
23
import { IPartService, Parts, Position as PartPosition, Dimension } from 'vs/workbench/services/part/common/partService';
24
import { TextModelResolverService } from 'vs/workbench/services/textmodelResolver/common/textModelResolverService';
25
import { ITextModelService } from 'vs/editor/common/services/resolverService';
26
import { IEditorInput, IEditorOptions, Position, IEditor, IResourceInput } from 'vs/platform/editor/common/editor';
J
Johannes Rieken 已提交
27
import { IUntitledEditorService, UntitledEditorService } from 'vs/workbench/services/untitled/common/untitledEditorService';
S
Sandeep Somavarapu 已提交
28
import { IWorkspaceContextService, IWorkspace as IWorkbenchWorkspace, WorkbenchState, IWorkspaceFolder, IWorkspaceFoldersChangeEvent } from 'vs/platform/workspace/common/workspace';
29
import { ILifecycleService, ShutdownEvent, ShutdownReason, StartupKind, LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
J
Johannes Rieken 已提交
30 31 32
import { EditorStacksModel } from 'vs/workbench/common/editor/editorStacksModel';
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService';
33
import { IEditorGroupService, GroupArrangement, GroupOrientation, IEditorTabOptions, IMoveOptions } from 'vs/workbench/services/group/common/groupService';
34
import { TextFileService } from 'vs/workbench/services/textfile/common/textFileService';
35
import { FileOperationEvent, IFileService, IResolveContentOptions, FileOperationError, IFileStat, IResolveFileResult, IImportResult, FileChangesEvent, IResolveFileOptions, IContent, IUpdateContentOptions, IStreamContent, ICreateFileOptions, ITextSnapshot } from 'vs/platform/files/common/files';
36
import { IModelService } from 'vs/editor/common/services/modelService';
37
import { ModeServiceImpl } from 'vs/editor/common/services/modeServiceImpl';
J
Johannes Rieken 已提交
38 39 40 41 42
import { ModelServiceImpl } from 'vs/editor/common/services/modelServiceImpl';
import { IRawTextContent, ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
import { parseArgs } from 'vs/platform/environment/node/argv';
import { EnvironmentService } from 'vs/platform/environment/node/environmentService';
import { IModeService } from 'vs/editor/common/services/modeService';
43
import { IWorkbenchEditorService, ICloseEditorsFilter } from 'vs/workbench/services/editor/common/editorService';
J
Johannes Rieken 已提交
44
import { IHistoryService } from 'vs/workbench/services/history/common/history';
45
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
46
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
47
import { IWindowsService, IWindowService, INativeOpenDialogOptions, IEnterWorkspaceResult, IMessageBoxResult, IWindowConfiguration } from 'vs/platform/windows/common/windows';
S
Sandeep Somavarapu 已提交
48
import { TestWorkspace } from 'vs/platform/workspace/test/common/testWorkspace';
49
import { createTextBufferFactory } from 'vs/editor/common/model/textModel';
B
Benjamin Pasero 已提交
50
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
51
import { IThemeService } from 'vs/platform/theme/common/themeService';
52
import { isLinux } from 'vs/base/common/platform';
B
Benjamin Pasero 已提交
53 54
import { generateUuid } from 'vs/base/common/uuid';
import { TestThemeService } from 'vs/platform/theme/test/common/testThemeService';
55
import { IWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, IWorkspaceFolderCreationData } from 'vs/platform/workspaces/common/workspaces';
B
Benjamin Pasero 已提交
56
import { IRecentlyOpened } from 'vs/platform/history/common/history';
57
import { ITextResourceConfigurationService } from 'vs/editor/common/services/resourceConfiguration';
58
import { IPosition, Position as EditorPosition } from 'vs/editor/common/core/position';
59
import { ICommandAction } from 'vs/platform/actions/common/actions';
R
Ramya Achutha Rao 已提交
60
import { IHashService } from 'vs/workbench/services/hash/common/hashService';
I
isidor 已提交
61
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
I
isidor 已提交
62
import { MockContextKeyService } from 'vs/platform/keybinding/test/common/mockKeybindingService';
63 64
import { ITextBufferFactory, DefaultEndOfLine, EndOfLinePreference } from 'vs/editor/common/model';
import { Range } from 'vs/editor/common/core/range';
65
import { IConfirmation, IConfirmationResult, IDialogService, IDialogOptions } from 'vs/platform/dialogs/common/dialogs';
66
import { INotificationService, INotificationHandle, INotification, NoOpNotification, PromptOption } from 'vs/platform/notification/common/notification';
B
Benjamin Pasero 已提交
67

S
Sandeep Somavarapu 已提交
68 69 70 71
export function createFileInput(instantiationService: IInstantiationService, resource: URI): FileEditorInput {
	return instantiationService.createInstance(FileEditorInput, resource, void 0);
}

72
export const TestEnvironmentService = new EnvironmentService(parseArgs(process.argv), process.execPath);
73

74
export class TestContextService implements IWorkspaceContextService {
75
	public _serviceBrand: any;
E
Erich Gamma 已提交
76

77
	private workspace: IWorkbenchWorkspace;
E
Erich Gamma 已提交
78 79
	private options: any;

M
Matt Bierner 已提交
80 81 82
	private readonly _onDidChangeWorkspaceName: Emitter<void>;
	private readonly _onDidChangeWorkspaceFolders: Emitter<IWorkspaceFoldersChangeEvent>;
	private readonly _onDidChangeWorkbenchState: Emitter<WorkbenchState>;
83

84
	constructor(workspace: any = TestWorkspace, options: any = null) {
E
Erich Gamma 已提交
85
		this.workspace = workspace;
86
		this.options = options || Object.create(null);
87
		this._onDidChangeWorkspaceFolders = new Emitter<IWorkspaceFoldersChangeEvent>();
S
Sandeep Somavarapu 已提交
88
		this._onDidChangeWorkbenchState = new Emitter<WorkbenchState>();
89 90
	}

S
Sandeep Somavarapu 已提交
91 92 93 94
	public get onDidChangeWorkspaceName(): Event<void> {
		return this._onDidChangeWorkspaceName.event;
	}

95
	public get onDidChangeWorkspaceFolders(): Event<IWorkspaceFoldersChangeEvent> {
S
Sandeep Somavarapu 已提交
96
		return this._onDidChangeWorkspaceFolders.event;
97 98
	}

99 100 101 102
	public get onDidChangeWorkbenchState(): Event<WorkbenchState> {
		return this._onDidChangeWorkbenchState.event;
	}

S
Sandeep Somavarapu 已提交
103
	public getFolders(): IWorkspaceFolder[] {
S
Sandeep Somavarapu 已提交
104
		return this.workspace ? this.workspace.folders : [];
E
Erich Gamma 已提交
105 106
	}

107
	public getWorkbenchState(): WorkbenchState {
B
Benjamin Pasero 已提交
108 109 110 111 112
		if (this.workspace.configuration) {
			return WorkbenchState.WORKSPACE;
		}

		if (this.workspace.folders.length) {
113
			return WorkbenchState.FOLDER;
114
		}
B
Benjamin Pasero 已提交
115

116
		return WorkbenchState.EMPTY;
S
Sandeep Somavarapu 已提交
117 118
	}

119
	public getWorkspace(): IWorkbenchWorkspace {
B
Benjamin Pasero 已提交
120
		return this.workspace;
121 122
	}

S
Sandeep Somavarapu 已提交
123
	public getWorkspaceFolder(resource: URI): IWorkspaceFolder {
S
Sandeep Somavarapu 已提交
124
		return this.isInsideWorkspace(resource) ? this.workspace.folders[0] : null;
125 126
	}

D
Daniel Imms 已提交
127 128 129 130
	public setWorkspace(workspace: any): void {
		this.workspace = workspace;
	}

E
Erich Gamma 已提交
131 132 133 134 135 136 137 138 139 140
	public getOptions() {
		return this.options;
	}

	public updateOptions() {

	}

	public isInsideWorkspace(resource: URI): boolean {
		if (resource && this.workspace) {
141
			return paths.isEqualOrParent(resource.fsPath, this.workspace.folders[0].uri.fsPath, !isLinux /* ignorecase */);
E
Erich Gamma 已提交
142 143 144 145 146 147
		}

		return false;
	}

	public toResource(workspaceRelativePath: string): URI {
148
		return URI.file(paths.join('C:\\', workspaceRelativePath));
E
Erich Gamma 已提交
149
	}
150 151

	public isCurrentWorkspace(workspaceIdentifier: ISingleFolderWorkspaceIdentifier | IWorkspaceIdentifier): boolean {
152
		return isSingleFolderWorkspaceIdentifier(workspaceIdentifier) && this.pathEquals(this.workspace.folders[0].uri.fsPath, workspaceIdentifier);
153 154 155 156 157 158 159 160 161 162
	}

	private pathEquals(path1: string, path2: string): boolean {
		if (!isLinux) {
			path1 = path1.toLowerCase();
			path2 = path2.toLowerCase();
		}

		return path1 === path2;
	}
E
Erich Gamma 已提交
163 164
}

165
export class TestTextFileService extends TextFileService {
166 167
	public cleanupBackupsBeforeShutdownCalled: boolean;

168 169
	private promptPath: string;
	private confirmResult: ConfirmResult;
170
	private resolveTextContentError: FileOperationError;
A
Alex Dima 已提交
171 172

	constructor(
173 174
		@ILifecycleService lifecycleService: ILifecycleService,
		@IWorkspaceContextService contextService: IWorkspaceContextService,
A
Alex Dima 已提交
175
		@IConfigurationService configurationService: IConfigurationService,
176
		@IWorkbenchEditorService editorService: IWorkbenchEditorService,
A
Alex Dima 已提交
177
		@IFileService fileService: IFileService,
178
		@IUntitledEditorService untitledEditorService: IUntitledEditorService,
179
		@IInstantiationService instantiationService: IInstantiationService,
180
		@INotificationService notificationService: INotificationService,
181
		@IBackupFileService backupFileService: IBackupFileService,
182
		@IWindowsService windowsService: IWindowsService,
I
isidor 已提交
183
		@IHistoryService historyService: IHistoryService,
B
Benjamin Pasero 已提交
184 185
		@IContextKeyService contextKeyService: IContextKeyService,
		@IModelService modelService: IModelService
A
Alex Dima 已提交
186
	) {
187
		super(lifecycleService, contextService, configurationService, fileService, untitledEditorService, instantiationService, notificationService, TestEnvironmentService, backupFileService, windowsService, historyService, contextKeyService, modelService);
A
Alex Dima 已提交
188
	}
189

190 191 192 193 194 195 196 197
	public setPromptPath(path: string): void {
		this.promptPath = path;
	}

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

198
	public setResolveTextContentErrorOnce(error: FileOperationError): void {
199 200 201
		this.resolveTextContentError = error;
	}

202
	public resolveTextContent(resource: URI, options?: IResolveContentOptions): TPromise<IRawTextContent> {
203 204 205 206
		if (this.resolveTextContentError) {
			const error = this.resolveTextContentError;
			this.resolveTextContentError = null;

207
			return TPromise.wrapError<IRawTextContent>(error);
208 209
		}

210 211
		return this.fileService.resolveContent(resource, options).then((content): IRawTextContent => {
			return {
212
				resource: content.resource,
213 214 215 216
				name: content.name,
				mtime: content.mtime,
				etag: content.etag,
				encoding: content.encoding,
217
				value: createTextBufferFactory(content.value)
218 219 220
			};
		});
	}
221

222 223
	public promptForPath(defaultPath: string): TPromise<string> {
		return TPromise.wrap(this.promptPath);
224 225
	}

226 227
	public confirmSave(resources?: URI[]): TPromise<ConfirmResult> {
		return TPromise.wrap(this.confirmResult);
228
	}
D
Daniel Imms 已提交
229

230 231
	public onFilesConfigurationChange(configuration: any): void {
		super.onFilesConfigurationChange(configuration);
232 233 234 235 236 237
	}

	protected cleanupBackupsBeforeShutdown(): TPromise<void> {
		this.cleanupBackupsBeforeShutdownCalled = true;
		return TPromise.as(void 0);
	}
A
Alex Dima 已提交
238 239
}

240
export function workbenchInstantiationService(): IInstantiationService {
241
	let instantiationService = new TestInstantiationService(new ServiceCollection([ILifecycleService, new TestLifecycleService()]));
I
isidor 已提交
242
	instantiationService.stub(IContextKeyService, <IContextKeyService>instantiationService.createInstance(MockContextKeyService));
243
	instantiationService.stub(IWorkspaceContextService, new TestContextService(TestWorkspace));
244 245 246
	const configService = new TestConfigurationService();
	instantiationService.stub(IConfigurationService, configService);
	instantiationService.stub(ITextResourceConfigurationService, new TestTextResourceConfigurationService(configService));
247 248
	instantiationService.stub(IUntitledEditorService, instantiationService.createInstance(UntitledEditorService));
	instantiationService.stub(IStorageService, new TestStorageService());
249
	instantiationService.stub(IWorkbenchEditorService, new TestEditorService());
250 251
	instantiationService.stub(IPartService, new TestPartService());
	instantiationService.stub(IEditorGroupService, new TestEditorGroupService());
252
	instantiationService.stub(IModeService, ModeServiceImpl);
B
Benjamin Pasero 已提交
253
	instantiationService.stub(IHistoryService, new TestHistoryService());
S
Sandeep Somavarapu 已提交
254
	instantiationService.stub(IModelService, instantiationService.createInstance(ModelServiceImpl));
255
	instantiationService.stub(IFileService, new TestFileService());
256
	instantiationService.stub(IBackupFileService, new TestBackupFileService());
257
	instantiationService.stub(ITelemetryService, NullTelemetryService);
258
	instantiationService.stub(INotificationService, new TestNotificationService());
B
Benjamin Pasero 已提交
259
	instantiationService.stub(IUntitledEditorService, instantiationService.createInstance(UntitledEditorService));
260
	instantiationService.stub(IWindowsService, new TestWindowsService());
261
	instantiationService.stub(ITextFileService, <ITextFileService>instantiationService.createInstance(TestTextFileService));
262
	instantiationService.stub(ITextModelService, <ITextModelService>instantiationService.createInstance(TextModelResolverService));
B
Benjamin Pasero 已提交
263
	instantiationService.stub(IEnvironmentService, TestEnvironmentService);
B
Benjamin Pasero 已提交
264
	instantiationService.stub(IThemeService, new TestThemeService());
R
Ramya Achutha Rao 已提交
265
	instantiationService.stub(IHashService, new TestHashService());
266 267 268 269

	return instantiationService;
}

B
Benjamin Pasero 已提交
270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285
export class TestHistoryService implements IHistoryService {

	public _serviceBrand: any;

	constructor(private root?: URI) {
	}

	public reopenLastClosedEditor(): void {
	}

	public forward(acrossEditors?: boolean): void {
	}

	public back(acrossEditors?: boolean): void {
	}

286 287 288
	public last(): void {
	}

B
Benjamin Pasero 已提交
289 290 291 292 293 294 295 296 297 298
	public remove(input: IEditorInput | IResourceInput): void {
	}

	public clear(): void {
	}

	public getHistory(): (IEditorInput | IResourceInput)[] {
		return [];
	}

299
	public getLastActiveWorkspaceRoot(schemeFilter?: string): URI {
B
Benjamin Pasero 已提交
300 301
		return this.root;
	}
302 303 304 305

	public getLastActiveFile(): URI {
		return void 0;
	}
B
Benjamin Pasero 已提交
306 307
}

308
export class TestNotificationService implements INotificationService {
309

310
	public _serviceBrand: any;
E
Erich Gamma 已提交
311

312
	private static readonly NO_OP: INotificationHandle = new NoOpNotification();
E
Erich Gamma 已提交
313

314 315
	public info(message: string): INotificationHandle {
		return this.notify({ severity: Severity.Info, message });
E
Erich Gamma 已提交
316 317
	}

318 319
	public warn(message: string): INotificationHandle {
		return this.notify({ severity: Severity.Warning, message });
E
Erich Gamma 已提交
320 321
	}

322 323
	public error(error: string | Error): INotificationHandle {
		return this.notify({ severity: Severity.Error, message: error });
E
Erich Gamma 已提交
324 325
	}

326 327
	public notify(notification: INotification): INotificationHandle {
		return TestNotificationService.NO_OP;
E
Erich Gamma 已提交
328
	}
329 330 331 332

	public prompt(severity: Severity, message: string, choices: PromptOption[]): TPromise<number> {
		return TPromise.as(0);
	}
333 334
}

335
export class TestDialogService implements IDialogService {
336 337

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

339
	public confirm(confirmation: IConfirmation): Promise<IConfirmationResult> {
340 341
		return TPromise.as({ confirmed: false });
	}
342

343
	public show(severity: Severity, message: string, buttons: string[], options?: IDialogOptions): Promise<number, any> {
344 345
		return TPromise.as(0);
	}
E
Erich Gamma 已提交
346 347
}

348
export class TestPartService implements IPartService {
B
Benjamin Pasero 已提交
349

350
	public _serviceBrand: any;
E
Erich Gamma 已提交
351

352
	private _onTitleBarVisibilityChange = new Emitter<void>();
353
	private _onEditorLayout = new Emitter<Dimension>();
354 355 356 357 358

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

359
	public get onEditorLayout(): Event<Dimension> {
360 361 362
		return this._onEditorLayout.event;
	}

E
Erich Gamma 已提交
363 364 365 366 367 368
	public layout(): void { }

	public isCreated(): boolean {
		return true;
	}

M
Matt Bierner 已提交
369
	public hasFocus(part: Parts): boolean {
E
Erich Gamma 已提交
370 371 372
		return false;
	}

M
Matt Bierner 已提交
373
	public isVisible(part: Parts): boolean {
E
Erich Gamma 已提交
374 375 376
		return true;
	}

M
Matt Bierner 已提交
377
	public getContainer(part: Parts): HTMLElement {
378 379 380
		return null;
	}

B
Benjamin Pasero 已提交
381 382 383 384
	public isTitleBarHidden(): boolean {
		return false;
	}

385 386 387 388
	public getTitleBarOffset(): number {
		return 0;
	}

389 390 391 392
	public isStatusBarHidden(): boolean {
		return false;
	}

S
Sanders Lauture 已提交
393 394 395 396 397 398
	public isActivityBarHidden(): boolean {
		return false;
	}

	public setActivityBarHidden(hidden: boolean): void { }

E
Erich Gamma 已提交
399 400 401 402
	public isSideBarHidden(): boolean {
		return false;
	}

403
	public setSideBarHidden(hidden: boolean): TPromise<void> { return TPromise.as(null); }
E
Erich Gamma 已提交
404

I
isidor 已提交
405
	public isPanelHidden(): boolean {
I
isidor 已提交
406 407 408
		return false;
	}

409
	public setPanelHidden(hidden: boolean): TPromise<void> { return TPromise.as(null); }
I
isidor 已提交
410

I
isidor 已提交
411 412
	public toggleMaximizedPanel(): void { }

B
Benjamin Pasero 已提交
413 414 415 416
	public isPanelMaximized(): boolean {
		return false;
	}

E
Erich Gamma 已提交
417 418 419 420
	public getSideBarPosition() {
		return 0;
	}

I
isidor 已提交
421 422 423 424
	public getPanelPosition() {
		return 0;
	}

I
isidor 已提交
425 426 427 428
	public setPanelPosition(position: PartPosition): TPromise<void> {
		return TPromise.as(null);
	}

E
Erich Gamma 已提交
429 430
	public addClass(clazz: string): void { }
	public removeClass(clazz: string): void { }
431
	public getWorkbenchElementId(): string { return ''; }
B
Benjamin Pasero 已提交
432

I
isidor 已提交
433
	public toggleZenMode(): void { }
434

B
Benjamin Pasero 已提交
435
	public isEditorLayoutCentered(): boolean { return false; }
436
	public centerEditorLayout(active: boolean): void { }
S
SrTobi 已提交
437 438


439
	public resizePart(part: Parts, sizeChange: number): void { }
E
Erich Gamma 已提交
440 441
}

442
export class TestStorageService implements IStorageService {
443
	public _serviceBrand: any;
E
Erich Gamma 已提交
444

B
Benjamin Pasero 已提交
445
	private storage: StorageService;
E
Erich Gamma 已提交
446 447 448

	constructor() {
		let context = new TestContextService();
449
		this.storage = new StorageService(new InMemoryLocalStorage(), null, context.getWorkspace().id);
E
Erich Gamma 已提交
450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472
	}

	store(key: string, value: any, scope: StorageScope = StorageScope.GLOBAL): void {
		this.storage.store(key, value, scope);
	}

	remove(key: string, scope: StorageScope = StorageScope.GLOBAL): void {
		this.storage.remove(key, scope);
	}

	get(key: string, scope: StorageScope = StorageScope.GLOBAL, defaultValue?: string): string {
		return this.storage.get(key, scope, defaultValue);
	}

	getInteger(key: string, scope: StorageScope = StorageScope.GLOBAL, defaultValue?: number): number {
		return this.storage.getInteger(key, scope, defaultValue);
	}

	getBoolean(key: string, scope: StorageScope = StorageScope.GLOBAL, defaultValue?: boolean): boolean {
		return this.storage.getBoolean(key, scope, defaultValue);
	}
}

473
export class TestEditorGroupService implements IEditorGroupService {
474
	public _serviceBrand: any;
475 476

	private stacksModel: EditorStacksModel;
477

M
Matt Bierner 已提交
478 479 480 481 482 483
	private readonly _onEditorsChanged: Emitter<void>;
	private readonly _onEditorOpening: Emitter<IEditorOpeningEvent>;
	private readonly _onEditorOpenFail: Emitter<IEditorInput>;
	private readonly _onEditorsMoved: Emitter<void>;
	private readonly _onGroupOrientationChanged: Emitter<void>;
	private readonly _onTabOptionsChanged: Emitter<IEditorTabOptions>;
484 485

	constructor(callback?: (method: string) => void) {
486
		this._onEditorsMoved = new Emitter<void>();
487
		this._onEditorsChanged = new Emitter<void>();
488
		this._onEditorOpening = new Emitter<IEditorOpeningEvent>();
489
		this._onGroupOrientationChanged = new Emitter<void>();
490
		this._onEditorOpenFail = new Emitter<IEditorInput>();
491
		this._onTabOptionsChanged = new Emitter<IEditorTabOptions>();
492

493 494 495
		let services = new ServiceCollection();

		services.set(IStorageService, new TestStorageService());
496
		services.set(IConfigurationService, new TestConfigurationService());
497
		services.set(IWorkspaceContextService, new TestContextService());
498 499
		const lifecycle = new TestLifecycleService();
		services.set(ILifecycleService, lifecycle);
500
		services.set(ITelemetryService, NullTelemetryService);
501 502 503

		let inst = new InstantiationService(services);

504
		this.stacksModel = inst.createInstance(EditorStacksModel, true);
505 506
	}

507 508 509 510 511 512 513 514
	public fireChange(): void {
		this._onEditorsChanged.fire();
	}

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

515 516 517 518
	public get onEditorOpening(): Event<IEditorOpeningEvent> {
		return this._onEditorOpening.event;
	}

519 520 521 522
	public get onEditorOpenFail(): Event<IEditorInput> {
		return this._onEditorOpenFail.event;
	}

523
	public get onEditorGroupMoved(): Event<void> {
524 525 526
		return this._onEditorsMoved.event;
	}

527 528 529 530
	public get onGroupOrientationChanged(): Event<void> {
		return this._onGroupOrientationChanged.event;
	}

531
	public get onTabOptionsChanged(): Event<IEditorTabOptions> {
I
isidor 已提交
532
		return this._onTabOptionsChanged.event;
533 534
	}

535 536 537
	public focusGroup(group: IEditorGroup): void;
	public focusGroup(position: Position): void;
	public focusGroup(arg1: any): void {
538 539 540

	}

541 542 543
	public activateGroup(group: IEditorGroup): void;
	public activateGroup(position: Position): void;
	public activateGroup(arg1: any): void {
544 545 546

	}

547 548 549
	public moveGroup(from: IEditorGroup, to: IEditorGroup): void;
	public moveGroup(from: Position, to: Position): void;
	public moveGroup(arg1: any, arg2: any): void {
550 551 552 553 554 555 556

	}

	public arrangeGroups(arrangement: GroupArrangement): void {

	}

557 558 559 560 561 562 563 564
	public setGroupOrientation(orientation: GroupOrientation): void {

	}

	public getGroupOrientation(): GroupOrientation {
		return 'vertical';
	}

B
Benjamin Pasero 已提交
565 566
	public resizeGroup(position: Position, groupSizeChange: number): void {

567 568
	}

569 570 571
	public pinEditor(group: IEditorGroup, input: IEditorInput): void;
	public pinEditor(position: Position, input: IEditorInput): void;
	public pinEditor(arg1: any, input: IEditorInput): void {
572 573
	}

574 575 576
	public moveEditor(input: IEditorInput, from: IEditorGroup, to: IEditorGroup, moveOptions?: IMoveOptions): void;
	public moveEditor(input: IEditorInput, from: Position, to: Position, moveOptions?: IMoveOptions): void;
	public moveEditor(input: IEditorInput, from: any, to: any, moveOptions?: IMoveOptions): void {
577 578 579 580 581
	}

	public getStacksModel(): EditorStacksModel {
		return this.stacksModel;
	}
582

583
	public getTabOptions(): IEditorTabOptions {
I
isidor 已提交
584
		return {};
585
	}
586 587 588 589

	public invokeWithinEditorContext<T>(fn: (accessor: ServicesAccessor) => T): T {
		return fn(null);
	}
590 591
}

592
export class TestEditorService implements IWorkbenchEditorService {
593
	public _serviceBrand: any;
E
Erich Gamma 已提交
594

B
Benjamin Pasero 已提交
595 596 597
	public activeEditorInput: IEditorInput;
	public activeEditorOptions: IEditorOptions;
	public activeEditorPosition: Position;
598
	public mockLineNumber: number;
Y
Yitong 已提交
599
	public mockSelectedText: string;
E
Erich Gamma 已提交
600 601 602 603 604

	private callback: (method: string) => void;

	constructor(callback?: (method: string) => void) {
		this.callback = callback || ((s: string) => { });
605
		this.mockLineNumber = 15;
Y
Yitong 已提交
606
		this.mockSelectedText = 'selected text';
B
Benjamin Pasero 已提交
607 608
	}

M
Matt Bierner 已提交
609
	public openEditors(inputs: any[]): Promise {
A
Alex Dima 已提交
610
		return TPromise.as([]);
E
Erich Gamma 已提交
611 612
	}

M
Matt Bierner 已提交
613
	public replaceEditors(editors: any[]): TPromise<IEditor[]> {
614 615 616
		return TPromise.as([]);
	}

B
Benjamin Pasero 已提交
617
	public closeEditors(positions?: Position[]): TPromise<void>;
618
	public closeEditors(position: Position, filter?: ICloseEditorsFilter): TPromise<void>;
619
	public closeEditors(position: Position, editors: IEditorInput[]): TPromise<void>;
620 621 622
	public closeEditors(editors: { positionOne?: ICloseEditorsFilter, positionTwo?: ICloseEditorsFilter, positionThree?: ICloseEditorsFilter }): TPromise<void>;
	public closeEditors(editors: { positionOne?: IEditorInput[], positionTwo?: IEditorInput[], positionThree?: IEditorInput[] }): TPromise<void>;
	public closeEditors(positionOrEditors: any, filterOrEditors?: any): TPromise<void> {
623 624 625
		return TPromise.as(null);
	}

E
Erich Gamma 已提交
626 627 628
	public getActiveEditor(): IEditor {
		this.callback('getActiveEditor');

629 630 631 632 633 634 635
		return {
			input: null,
			options: null,
			position: null,
			getId: () => { return null; },
			getControl: () => {
				return {
Y
Yitong 已提交
636 637
					getSelection: () => { return { positionLineNumber: this.mockLineNumber }; },
					getModel: () => { return { getValueInRange: () => this.mockSelectedText }; }
638 639 640 641 642
				};
			},
			focus: () => { },
			isVisible: () => { return true; }
		};
E
Erich Gamma 已提交
643 644 645 646 647
	}

	public getActiveEditorInput(): IEditorInput {
		this.callback('getActiveEditorInput');

B
Benjamin Pasero 已提交
648
		return this.activeEditorInput;
E
Erich Gamma 已提交
649 650 651 652 653 654 655 656 657 658 659 660 661 662 663
	}

	public getVisibleEditors(): IEditor[] {
		this.callback('getVisibleEditors');

		return [];
	}

	public openEditor(input: any, options?: any, position?: any): Promise {
		this.callback('openEditor');

		this.activeEditorInput = input;
		this.activeEditorOptions = options;
		this.activeEditorPosition = position;

A
Alex Dima 已提交
664
		return TPromise.as(null);
E
Erich Gamma 已提交
665 666
	}

667
	public closeEditor(position: Position, input: IEditorInput): TPromise<void> {
E
Erich Gamma 已提交
668 669 670 671 672
		this.callback('closeEditor');

		return TPromise.as(null);
	}

673 674
	public createInput(input: IResourceInput): IEditorInput {
		return null;
E
Erich Gamma 已提交
675 676 677
	}
}

678 679 680 681
export class TestFileService implements IFileService {

	public _serviceBrand: any;

M
Matt Bierner 已提交
682 683
	private readonly _onFileChanges: Emitter<FileChangesEvent>;
	private readonly _onAfterOperation: Emitter<FileOperationEvent>;
684

685 686
	private content = 'Hello Html';

687 688 689 690 691
	constructor() {
		this._onFileChanges = new Emitter<FileChangesEvent>();
		this._onAfterOperation = new Emitter<FileOperationEvent>();
	}

692 693 694 695 696 697 698 699
	public setContent(content: string): void {
		this.content = content;
	}

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

700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716
	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);
	}

	resolveFile(resource: URI, options?: IResolveFileOptions): TPromise<IFileStat> {
A
Alex Dima 已提交
717
		return TPromise.as({
718 719
			resource,
			etag: Date.now().toString(),
B
Benjamin Pasero 已提交
720
			encoding: 'utf8',
B
Benjamin Pasero 已提交
721
			mtime: Date.now(),
722
			isDirectory: false,
B
Benjamin Pasero 已提交
723 724
			name: paths.basename(resource.fsPath)
		});
725
	}
B
Benjamin Pasero 已提交
726

I
isidor 已提交
727 728
	resolveFiles(toResolve: { resource: URI, options?: IResolveFileOptions }[]): TPromise<IResolveFileResult[]> {
		return TPromise.join(toResolve.map(resourceAndOption => this.resolveFile(resourceAndOption.resource, resourceAndOption.options))).then(stats => stats.map(stat => ({ stat, success: true })));
I
isidor 已提交
729 730
	}

731 732 733
	existsFile(resource: URI): TPromise<boolean> {
		return TPromise.as(null);
	}
B
Benjamin Pasero 已提交
734

735
	resolveContent(resource: URI, options?: IResolveContentOptions): TPromise<IContent> {
B
Benjamin Pasero 已提交
736 737
		return TPromise.as({
			resource: resource,
738
			value: this.content,
739
			etag: 'index.txt',
B
Benjamin Pasero 已提交
740 741
			encoding: 'utf8',
			mtime: Date.now(),
742
			name: paths.basename(resource.fsPath)
E
Erich Gamma 已提交
743
		});
744
	}
E
Erich Gamma 已提交
745

746
	resolveStreamContent(resource: URI, options?: IResolveContentOptions): TPromise<IStreamContent> {
A
Alex Dima 已提交
747 748 749
		return TPromise.as({
			resource: resource,
			value: {
750
				on: (event: string, callback: Function): void => {
A
Alex Dima 已提交
751
					if (event === 'data') {
752
						callback(this.content);
A
Alex Dima 已提交
753 754 755 756 757 758 759 760
					}
					if (event === 'end') {
						callback();
					}
				}
			},
			etag: 'index.txt',
			encoding: 'utf8',
B
Benjamin Pasero 已提交
761
			mtime: Date.now(),
762
			name: paths.basename(resource.fsPath)
A
Alex Dima 已提交
763
		});
764 765
	}

766
	updateContent(resource: URI, value: string | ITextSnapshot, options?: IUpdateContentOptions): TPromise<IFileStat> {
767
		return TPromise.timeout(1).then(() => {
E
Erich Gamma 已提交
768
			return {
769
				resource,
E
Erich Gamma 已提交
770
				etag: 'index.txt',
B
Benjamin Pasero 已提交
771
				encoding: 'utf8',
B
Benjamin Pasero 已提交
772
				mtime: Date.now(),
773 774
				isDirectory: false,
				name: paths.basename(resource.fsPath)
E
Erich Gamma 已提交
775 776
			};
		});
777
	}
D
Daniel Imms 已提交
778

779 780 781
	moveFile(source: URI, target: URI, overwrite?: boolean): TPromise<IFileStat> {
		return TPromise.as(null);
	}
D
Daniel Imms 已提交
782

783 784 785
	copyFile(source: URI, target: URI, overwrite?: boolean): TPromise<IFileStat> {
		return TPromise.as(null);
	}
D
Daniel Imms 已提交
786

787
	createFile(resource: URI, content?: string, options?: ICreateFileOptions): TPromise<IFileStat> {
788
		return TPromise.as(null);
E
Erich Gamma 已提交
789
	}
790 791 792 793 794 795 796 797

	createFolder(resource: URI): TPromise<IFileStat> {
		return TPromise.as(null);
	}

	rename(resource: URI, newName: string): TPromise<IFileStat> {
		return TPromise.as(null);
	}
D
Daniel Imms 已提交
798

799 800 801 802
	touchFile(resource: URI): TPromise<IFileStat> {
		return TPromise.as(null);
	}

803 804 805 806
	canHandleResource(resource: URI): boolean {
		return resource.scheme === 'file';
	}

807 808 809 810 811 812 813
	del(resource: URI, useTrash?: boolean): TPromise<void> {
		return TPromise.as(null);
	}

	importFile(source: URI, targetFolder: URI): TPromise<IImportResult> {
		return TPromise.as(null);
	}
D
Daniel Imms 已提交
814

815 816 817
	watchFileChanges(resource: URI): void {
	}

J
Johannes Rieken 已提交
818
	unwatchFileChanges(resource: URI): void {
819 820 821 822 823 824 825 826
	}

	updateOptions(options: any): void {
	}

	getEncoding(resource: URI): string {
		return 'utf8';
	}
D
Daniel Imms 已提交
827

828
	dispose(): void {
E
Erich Gamma 已提交
829
	}
830
}
831

832 833
export class TestBackupFileService implements IBackupFileService {
	public _serviceBrand: any;
834

835 836
	public backupEnabled: boolean;

837 838 839 840
	public hasBackups(): TPromise<boolean> {
		return TPromise.as(false);
	}

841
	public hasBackup(resource: URI): TPromise<boolean> {
842 843 844
		return TPromise.as(false);
	}

B
Benjamin Pasero 已提交
845 846 847
	public loadBackupResource(resource: URI): TPromise<URI> {
		return this.hasBackup(resource).then(hasBackup => {
			if (hasBackup) {
848
				return this.toBackupResource(resource);
B
Benjamin Pasero 已提交
849 850 851 852 853 854
			}

			return void 0;
		});
	}

D
Daniel Imms 已提交
855 856 857 858 859 860 861 862
	public registerResourceForBackup(resource: URI): TPromise<void> {
		return TPromise.as(void 0);
	}

	public deregisterResourceForBackup(resource: URI): TPromise<void> {
		return TPromise.as(void 0);
	}

863
	public toBackupResource(resource: URI): URI {
D
Daniel Imms 已提交
864 865
		return null;
	}
866

867
	public backupResource(resource: URI, content: ITextSnapshot): TPromise<void> {
868 869 870
		return TPromise.as(void 0);
	}

871
	public getWorkspaceFileBackups(): TPromise<URI[]> {
872 873 874
		return TPromise.as([]);
	}

875 876 877 878 879
	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);
880 881
	}

882 883 884 885
	public resolveBackupContent(backup: URI): TPromise<ITextBufferFactory> {
		return TPromise.as(null);
	}

886
	public discardResourceBackup(resource: URI): TPromise<void> {
887 888 889
		return TPromise.as(void 0);
	}

890
	public discardAllWorkspaceBackups(): TPromise<void> {
891 892
		return TPromise.as(void 0);
	}
893
}
D
Daniel Imms 已提交
894

895 896 897 898
export class TestWindowService implements IWindowService {

	public _serviceBrand: any;

J
Joao Moreno 已提交
899
	onDidChangeFocus: Event<boolean>;
900

901 902 903 904
	isFocused(): TPromise<boolean> {
		return TPromise.as(false);
	}

905 906 907 908
	getConfiguration(): IWindowConfiguration {
		return Object.create(null);
	}

909 910 911 912
	getCurrentWindowId(): number {
		return 0;
	}

B
Benjamin Pasero 已提交
913
	pickFileFolderAndOpen(options: INativeOpenDialogOptions): TPromise<void> {
914 915 916
		return TPromise.as(void 0);
	}

B
Benjamin Pasero 已提交
917
	pickFileAndOpen(options: INativeOpenDialogOptions): TPromise<void> {
918 919 920
		return TPromise.as(void 0);
	}

B
Benjamin Pasero 已提交
921
	pickFolderAndOpen(options: INativeOpenDialogOptions): TPromise<void> {
922 923 924
		return TPromise.as(void 0);
	}

925 926 927 928
	pickWorkspaceAndOpen(options: INativeOpenDialogOptions): TPromise<void> {
		return TPromise.as(void 0);
	}

929 930 931 932 933 934 935 936 937 938 939 940
	reloadWindow(): TPromise<void> {
		return TPromise.as(void 0);
	}

	openDevTools(): TPromise<void> {
		return TPromise.as(void 0);
	}

	toggleDevTools(): TPromise<void> {
		return TPromise.as(void 0);
	}

941
	closeWorkspace(): TPromise<void> {
942 943 944
		return TPromise.as(void 0);
	}

945
	createAndEnterWorkspace(folders?: IWorkspaceFolderCreationData[], path?: string): TPromise<IEnterWorkspaceResult> {
946 947 948
		return TPromise.as(void 0);
	}

949
	saveAndEnterWorkspace(path: string): TPromise<IEnterWorkspaceResult> {
950 951 952
		return TPromise.as(void 0);
	}

953 954 955 956 957 958 959 960
	toggleFullScreen(): TPromise<void> {
		return TPromise.as(void 0);
	}

	setRepresentedFilename(fileName: string): TPromise<void> {
		return TPromise.as(void 0);
	}

961
	getRecentlyOpened(): TPromise<IRecentlyOpened> {
962 963 964 965 966 967 968
		return TPromise.as(void 0);
	}

	focusWindow(): TPromise<void> {
		return TPromise.as(void 0);
	}

969 970 971 972
	closeWindow(): TPromise<void> {
		return TPromise.as(void 0);
	}

973 974 975 976
	setDocumentEdited(flag: boolean): TPromise<void> {
		return TPromise.as(void 0);
	}

977 978 979
	onWindowTitleDoubleClick(): TPromise<void> {
		return TPromise.as(void 0);
	}
980

J
Joao 已提交
981 982 983 984
	show(): TPromise<void> {
		return TPromise.as(void 0);
	}

985 986
	showMessageBox(options: Electron.MessageBoxOptions): TPromise<IMessageBoxResult> {
		return TPromise.wrap({ button: 0 });
987 988
	}

989 990
	showSaveDialog(options: Electron.SaveDialogOptions): TPromise<string> {
		return TPromise.wrap(void 0);
991
	}
992

993 994
	showOpenDialog(options: Electron.OpenDialogOptions): TPromise<string[]> {
		return TPromise.wrap(void 0);
995
	}
996 997 998 999

	updateTouchBar(items: ICommandAction[][]): Promise<void> {
		return TPromise.as(void 0);
	}
1000 1001
}

1002 1003
export class TestLifecycleService implements ILifecycleService {

1004
	public _serviceBrand: any;
1005

1006
	public phase: LifecyclePhase;
1007
	public startupKind: StartupKind;
1008

1009
	private _onWillShutdown = new Emitter<ShutdownEvent>();
1010
	private _onShutdown = new Emitter<ShutdownReason>();
1011

1012
	when(): Thenable<void> {
1013
		return TPromise.as(void 0);
B
Benjamin Pasero 已提交
1014
	}
1015

1016 1017
	public fireShutdown(reason = ShutdownReason.QUIT): void {
		this._onShutdown.fire(reason);
1018 1019
	}

1020 1021 1022 1023
	public fireWillShutdown(event: ShutdownEvent): void {
		this._onWillShutdown.fire(event);
	}

1024 1025 1026 1027
	public get onWillShutdown(): Event<ShutdownEvent> {
		return this._onWillShutdown.event;
	}

1028
	public get onShutdown(): Event<ShutdownReason> {
1029 1030
		return this._onShutdown.event;
	}
1031 1032
}

1033 1034 1035 1036
export class TestWindowsService implements IWindowsService {

	_serviceBrand: any;

1037 1038
	public windowCount = 1;

1039 1040
	onWindowOpen: Event<number>;
	onWindowFocus: Event<number>;
1041
	onWindowBlur: Event<number>;
1042

1043 1044 1045 1046
	isFocused(windowId: number): TPromise<boolean> {
		return TPromise.as(false);
	}

B
Benjamin Pasero 已提交
1047
	pickFileFolderAndOpen(options: INativeOpenDialogOptions): TPromise<void> {
1048 1049
		return TPromise.as(void 0);
	}
1050

B
Benjamin Pasero 已提交
1051
	pickFileAndOpen(options: INativeOpenDialogOptions): TPromise<void> {
1052 1053
		return TPromise.as(void 0);
	}
1054

B
Benjamin Pasero 已提交
1055
	pickFolderAndOpen(options: INativeOpenDialogOptions): TPromise<void> {
1056 1057
		return TPromise.as(void 0);
	}
1058

1059 1060 1061 1062
	pickWorkspaceAndOpen(options: INativeOpenDialogOptions): TPromise<void> {
		return TPromise.as(void 0);
	}

1063 1064 1065
	reloadWindow(windowId: number): TPromise<void> {
		return TPromise.as(void 0);
	}
1066

1067 1068 1069
	openDevTools(windowId: number): TPromise<void> {
		return TPromise.as(void 0);
	}
1070

1071 1072 1073
	toggleDevTools(windowId: number): TPromise<void> {
		return TPromise.as(void 0);
	}
1074

1075
	closeWorkspace(windowId: number): TPromise<void> {
1076 1077
		return TPromise.as(void 0);
	}
1078

1079
	createAndEnterWorkspace(windowId: number, folders?: IWorkspaceFolderCreationData[], path?: string): TPromise<IEnterWorkspaceResult> {
1080 1081 1082
		return TPromise.as(void 0);
	}

1083
	saveAndEnterWorkspace(windowId: number, path: string): TPromise<IEnterWorkspaceResult> {
1084 1085 1086
		return TPromise.as(void 0);
	}

1087 1088 1089
	toggleFullScreen(windowId: number): TPromise<void> {
		return TPromise.as(void 0);
	}
1090

1091 1092 1093
	setRepresentedFilename(windowId: number, fileName: string): TPromise<void> {
		return TPromise.as(void 0);
	}
1094

1095
	addRecentlyOpened(files: string[]): TPromise<void> {
1096 1097
		return TPromise.as(void 0);
	}
1098

1099
	removeFromRecentlyOpened(paths: string[]): TPromise<void> {
1100 1101
		return TPromise.as(void 0);
	}
1102

B
Benjamin Pasero 已提交
1103
	clearRecentlyOpened(): TPromise<void> {
C
22768  
Cristian 已提交
1104 1105
		return TPromise.as(void 0);
	}
1106

1107
	getRecentlyOpened(windowId: number): TPromise<IRecentlyOpened> {
1108 1109
		return TPromise.as(void 0);
	}
1110

1111 1112 1113
	focusWindow(windowId: number): TPromise<void> {
		return TPromise.as(void 0);
	}
1114

1115 1116 1117 1118
	closeWindow(windowId: number): TPromise<void> {
		return TPromise.as(void 0);
	}

1119 1120 1121
	isMaximized(windowId: number): TPromise<boolean> {
		return TPromise.as(void 0);
	}
1122

1123 1124 1125
	maximizeWindow(windowId: number): TPromise<void> {
		return TPromise.as(void 0);
	}
1126

1127 1128 1129
	unmaximizeWindow(windowId: number): TPromise<void> {
		return TPromise.as(void 0);
	}
1130

1131 1132 1133
	onWindowTitleDoubleClick(windowId: number): TPromise<void> {
		return TPromise.as(void 0);
	}
1134

1135 1136 1137
	setDocumentEdited(windowId: number, flag: boolean): TPromise<void> {
		return TPromise.as(void 0);
	}
1138

1139 1140 1141
	quit(): TPromise<void> {
		return TPromise.as(void 0);
	}
1142

J
Johannes Rieken 已提交
1143 1144 1145
	relaunch(options: { addArgs?: string[], removeArgs?: string[] }): TPromise<void> {
		return TPromise.as(void 0);
	}
1146

1147 1148 1149
	whenSharedProcessReady(): TPromise<void> {
		return TPromise.as(void 0);
	}
1150

1151 1152 1153
	toggleSharedProcess(): TPromise<void> {
		return TPromise.as(void 0);
	}
1154

1155
	// Global methods
1156
	openWindow(paths: string[], options?: { forceNewWindow?: boolean, forceReuseWindow?: boolean, forceOpenWorkspaceAsFile?: boolean }): TPromise<void> {
1157 1158
		return TPromise.as(void 0);
	}
1159

1160 1161 1162
	openNewWindow(): TPromise<void> {
		return TPromise.as(void 0);
	}
1163

1164 1165 1166
	showWindow(windowId: number): TPromise<void> {
		return TPromise.as(void 0);
	}
1167

1168
	getWindows(): TPromise<{ id: number; workspace?: IWorkspaceIdentifier; folderPath?: string; title: string; filename?: string; }[]> {
1169 1170
		return TPromise.as(void 0);
	}
1171

1172
	getWindowCount(): TPromise<number> {
1173
		return TPromise.as(this.windowCount);
1174
	}
1175

1176 1177 1178
	log(severity: string, ...messages: string[]): TPromise<void> {
		return TPromise.as(void 0);
	}
1179

1180 1181 1182 1183
	showItemInFolder(path: string): TPromise<void> {
		return TPromise.as(void 0);
	}

1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201
	showPreviousWindowTab(): Promise<void> {
		return TPromise.as(void 0);
	}

	showNextWindowTab(): Promise<void> {
		return TPromise.as(void 0);
	}

	moveWindowTabToNewWindow(): Promise<void> {
		return TPromise.as(void 0);
	}

	mergeAllWindowTabs(): Promise<void> {
		return TPromise.as(void 0);
	}

	toggleWindowTabsBar(): Promise<void> {
		return TPromise.as(void 0);
1202 1203 1204 1205
	}

	updateTouchBar(windowId: number, items: ICommandAction[][]): Promise<void> {
		return TPromise.as(void 0);
1206 1207
	}

1208 1209
	// This needs to be handled from browser process to prevent
	// foreground ordering issues on Windows
1210 1211
	openExternal(url: string): TPromise<boolean> {
		return TPromise.as(true);
1212 1213 1214 1215 1216 1217
	}

	// TODO: this is a bit backwards
	startCrashReporter(config: Electron.CrashReporterStartOptions): TPromise<void> {
		return TPromise.as(void 0);
	}
1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229

	showMessageBox(windowId: number, options: Electron.MessageBoxOptions): TPromise<IMessageBoxResult> {
		return TPromise.as(void 0);
	}

	showSaveDialog(windowId: number, options: Electron.SaveDialogOptions): TPromise<string> {
		return TPromise.as(void 0);
	}

	showOpenDialog(windowId: number, options: Electron.OpenDialogOptions): TPromise<string[]> {
		return TPromise.as(void 0);
	}
J
Joao Moreno 已提交
1230 1231 1232 1233

	openAboutDialog(): TPromise<void> {
		return TPromise.as(void 0);
	}
1234
}
B
Benjamin Pasero 已提交
1235

1236 1237 1238 1239 1240 1241 1242
export class TestTextResourceConfigurationService implements ITextResourceConfigurationService {

	_serviceBrand: any;

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

1243
	public onDidChangeConfiguration() {
1244 1245 1246
		return { dispose() { } };
	}

1247 1248 1249 1250
	getValue<T>(resource: URI, arg2?: any, arg3?: any): T {
		const position: IPosition = EditorPosition.isIPosition(arg2) ? arg2 : null;
		const section: string = position ? (typeof arg3 === 'string' ? arg3 : void 0) : (typeof arg2 === 'string' ? arg2 : void 0);
		return this.configurationService.getValue(section, { resource });
1251
	}
B
Benjamin Pasero 已提交
1252 1253
}

R
Ramya Achutha Rao 已提交
1254 1255 1256 1257 1258 1259 1260 1261
export class TestHashService implements IHashService {
	_serviceBrand: any;

	createSHA1(content: string): string {
		return content;
	}
}

B
Benjamin Pasero 已提交
1262 1263
export function getRandomTestPath(tmpdir: string, ...segments: string[]): string {
	return paths.join(tmpdir, ...segments, generateUuid());
1264
}