workbenchTestServices.ts 46.8 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/parts/files/electron-browser/files.contribution'; // load our contribution into the test
S
Sandeep Somavarapu 已提交
7
import { FileEditorInput } from 'vs/workbench/parts/files/common/editors/fileEditorInput';
J
Joao Moreno 已提交
8
import { TPromise } from 'vs/base/common/winjs.base';
9
import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
10
import * as paths from 'vs/base/common/paths';
11
import * as resources from 'vs/base/common/resources';
12
import { URI } from 'vs/base/common/uri';
13 14
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
B
Benjamin Pasero 已提交
15
import { ConfirmResult, IEditorInputWithOptions, CloseDirection, IEditorIdentifier, IUntitledResourceInput, IResourceDiffInput, IResourceSideBySideInput, IEditorInput, IEditor, IEditorCloseEvent } from 'vs/workbench/common/editor';
B
Benjamin Pasero 已提交
16
import { IEditorOpeningEvent, EditorServiceImpl, IEditorGroupView, EditorGroupsServiceImpl } from 'vs/workbench/browser/parts/editor/editor';
M
Matt Bierner 已提交
17
import { Event, Emitter } from 'vs/base/common/event';
E
Erich Gamma 已提交
18
import Severity from 'vs/base/common/severity';
19
import { IBackupFileService } from 'vs/workbench/services/backup/common/backup';
20
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
21
import { IPartService, Parts, Position as PartPosition, IDimension } from 'vs/workbench/services/part/common/partService';
22
import { TextModelResolverService } from 'vs/workbench/services/textmodelResolver/common/textModelResolverService';
23
import { ITextModelService } from 'vs/editor/common/services/resolverService';
B
Benjamin Pasero 已提交
24
import { IEditorOptions, IResourceInput } from 'vs/platform/editor/common/editor';
J
Johannes Rieken 已提交
25
import { IUntitledEditorService, UntitledEditorService } from 'vs/workbench/services/untitled/common/untitledEditorService';
S
Sandeep Somavarapu 已提交
26
import { IWorkspaceContextService, IWorkspace as IWorkbenchWorkspace, WorkbenchState, IWorkspaceFolder, IWorkspaceFoldersChangeEvent, Workspace } from 'vs/platform/workspace/common/workspace';
27
import { ILifecycleService, BeforeShutdownEvent, ShutdownReason, StartupKind, LifecyclePhase, WillShutdownEvent } from 'vs/platform/lifecycle/common/lifecycle';
J
Johannes Rieken 已提交
28
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
29
import { TextFileService } from 'vs/workbench/services/textfile/common/textFileService';
30
import { FileOperationEvent, IFileService, IResolveContentOptions, FileOperationError, IFileStat, IResolveFileResult, FileChangesEvent, IResolveFileOptions, IContent, IUpdateContentOptions, IStreamContent, ICreateFileOptions, ITextSnapshot, IResourceEncodings } from 'vs/platform/files/common/files';
31
import { IModelService } from 'vs/editor/common/services/modelService';
32
import { ModeServiceImpl } from 'vs/editor/common/services/modeServiceImpl';
J
Johannes Rieken 已提交
33 34 35 36 37 38
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';
import { IHistoryService } from 'vs/workbench/services/history/common/history';
39
import { IInstantiationService, ServicesAccessor, ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation';
40
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
S
SteVen Batten 已提交
41
import { IWindowsService, IWindowService, INativeOpenDialogOptions, IEnterWorkspaceResult, IMessageBoxResult, IWindowConfiguration, MenuBarVisibility } from 'vs/platform/windows/common/windows';
S
Sandeep Somavarapu 已提交
42
import { TestWorkspace } from 'vs/platform/workspace/test/common/testWorkspace';
43
import { createTextBufferFactory } from 'vs/editor/common/model/textModel';
B
Benjamin Pasero 已提交
44
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
45
import { IThemeService } from 'vs/platform/theme/common/themeService';
B
Benjamin Pasero 已提交
46 47
import { generateUuid } from 'vs/base/common/uuid';
import { TestThemeService } from 'vs/platform/theme/test/common/testThemeService';
48
import { IWorkspaceIdentifier, IWorkspaceFolderCreationData, ISingleFolderWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces';
B
Benjamin Pasero 已提交
49
import { IRecentlyOpened } from 'vs/platform/history/common/history';
S
Sandeep Somavarapu 已提交
50
import { ITextResourceConfigurationService, ITextResourcePropertiesService } from 'vs/editor/common/services/resourceConfiguration';
51
import { IPosition, Position as EditorPosition } from 'vs/editor/common/core/position';
B
Benjamin Pasero 已提交
52
import { IMenuService, MenuId, IMenu, ISerializableCommandAction } from 'vs/platform/actions/common/actions';
R
Ramya Achutha Rao 已提交
53
import { IHashService } from 'vs/workbench/services/hash/common/hashService';
I
isidor 已提交
54
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
B
Benjamin Pasero 已提交
55
import { MockContextKeyService, MockKeybindingService } from 'vs/platform/keybinding/test/common/mockKeybindingService';
B
Benjamin Pasero 已提交
56
import { ITextBufferFactory, DefaultEndOfLine, EndOfLinePreference, IModelDecorationOptions, ITextModel } from 'vs/editor/common/model';
57
import { Range } from 'vs/editor/common/core/range';
M
Martin Aeschlimann 已提交
58
import { IConfirmation, IConfirmationResult, IDialogService, IDialogOptions, IPickAndOpenOptions, ISaveDialogOptions, IOpenDialogOptions, IFileDialogService } from 'vs/platform/dialogs/common/dialogs';
59 60
import { INotificationService } from 'vs/platform/notification/common/notification';
import { TestNotificationService } from 'vs/platform/notification/test/common/testNotificationService';
61
import { IExtensionService, ProfileSession, IExtensionsStatus, ExtensionPointContribution, IExtensionDescription, IWillActivateEvent, IResponsiveStateChangeEvent } from '../services/extensions/common/extensions';
B
Benjamin Pasero 已提交
62
import { IExtensionPoint } from 'vs/workbench/services/extensions/common/extensionsRegistry';
B
Benjamin Pasero 已提交
63
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
B
Benjamin Pasero 已提交
64
import { IDecorationsService, IResourceDecorationChangeEvent, IDecoration, IDecorationData, IDecorationsProvider } from 'vs/workbench/services/decorations/browser/decorations';
J
Joao Moreno 已提交
65
import { IDisposable, toDisposable, Disposable } from 'vs/base/common/lifecycle';
66
import { IEditorGroupsService, IEditorGroup, GroupsOrder, GroupsArrangement, GroupDirection, IAddGroupOptions, IMergeGroupOptions, IMoveEditorOptions, ICopyEditorOptions, IEditorReplacement, IGroupChangeEvent, EditorsOrder, IFindGroupScope, EditorGroupLayout } from 'vs/workbench/services/group/common/editorGroupsService';
67
import { IEditorService, IOpenEditorOverrideHandler } from 'vs/workbench/services/editor/common/editorService';
B
Benjamin Pasero 已提交
68 69 70
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 已提交
71
import { EditorGroup } from 'vs/workbench/common/editor/editorGroup';
72
import { Dimension } from 'vs/base/browser/dom';
73
import { ILogService, LogLevel } from 'vs/platform/log/common/log';
I
isidor 已提交
74
import { ILabelService, LabelService } from 'vs/platform/label/common/label';
75
import { timeout } from 'vs/base/common/async';
76 77 78 79
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
import { ViewletDescriptor } from 'vs/workbench/browser/viewlet';
import { IViewlet } from 'vs/workbench/common/viewlet';
import { IProgressService } from 'vs/platform/progress/common/progress';
80
import { IStorageService, InMemoryStorageService } from 'vs/platform/storage/common/storage';
S
Sandeep Somavarapu 已提交
81
import { isLinux, isMacintosh } from 'vs/base/common/platform';
B
Benjamin Pasero 已提交
82

S
Sandeep Somavarapu 已提交
83 84 85 86
export function createFileInput(instantiationService: IInstantiationService, resource: URI): FileEditorInput {
	return instantiationService.createInstance(FileEditorInput, resource, void 0);
}

87
export const TestEnvironmentService = new EnvironmentService(parseArgs(process.argv), process.execPath);
88

89
export class TestContextService implements IWorkspaceContextService {
90
	public _serviceBrand: any;
E
Erich Gamma 已提交
91

S
Sandeep Somavarapu 已提交
92
	private workspace: Workspace;
E
Erich Gamma 已提交
93 94
	private options: any;

M
Matt Bierner 已提交
95 96 97
	private readonly _onDidChangeWorkspaceName: Emitter<void>;
	private readonly _onDidChangeWorkspaceFolders: Emitter<IWorkspaceFoldersChangeEvent>;
	private readonly _onDidChangeWorkbenchState: Emitter<WorkbenchState>;
98

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

S
Sandeep Somavarapu 已提交
106 107 108 109
	public get onDidChangeWorkspaceName(): Event<void> {
		return this._onDidChangeWorkspaceName.event;
	}

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

114 115 116 117
	public get onDidChangeWorkbenchState(): Event<WorkbenchState> {
		return this._onDidChangeWorkbenchState.event;
	}

S
Sandeep Somavarapu 已提交
118
	public getFolders(): IWorkspaceFolder[] {
S
Sandeep Somavarapu 已提交
119
		return this.workspace ? this.workspace.folders : [];
E
Erich Gamma 已提交
120 121
	}

122
	public getWorkbenchState(): WorkbenchState {
B
Benjamin Pasero 已提交
123 124 125 126 127
		if (this.workspace.configuration) {
			return WorkbenchState.WORKSPACE;
		}

		if (this.workspace.folders.length) {
128
			return WorkbenchState.FOLDER;
129
		}
B
Benjamin Pasero 已提交
130

131
		return WorkbenchState.EMPTY;
S
Sandeep Somavarapu 已提交
132 133
	}

134
	public getWorkspace(): IWorkbenchWorkspace {
B
Benjamin Pasero 已提交
135
		return this.workspace;
136 137
	}

S
Sandeep Somavarapu 已提交
138
	public getWorkspaceFolder(resource: URI): IWorkspaceFolder {
S
Sandeep Somavarapu 已提交
139
		return this.workspace.getFolder(resource);
140 141
	}

D
Daniel Imms 已提交
142 143 144 145
	public setWorkspace(workspace: any): void {
		this.workspace = workspace;
	}

E
Erich Gamma 已提交
146 147 148 149 150 151 152 153 154 155
	public getOptions() {
		return this.options;
	}

	public updateOptions() {

	}

	public isInsideWorkspace(resource: URI): boolean {
		if (resource && this.workspace) {
156
			return resources.isEqualOrParent(resource, this.workspace.folders[0].uri);
E
Erich Gamma 已提交
157 158 159 160 161 162
		}

		return false;
	}

	public toResource(workspaceRelativePath: string): URI {
163
		return URI.file(paths.join('C:\\', workspaceRelativePath));
E
Erich Gamma 已提交
164
	}
165

166
	public isCurrentWorkspace(workspaceIdentifier: ISingleFolderWorkspaceIdentifier | IWorkspaceIdentifier): boolean {
167
		return isSingleFolderWorkspaceIdentifier(workspaceIdentifier) && resources.isEqual(this.workspace.folders[0].uri, workspaceIdentifier);
168
	}
E
Erich Gamma 已提交
169 170
}

171
export class TestTextFileService extends TextFileService {
172 173
	public cleanupBackupsBeforeShutdownCalled: boolean;

M
Martin Aeschlimann 已提交
174
	private promptPath: URI;
175
	private confirmResult: ConfirmResult;
176
	private resolveTextContentError: FileOperationError;
A
Alex Dima 已提交
177 178

	constructor(
179 180
		@ILifecycleService lifecycleService: ILifecycleService,
		@IWorkspaceContextService contextService: IWorkspaceContextService,
A
Alex Dima 已提交
181 182
		@IConfigurationService configurationService: IConfigurationService,
		@IFileService fileService: IFileService,
183
		@IUntitledEditorService untitledEditorService: IUntitledEditorService,
184
		@IInstantiationService instantiationService: IInstantiationService,
185
		@INotificationService notificationService: INotificationService,
186
		@IBackupFileService backupFileService: IBackupFileService,
187
		@IWindowsService windowsService: IWindowsService,
M
Martin Aeschlimann 已提交
188
		@IWindowService windowService: IWindowService,
I
isidor 已提交
189
		@IHistoryService historyService: IHistoryService,
B
Benjamin Pasero 已提交
190 191
		@IContextKeyService contextKeyService: IContextKeyService,
		@IModelService modelService: IModelService
A
Alex Dima 已提交
192
	) {
M
Martin Aeschlimann 已提交
193
		super(lifecycleService, contextService, configurationService, fileService, untitledEditorService, instantiationService, notificationService, TestEnvironmentService, backupFileService, windowsService, windowService, historyService, contextKeyService, modelService);
A
Alex Dima 已提交
194
	}
195

M
Martin Aeschlimann 已提交
196
	public setPromptPath(path: URI): void {
197 198 199 200 201 202 203
		this.promptPath = path;
	}

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

204
	public setResolveTextContentErrorOnce(error: FileOperationError): void {
205 206 207
		this.resolveTextContentError = error;
	}

208
	public resolveTextContent(resource: URI, options?: IResolveContentOptions): TPromise<IRawTextContent> {
209 210 211 212
		if (this.resolveTextContentError) {
			const error = this.resolveTextContentError;
			this.resolveTextContentError = null;

B
Benjamin Pasero 已提交
213
			return Promise.reject(error);
214 215
		}

216 217
		return this.fileService.resolveContent(resource, options).then((content): IRawTextContent => {
			return {
218
				resource: content.resource,
219 220 221 222
				name: content.name,
				mtime: content.mtime,
				etag: content.etag,
				encoding: content.encoding,
223
				value: createTextBufferFactory(content.value)
224 225 226
			};
		});
	}
227

228
	public promptForPath(_resource: URI, _defaultPath: URI): TPromise<URI> {
229
		return TPromise.wrap(this.promptPath);
230 231
	}

232
	public confirmSave(_resources?: URI[]): TPromise<ConfirmResult> {
233
		return TPromise.wrap(this.confirmResult);
234
	}
D
Daniel Imms 已提交
235

236 237
	public onFilesConfigurationChange(configuration: any): void {
		super.onFilesConfigurationChange(configuration);
238 239 240 241 242 243
	}

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

246
export function workbenchInstantiationService(): IInstantiationService {
247
	let instantiationService = new TestInstantiationService(new ServiceCollection([ILifecycleService, new TestLifecycleService()]));
I
isidor 已提交
248
	instantiationService.stub(IContextKeyService, <IContextKeyService>instantiationService.createInstance(MockContextKeyService));
I
isidor 已提交
249 250
	const workspaceContextService = new TestContextService(TestWorkspace);
	instantiationService.stub(IWorkspaceContextService, workspaceContextService);
251 252 253
	const configService = new TestConfigurationService();
	instantiationService.stub(IConfigurationService, configService);
	instantiationService.stub(ITextResourceConfigurationService, new TestTextResourceConfigurationService(configService));
254
	instantiationService.stub(IUntitledEditorService, instantiationService.createInstance(UntitledEditorService));
255
	instantiationService.stub(IStorageService, new TestStorageService());
256
	instantiationService.stub(IPartService, new TestPartService());
257
	instantiationService.stub(IModeService, ModeServiceImpl);
B
Benjamin Pasero 已提交
258
	instantiationService.stub(IHistoryService, new TestHistoryService());
S
Sandeep Somavarapu 已提交
259
	instantiationService.stub(ITextResourcePropertiesService, new TestTextResourcePropertiesService(configService));
S
Sandeep Somavarapu 已提交
260
	instantiationService.stub(IModelService, instantiationService.createInstance(ModelServiceImpl));
261
	instantiationService.stub(IFileService, new TestFileService());
262
	instantiationService.stub(IBackupFileService, new TestBackupFileService());
263
	instantiationService.stub(ITelemetryService, NullTelemetryService);
264
	instantiationService.stub(INotificationService, new TestNotificationService());
B
Benjamin Pasero 已提交
265
	instantiationService.stub(IUntitledEditorService, instantiationService.createInstance(UntitledEditorService));
266
	instantiationService.stub(IWindowService, new TestWindowService());
B
Benjamin Pasero 已提交
267 268 269 270
	instantiationService.stub(IMenuService, new TestMenuService());
	instantiationService.stub(IKeybindingService, new MockKeybindingService());
	instantiationService.stub(IDecorationsService, new TestDecorationsService());
	instantiationService.stub(IExtensionService, new TestExtensionService());
271
	instantiationService.stub(IWindowsService, new TestWindowsService());
272
	instantiationService.stub(ITextFileService, <ITextFileService>instantiationService.createInstance(TestTextFileService));
273
	instantiationService.stub(ITextModelService, <ITextModelService>instantiationService.createInstance(TextModelResolverService));
B
Benjamin Pasero 已提交
274
	instantiationService.stub(IEnvironmentService, TestEnvironmentService);
B
Benjamin Pasero 已提交
275
	instantiationService.stub(IThemeService, new TestThemeService());
R
Ramya Achutha Rao 已提交
276
	instantiationService.stub(IHashService, new TestHashService());
I
isidor 已提交
277
	instantiationService.stub(ILogService, new TestLogService());
278
	instantiationService.stub(IEditorGroupsService, new TestEditorGroupsService([new TestEditorGroup(0)]));
M
Martin Aeschlimann 已提交
279
	instantiationService.stub(ILabelService, <ILabelService>instantiationService.createInstance(LabelService));
B
Benjamin Pasero 已提交
280
	const editorService = new TestEditorService();
281
	instantiationService.stub(IEditorService, editorService);
B
Benjamin Pasero 已提交
282
	instantiationService.stub(ICodeEditorService, new TestCodeEditorService());
283
	instantiationService.stub(IViewletService, new TestViewletService());
284 285 286 287

	return instantiationService;
}

I
isidor 已提交
288 289 290
export class TestLogService implements ILogService {
	_serviceBrand: any; onDidChangeLogLevel: Event<LogLevel>;
	getLevel(): LogLevel { return LogLevel.Info; }
291 292 293 294 295 296 297
	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 已提交
298 299 300
	dispose(): void { }
}

B
Benjamin Pasero 已提交
301 302 303
export class TestDecorationsService implements IDecorationsService {
	_serviceBrand: any;
	onDidChangeDecorations: Event<IResourceDecorationChangeEvent> = Event.None;
304 305
	registerDecorationsProvider(_provider: IDecorationsProvider): IDisposable { return Disposable.None; }
	getDecoration(_uri: URI, _includeChildren: boolean, _overwrite?: IDecorationData): IDecoration { return void 0; }
B
Benjamin Pasero 已提交
306 307 308 309 310 311
}

export class TestExtensionService implements IExtensionService {
	_serviceBrand: any;
	onDidRegisterExtensions: Event<void> = Event.None;
	onDidChangeExtensionsStatus: Event<string[]> = Event.None;
312
	onWillActivateByEvent: Event<IWillActivateEvent> = Event.None;
313
	onDidChangeResponsiveChange: Event<IResponsiveStateChangeEvent> = Event.None;
A
Alex Dima 已提交
314 315 316
	activateByEvent(_activationEvent: string): Thenable<void> { return Promise.resolve(void 0); }
	whenInstalledExtensionsRegistered(): Promise<boolean> { return Promise.resolve(true); }
	getExtensions(): Promise<IExtensionDescription[]> { return Promise.resolve([]); }
317
	getExtension() { return Promise.resolve(undefined); }
A
Alex Dima 已提交
318
	readExtensionPointContributions<T>(_extPoint: IExtensionPoint<T>): Promise<ExtensionPointContribution<T>[]> { return Promise.resolve(Object.create(null)); }
B
Benjamin Pasero 已提交
319 320
	getExtensionsStatus(): { [id: string]: IExtensionsStatus; } { return Object.create(null); }
	canProfileExtensionHost(): boolean { return false; }
321
	getInspectPort(): number { return 0; }
A
Alex Dima 已提交
322
	startExtensionHostProfile(): Promise<ProfileSession> { return Promise.resolve(Object.create(null)); }
B
Benjamin Pasero 已提交
323 324 325 326 327 328 329 330 331
	restartExtensionHost(): void { }
	startExtensionHost(): void { }
	stopExtensionHost(): void { }
}

export class TestMenuService implements IMenuService {

	public _serviceBrand: any;

332
	createMenu(_id: MenuId, _scopedKeybindingService: IContextKeyService): IMenu {
B
Benjamin Pasero 已提交
333 334 335 336 337 338 339 340
		return {
			onDidChange: Event.None,
			dispose: () => void 0,
			getActions: () => []
		};
	}
}

B
Benjamin Pasero 已提交
341 342 343 344 345 346 347 348 349 350
export class TestHistoryService implements IHistoryService {

	public _serviceBrand: any;

	constructor(private root?: URI) {
	}

	public reopenLastClosedEditor(): void {
	}

351
	public forward(_acrossEditors?: boolean): void {
B
Benjamin Pasero 已提交
352 353
	}

354
	public back(_acrossEditors?: boolean): void {
B
Benjamin Pasero 已提交
355 356
	}

357 358 359
	public last(): void {
	}

360
	public remove(_input: IEditorInput | IResourceInput): void {
B
Benjamin Pasero 已提交
361 362 363 364 365
	}

	public clear(): void {
	}

B
Benjamin Pasero 已提交
366 367 368
	public clearRecentlyOpened(): void {
	}

B
Benjamin Pasero 已提交
369 370 371 372
	public getHistory(): (IEditorInput | IResourceInput)[] {
		return [];
	}

373
	public getLastActiveWorkspaceRoot(_schemeFilter: string): URI {
B
Benjamin Pasero 已提交
374 375
		return this.root;
	}
376

377
	public getLastActiveFile(_schemeFilter: string): URI {
378 379
		return void 0;
	}
B
Benjamin Pasero 已提交
380 381 382

	public openLastEditLocation(): void {
	}
B
Benjamin Pasero 已提交
383 384
}

385
export class TestDialogService implements IDialogService {
386 387

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

389
	public confirm(_confirmation: IConfirmation): TPromise<IConfirmationResult> {
390 391
		return TPromise.as({ confirmed: false });
	}
392

393
	public show(_severity: Severity, _message: string, _buttons: string[], _options?: IDialogOptions): TPromise<number> {
394 395
		return TPromise.as(0);
	}
E
Erich Gamma 已提交
396 397
}

M
Martin Aeschlimann 已提交
398 399 400 401
export class TestFileDialogService implements IFileDialogService {

	public _serviceBrand: any;

402
	public defaultFilePath(_schemeFilter: string): URI {
M
Martin Aeschlimann 已提交
403 404
		return void 0;
	}
405
	public defaultFolderPath(_schemeFilter: string): URI {
M
Martin Aeschlimann 已提交
406 407
		return void 0;
	}
408
	public defaultWorkspacePath(_schemeFilter: string): URI {
M
Martin Aeschlimann 已提交
409 410
		return void 0;
	}
411
	public pickFileFolderAndOpen(_options: IPickAndOpenOptions): TPromise<any> {
M
Martin Aeschlimann 已提交
412 413
		return TPromise.as(0);
	}
414
	public pickFileAndOpen(_options: IPickAndOpenOptions): TPromise<any> {
M
Martin Aeschlimann 已提交
415 416
		return TPromise.as(0);
	}
417
	public pickFolderAndOpen(_options: IPickAndOpenOptions): TPromise<any> {
M
Martin Aeschlimann 已提交
418 419
		return TPromise.as(0);
	}
420
	public pickWorkspaceAndOpen(_options: IPickAndOpenOptions): TPromise<any> {
M
Martin Aeschlimann 已提交
421 422
		return TPromise.as(0);
	}
423
	public showSaveDialog(_options: ISaveDialogOptions): TPromise<URI> {
M
Martin Aeschlimann 已提交
424 425
		return TPromise.as(void 0);
	}
426
	public showOpenDialog(_options: IOpenDialogOptions): TPromise<URI[]> {
M
Martin Aeschlimann 已提交
427 428 429 430
		return TPromise.as(void 0);
	}
}

431
export class TestPartService implements IPartService {
B
Benjamin Pasero 已提交
432

433
	public _serviceBrand: any;
E
Erich Gamma 已提交
434

435
	private _onTitleBarVisibilityChange = new Emitter<void>();
436
	private _onMenubarVisibilityChange = new Emitter<Dimension>();
437
	private _onEditorLayout = new Emitter<IDimension>();
438 439 440 441 442

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

443 444 445 446
	public get onMenubarVisibilityChange(): Event<Dimension> {
		return this._onMenubarVisibilityChange.event;
	}

447
	public get onEditorLayout(): Event<IDimension> {
448 449 450
		return this._onEditorLayout.event;
	}

B
Benjamin Pasero 已提交
451
	public isRestored(): boolean {
E
Erich Gamma 已提交
452 453 454
		return true;
	}

455
	public hasFocus(_part: Parts): boolean {
E
Erich Gamma 已提交
456 457 458
		return false;
	}

459
	public isVisible(_part: Parts): boolean {
E
Erich Gamma 已提交
460 461 462
		return true;
	}

463
	public getContainer(_part: Parts): HTMLElement {
464 465 466
		return null;
	}

B
Benjamin Pasero 已提交
467 468 469 470
	public isTitleBarHidden(): boolean {
		return false;
	}

471 472 473 474
	public getTitleBarOffset(): number {
		return 0;
	}

475 476 477 478
	public isStatusBarHidden(): boolean {
		return false;
	}

S
Sanders Lauture 已提交
479 480 481 482
	public isActivityBarHidden(): boolean {
		return false;
	}

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

E
Erich Gamma 已提交
485 486 487 488
	public isSideBarHidden(): boolean {
		return false;
	}

489
	public setSideBarHidden(_hidden: boolean): TPromise<void> { return TPromise.as(null); }
E
Erich Gamma 已提交
490

I
isidor 已提交
491
	public isPanelHidden(): boolean {
I
isidor 已提交
492 493 494
		return false;
	}

495
	public setPanelHidden(_hidden: boolean): TPromise<void> { return TPromise.as(null); }
I
isidor 已提交
496

I
isidor 已提交
497 498
	public toggleMaximizedPanel(): void { }

B
Benjamin Pasero 已提交
499 500 501 502
	public isPanelMaximized(): boolean {
		return false;
	}

S
SteVen Batten 已提交
503 504 505 506
	public getMenubarVisibility(): MenuBarVisibility {
		return null;
	}

E
Erich Gamma 已提交
507 508 509 510
	public getSideBarPosition() {
		return 0;
	}

I
isidor 已提交
511 512 513 514
	public getPanelPosition() {
		return 0;
	}

515
	public setPanelPosition(_position: PartPosition): TPromise<void> {
I
isidor 已提交
516 517 518
		return TPromise.as(null);
	}

519 520
	public addClass(_clazz: string): void { }
	public removeClass(_clazz: string): void { }
521
	public getWorkbenchElement(): HTMLElement { return void 0; }
B
Benjamin Pasero 已提交
522

I
isidor 已提交
523
	public toggleZenMode(): void { }
524

B
Benjamin Pasero 已提交
525
	public isEditorLayoutCentered(): boolean { return false; }
526
	public centerEditorLayout(_active: boolean): void { }
S
SrTobi 已提交
527 528


529
	public resizePart(_part: Parts, _sizeChange: number): void { }
E
Erich Gamma 已提交
530 531
}

532
export class TestStorageService extends InMemoryStorageService { }
533

B
Benjamin Pasero 已提交
534
export class TestEditorGroupsService implements EditorGroupsServiceImpl {
535 536
	_serviceBrand: ServiceIdentifier<any>;

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

539 540 541 542
	onDidActiveGroupChange: Event<IEditorGroup> = Event.None;
	onDidAddGroup: Event<IEditorGroup> = Event.None;
	onDidRemoveGroup: Event<IEditorGroup> = Event.None;
	onDidMoveGroup: Event<IEditorGroup> = Event.None;
543 544

	orientation: any;
545
	whenRestored: Thenable<void> = Promise.resolve(void 0);
546

547
	get activeGroup(): IEditorGroup {
548 549 550 551 552 553 554
		return this.groups[0];
	}

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

555
	getGroups(_order?: GroupsOrder): ReadonlyArray<IEditorGroup> {
556 557 558
		return this.groups;
	}

559
	getGroup(identifier: number): IEditorGroup {
560 561 562 563 564 565 566 567 568
		for (let i = 0; i < this.groups.length; i++) {
			if (this.groups[i].id === identifier) {
				return this.groups[i];
			}
		}

		return void 0;
	}

569
	getLabel(_identifier: number): string {
570 571 572
		return 'Group 1';
	}

573
	findGroup(_scope: IFindGroupScope, _source?: number | IEditorGroup, _wrap?: boolean): IEditorGroup {
574 575 576
		return null;
	}

577
	activateGroup(_group: number | IEditorGroup): IEditorGroup {
578 579 580
		return null;
	}

581
	getSize(_group: number | IEditorGroup): number {
582
		return 100;
583 584
	}

585
	setSize(_group: number | IEditorGroup, _size: number): void { }
586

587
	arrangeGroups(_arrangement: GroupsArrangement): void { }
588

589
	applyLayout(_layout: EditorGroupLayout): void { }
590

591
	setGroupOrientation(_orientation: any): void { }
592

593
	addGroup(_location: number | IEditorGroup, _direction: GroupDirection, _options?: IAddGroupOptions): IEditorGroup {
594 595 596
		return null;
	}

597
	removeGroup(_group: number | IEditorGroup): void { }
598

599
	moveGroup(_group: number | IEditorGroup, _location: number | IEditorGroup, _direction: GroupDirection): IEditorGroup {
600 601 602
		return null;
	}

603
	mergeGroup(_group: number | IEditorGroup, _target: number | IEditorGroup, _options?: IMergeGroupOptions): IEditorGroup {
604 605 606
		return null;
	}

607
	copyGroup(_group: number | IEditorGroup, _location: number | IEditorGroup, _direction: GroupDirection): IEditorGroup {
608 609 610 611
		return null;
	}
}

B
Benjamin Pasero 已提交
612
export class TestEditorGroup implements IEditorGroupView {
613 614 615

	constructor(public id: number) { }

B
Benjamin Pasero 已提交
616
	group: EditorGroup = void 0;
617 618 619 620
	activeControl: IEditor;
	activeEditor: IEditorInput;
	previewEditor: IEditorInput;
	count: number;
B
Benjamin Pasero 已提交
621
	disposed: boolean;
B
Benjamin Pasero 已提交
622
	editors: ReadonlyArray<IEditorInput> = [];
623
	label: string;
624
	whenRestored: Thenable<void> = Promise.resolve(void 0);
B
Benjamin Pasero 已提交
625 626 627 628 629
	element: HTMLElement;
	minimumWidth: number;
	maximumWidth: number;
	minimumHeight: number;
	maximumHeight: number;
630 631

	onWillDispose: Event<void> = Event.None;
632
	onDidGroupChange: Event<IGroupChangeEvent> = Event.None;
B
Benjamin Pasero 已提交
633 634
	onWillCloseEditor: Event<IEditorCloseEvent> = Event.None;
	onDidCloseEditor: Event<IEditorCloseEvent> = Event.None;
635 636
	onWillOpenEditor: Event<IEditorOpeningEvent> = Event.None;
	onDidOpenEditorFail: Event<IEditorInput> = Event.None;
B
Benjamin Pasero 已提交
637 638
	onDidFocus: Event<void> = Event.None;
	onDidChange: Event<{ width: number; height: number; }> = Event.None;
639

640
	getEditors(_order?: EditorsOrder): ReadonlyArray<IEditorInput> {
B
Benjamin Pasero 已提交
641 642 643
		return [];
	}

644
	getEditor(_index: number): IEditorInput {
645 646 647
		return null;
	}

648
	getIndexOfEditor(_editor: IEditorInput): number {
649 650 651
		return -1;
	}

652 653
	openEditor(_editor: IEditorInput, _options?: IEditorOptions): TPromise<IEditor> {
		return TPromise.as(null);
654 655
	}

656 657
	openEditors(_editors: IEditorInputWithOptions[]): TPromise<IEditor> {
		return TPromise.as(null);
658 659
	}

660
	isOpened(_editor: IEditorInput): boolean {
661 662 663
		return false;
	}

664
	isPinned(_editor: IEditorInput): boolean {
665 666 667
		return false;
	}

668
	isActive(_editor: IEditorInput): boolean {
669 670 671
		return false;
	}

672
	moveEditor(_editor: IEditorInput, _target: IEditorGroup, _options?: IMoveEditorOptions): void { }
673

674
	copyEditor(_editor: IEditorInput, _target: IEditorGroup, _options?: ICopyEditorOptions): void { }
675

676
	closeEditor(_editor?: IEditorInput): TPromise<void> {
677 678 679
		return TPromise.as(void 0);
	}

680
	closeEditors(_editors: IEditorInput[] | { except?: IEditorInput; direction?: CloseDirection; savedOnly?: boolean; }): TPromise<void> {
681 682 683
		return TPromise.as(void 0);
	}

684
	closeAllEditors(): TPromise<void> {
685 686 687
		return TPromise.as(void 0);
	}

688
	replaceEditors(_editors: IEditorReplacement[]): TPromise<void> {
689 690 691
		return TPromise.as(void 0);
	}

692
	pinEditor(_editor?: IEditorInput): void { }
693 694 695 696 697 698

	focus(): void { }

	invokeWithinContext<T>(fn: (accessor: ServicesAccessor) => T): T {
		return fn(null);
	}
B
Benjamin Pasero 已提交
699 700

	isEmpty(): boolean { return true; }
701 702
	setActive(_isActive: boolean): void { }
	setLabel(_label: string): void { }
B
Benjamin Pasero 已提交
703 704
	dispose(): void { }
	toJSON(): object { return Object.create(null); }
705
	layout(_width: number, _height: number): void { }
706
	relayout() { }
707 708
}

B
Benjamin Pasero 已提交
709
export class TestEditorService implements EditorServiceImpl {
710 711 712 713 714

	_serviceBrand: ServiceIdentifier<any>;

	onDidActiveEditorChange: Event<void> = Event.None;
	onDidVisibleEditorsChange: Event<void> = Event.None;
B
Benjamin Pasero 已提交
715
	onDidCloseEditor: Event<IEditorCloseEvent> = Event.None;
716 717 718
	onDidOpenEditorFail: Event<IEditorIdentifier> = Event.None;

	activeControl: IEditor;
719
	activeTextEditorWidget: any;
720
	activeEditor: IEditorInput;
721
	editors: ReadonlyArray<IEditorInput> = [];
B
Benjamin Pasero 已提交
722
	visibleControls: ReadonlyArray<IEditor> = [];
723
	visibleTextEditorWidgets = [];
B
Benjamin Pasero 已提交
724
	visibleEditors: ReadonlyArray<IEditorInput> = [];
725

726
	overrideOpenEditor(_handler: IOpenEditorOverrideHandler): IDisposable {
727 728 729
		return toDisposable(() => void 0);
	}

730
	openEditor(_editor: any, _options?: any, _group?: any) {
731 732 733
		return TPromise.as(null);
	}

734
	openEditors(_editors: any, _group?: any) {
735 736 737
		return TPromise.as(null);
	}

738
	isOpen(_editor: IEditorInput | IResourceInput | IUntitledResourceInput): boolean {
739 740 741
		return false;
	}

742
	getOpened(_editor: IEditorInput | IResourceInput | IUntitledResourceInput): IEditorInput {
743 744 745
		return void 0;
	}

746
	replaceEditors(_editors: any, _group: any) {
747 748 749
		return TPromise.as(void 0);
	}

750 751 752 753
	invokeWithinEditorContext<T>(fn: (accessor: ServicesAccessor) => T): T {
		return fn(null);
	}

754
	createInput(_input: IResourceInput | IUntitledResourceInput | IResourceDiffInput | IResourceSideBySideInput): IEditorInput {
755 756 757 758
		return null;
	}
}

759 760 761 762
export class TestFileService implements IFileService {

	public _serviceBrand: any;

763 764
	public encoding: IResourceEncodings;

M
Matt Bierner 已提交
765 766
	private readonly _onFileChanges: Emitter<FileChangesEvent>;
	private readonly _onAfterOperation: Emitter<FileOperationEvent>;
767

768 769
	private content = 'Hello Html';

770 771 772 773 774
	constructor() {
		this._onFileChanges = new Emitter<FileChangesEvent>();
		this._onAfterOperation = new Emitter<FileOperationEvent>();
	}

775 776 777 778 779 780 781 782
	public setContent(content: string): void {
		this.content = content;
	}

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

783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798
	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);
	}

799
	resolveFile(resource: URI, _options?: IResolveFileOptions): TPromise<IFileStat> {
A
Alex Dima 已提交
800
		return TPromise.as({
801 802
			resource,
			etag: Date.now().toString(),
B
Benjamin Pasero 已提交
803
			encoding: 'utf8',
B
Benjamin Pasero 已提交
804
			mtime: Date.now(),
805
			isDirectory: false,
B
Benjamin Pasero 已提交
806 807
			name: paths.basename(resource.fsPath)
		});
808
	}
B
Benjamin Pasero 已提交
809

I
isidor 已提交
810 811
	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 已提交
812 813
	}

814
	existsFile(_resource: URI): TPromise<boolean> {
815 816
		return TPromise.as(null);
	}
B
Benjamin Pasero 已提交
817

818
	resolveContent(resource: URI, _options?: IResolveContentOptions): TPromise<IContent> {
B
Benjamin Pasero 已提交
819 820
		return TPromise.as({
			resource: resource,
821
			value: this.content,
822
			etag: 'index.txt',
B
Benjamin Pasero 已提交
823 824
			encoding: 'utf8',
			mtime: Date.now(),
825
			name: paths.basename(resource.fsPath)
E
Erich Gamma 已提交
826
		});
827
	}
E
Erich Gamma 已提交
828

829
	resolveStreamContent(resource: URI, _options?: IResolveContentOptions): TPromise<IStreamContent> {
A
Alex Dima 已提交
830 831 832
		return TPromise.as({
			resource: resource,
			value: {
833
				on: (event: string, callback: Function): void => {
A
Alex Dima 已提交
834
					if (event === 'data') {
835
						callback(this.content);
A
Alex Dima 已提交
836 837 838 839 840 841 842 843
					}
					if (event === 'end') {
						callback();
					}
				}
			},
			etag: 'index.txt',
			encoding: 'utf8',
B
Benjamin Pasero 已提交
844
			mtime: Date.now(),
845
			name: paths.basename(resource.fsPath)
A
Alex Dima 已提交
846
		});
847 848
	}

849
	updateContent(resource: URI, _value: string | ITextSnapshot, _options?: IUpdateContentOptions): TPromise<IFileStat> {
850 851 852 853 854 855 856 857
		return TPromise.wrap(timeout(0).then(() => ({
			resource,
			etag: 'index.txt',
			encoding: 'utf8',
			mtime: Date.now(),
			isDirectory: false,
			name: paths.basename(resource.fsPath)
		})));
858
	}
D
Daniel Imms 已提交
859

860
	moveFile(_source: URI, _target: URI, _overwrite?: boolean): TPromise<IFileStat> {
861 862
		return TPromise.as(null);
	}
D
Daniel Imms 已提交
863

864
	copyFile(_source: URI, _target: URI, _overwrite?: boolean): TPromise<IFileStat> {
865 866
		return TPromise.as(null);
	}
D
Daniel Imms 已提交
867

868
	createFile(_resource: URI, _content?: string, _options?: ICreateFileOptions): TPromise<IFileStat> {
869
		return TPromise.as(null);
E
Erich Gamma 已提交
870
	}
871

C
Christof Marti 已提交
872 873 874 875
	readFolder(_resource: URI) {
		return TPromise.as([]);
	}

876
	createFolder(_resource: URI): TPromise<IFileStat> {
877 878 879
		return TPromise.as(null);
	}

880 881
	onDidChangeFileSystemProviderRegistrations = Event.None;

882
	registerProvider(_scheme: string, _provider) {
883 884 885
		return { dispose() { } };
	}

886
	activateProvider(_scheme: string) {
B
Benjamin Pasero 已提交
887
		return Promise.resolve(null);
888 889
	}

890 891 892 893
	canHandleResource(resource: URI): boolean {
		return resource.scheme === 'file';
	}

894
	del(_resource: URI, _options?: { useTrash?: boolean, recursive?: boolean }): TPromise<void> {
895 896 897
		return TPromise.as(null);
	}

898
	watchFileChanges(_resource: URI): void {
899 900
	}

901
	unwatchFileChanges(_resource: URI): void {
902 903
	}

904
	getWriteEncoding(_resource: URI): string {
905 906
		return 'utf8';
	}
D
Daniel Imms 已提交
907

908
	dispose(): void {
E
Erich Gamma 已提交
909
	}
910
}
911

912 913
export class TestBackupFileService implements IBackupFileService {
	public _serviceBrand: any;
914 915 916 917 918

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

919
	public hasBackup(_resource: URI): TPromise<boolean> {
920 921 922
		return TPromise.as(false);
	}

B
Benjamin Pasero 已提交
923 924 925
	public loadBackupResource(resource: URI): TPromise<URI> {
		return this.hasBackup(resource).then(hasBackup => {
			if (hasBackup) {
926
				return this.toBackupResource(resource);
B
Benjamin Pasero 已提交
927 928 929 930 931 932
			}

			return void 0;
		});
	}

933
	public registerResourceForBackup(_resource: URI): TPromise<void> {
D
Daniel Imms 已提交
934 935 936
		return TPromise.as(void 0);
	}

937
	public deregisterResourceForBackup(_resource: URI): TPromise<void> {
D
Daniel Imms 已提交
938 939 940
		return TPromise.as(void 0);
	}

941
	public toBackupResource(_resource: URI): URI {
D
Daniel Imms 已提交
942 943
		return null;
	}
944

945
	public backupResource(_resource: URI, _content: ITextSnapshot): TPromise<void> {
946 947 948
		return TPromise.as(void 0);
	}

949
	public getWorkspaceFileBackups(): TPromise<URI[]> {
950 951 952
		return TPromise.as([]);
	}

953 954 955 956 957
	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);
958 959
	}

960
	public resolveBackupContent(_backup: URI): TPromise<ITextBufferFactory> {
961 962 963
		return TPromise.as(null);
	}

964
	public discardResourceBackup(_resource: URI): TPromise<void> {
965 966 967
		return TPromise.as(void 0);
	}

968
	public discardAllWorkspaceBackups(): TPromise<void> {
969 970
		return TPromise.as(void 0);
	}
971
}
D
Daniel Imms 已提交
972

B
Benjamin Pasero 已提交
973 974 975 976 977 978 979
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 已提交
980
	onDidChangeTransientModelProperty: Event<ITextModel> = Event.None;
B
Benjamin Pasero 已提交
981

982 983
	addCodeEditor(_editor: ICodeEditor): void { }
	removeCodeEditor(_editor: ICodeEditor): void { }
B
Benjamin Pasero 已提交
984
	listCodeEditors(): ICodeEditor[] { return []; }
985 986
	addDiffEditor(_editor: IDiffEditor): void { }
	removeDiffEditor(_editor: IDiffEditor): void { }
B
Benjamin Pasero 已提交
987 988
	listDiffEditors(): IDiffEditor[] { return []; }
	getFocusedCodeEditor(): ICodeEditor { return null; }
989 990 991 992 993
	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) { }
994
	getActiveCodeEditor(): ICodeEditor { return null; }
B
Benjamin Pasero 已提交
995
	openCodeEditor(_input: IResourceInput, _source: ICodeEditor, _sideBySide?: boolean): Thenable<ICodeEditor> { return Promise.resolve(); }
B
Benjamin Pasero 已提交
996 997
}

998 999 1000 1001
export class TestWindowService implements IWindowService {

	public _serviceBrand: any;

1002
	onDidChangeFocus: Event<boolean> = new Emitter<boolean>().event;
S
SteVen Batten 已提交
1003
	onDidChangeMaximize: Event<boolean>;
1004

1005 1006
	hasFocus = true;

1007 1008 1009 1010
	isFocused(): TPromise<boolean> {
		return TPromise.as(false);
	}

S
SteVen Batten 已提交
1011 1012 1013 1014
	isMaximized(): TPromise<boolean> {
		return TPromise.as(false);
	}

1015 1016 1017 1018
	getConfiguration(): IWindowConfiguration {
		return Object.create(null);
	}

1019 1020 1021 1022
	getCurrentWindowId(): number {
		return 0;
	}

1023
	pickFileFolderAndOpen(_options: INativeOpenDialogOptions): TPromise<void> {
1024 1025 1026
		return TPromise.as(void 0);
	}

1027
	pickFileAndOpen(_options: INativeOpenDialogOptions): TPromise<void> {
1028 1029 1030
		return TPromise.as(void 0);
	}

1031
	pickFolderAndOpen(_options: INativeOpenDialogOptions): TPromise<void> {
1032 1033 1034
		return TPromise.as(void 0);
	}

1035
	pickWorkspaceAndOpen(_options: INativeOpenDialogOptions): TPromise<void> {
1036 1037 1038
		return TPromise.as(void 0);
	}

1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050
	reloadWindow(): TPromise<void> {
		return TPromise.as(void 0);
	}

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

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

1051
	closeWorkspace(): TPromise<void> {
1052 1053 1054
		return TPromise.as(void 0);
	}

1055
	enterWorkspace(_path: string): TPromise<IEnterWorkspaceResult> {
1056 1057 1058
		return TPromise.as(void 0);
	}

1059
	createAndEnterWorkspace(_folders?: IWorkspaceFolderCreationData[], _path?: string): TPromise<IEnterWorkspaceResult> {
1060 1061 1062
		return TPromise.as(void 0);
	}

1063
	saveAndEnterWorkspace(_path: string): TPromise<IEnterWorkspaceResult> {
1064 1065 1066
		return TPromise.as(void 0);
	}

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

1071
	setRepresentedFilename(_fileName: string): TPromise<void> {
1072 1073 1074
		return TPromise.as(void 0);
	}

1075
	getRecentlyOpened(): TPromise<IRecentlyOpened> {
1076 1077 1078 1079 1080 1081 1082
		return TPromise.as(void 0);
	}

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

S
SteVen Batten 已提交
1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094
	maximizeWindow(): TPromise<void> {
		return TPromise.as(void 0);
	}

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

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

1095
	openWindow(_paths: URI[], _options?: { forceNewWindow?: boolean, forceReuseWindow?: boolean, forceOpenWorkspaceAsFile?: boolean }): TPromise<void> {
B
Benjamin Pasero 已提交
1096 1097 1098
		return TPromise.as(void 0);
	}

1099 1100 1101 1102
	closeWindow(): TPromise<void> {
		return TPromise.as(void 0);
	}

1103
	setDocumentEdited(_flag: boolean): TPromise<void> {
1104 1105 1106
		return TPromise.as(void 0);
	}

1107 1108 1109
	onWindowTitleDoubleClick(): TPromise<void> {
		return TPromise.as(void 0);
	}
1110

J
Joao 已提交
1111 1112 1113 1114
	show(): TPromise<void> {
		return TPromise.as(void 0);
	}

1115
	showMessageBox(_options: Electron.MessageBoxOptions): TPromise<IMessageBoxResult> {
1116
		return TPromise.wrap({ button: 0 });
1117 1118
	}

1119
	showSaveDialog(_options: Electron.SaveDialogOptions): TPromise<string> {
1120
		return TPromise.wrap(void 0);
1121
	}
1122

1123
	showOpenDialog(_options: Electron.OpenDialogOptions): TPromise<string[]> {
1124
		return TPromise.wrap(void 0);
1125
	}
1126

1127
	updateTouchBar(_items: ISerializableCommandAction[][]): TPromise<void> {
1128 1129
		return TPromise.as(void 0);
	}
1130 1131 1132 1133

	resolveProxy(url: string): Promise<string | undefined> {
		return Promise.resolve(void 0);
	}
1134 1135
}

1136 1137
export class TestLifecycleService implements ILifecycleService {

1138
	public _serviceBrand: any;
1139

1140
	public phase: LifecyclePhase;
1141
	public startupKind: StartupKind;
1142

1143
	private _onBeforeShutdown = new Emitter<BeforeShutdownEvent>();
1144
	private _onWillShutdown = new Emitter<WillShutdownEvent>();
1145
	private _onShutdown = new Emitter<void>();
1146

1147
	when(): TPromise<void> {
1148
		return TPromise.as(void 0);
B
Benjamin Pasero 已提交
1149
	}
1150

1151
	public fireShutdown(reason = ShutdownReason.QUIT): void {
1152
		this._onWillShutdown.fire({
1153 1154 1155
			join: () => { },
			reason
		});
1156 1157
	}

1158 1159 1160 1161 1162 1163
	public fireWillShutdown(event: BeforeShutdownEvent): void {
		this._onBeforeShutdown.fire(event);
	}

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

1166
	public get onWillShutdown(): Event<WillShutdownEvent> {
1167 1168 1169
		return this._onWillShutdown.event;
	}

1170
	public get onShutdown(): Event<void> {
1171 1172
		return this._onShutdown.event;
	}
1173 1174
}

1175 1176 1177 1178
export class TestWindowsService implements IWindowsService {

	_serviceBrand: any;

1179 1180
	public windowCount = 1;

1181 1182
	onWindowOpen: Event<number>;
	onWindowFocus: Event<number>;
1183
	onWindowBlur: Event<number>;
S
SteVen Batten 已提交
1184 1185
	onWindowMaximize: Event<number>;
	onWindowUnmaximize: Event<number>;
S
SteVen Batten 已提交
1186
	onRecentlyOpenedChange: Event<void>;
1187

1188
	isFocused(_windowId: number): TPromise<boolean> {
1189 1190 1191
		return TPromise.as(false);
	}

1192
	pickFileFolderAndOpen(_options: INativeOpenDialogOptions): TPromise<void> {
1193 1194
		return TPromise.as(void 0);
	}
1195

1196
	pickFileAndOpen(_options: INativeOpenDialogOptions): TPromise<void> {
1197 1198
		return TPromise.as(void 0);
	}
1199

1200
	pickFolderAndOpen(_options: INativeOpenDialogOptions): TPromise<void> {
1201 1202
		return TPromise.as(void 0);
	}
1203

1204
	pickWorkspaceAndOpen(_options: INativeOpenDialogOptions): TPromise<void> {
1205 1206 1207
		return TPromise.as(void 0);
	}

1208
	reloadWindow(_windowId: number): TPromise<void> {
1209 1210
		return TPromise.as(void 0);
	}
1211

1212
	openDevTools(_windowId: number): TPromise<void> {
1213 1214
		return TPromise.as(void 0);
	}
1215

1216
	toggleDevTools(_windowId: number): TPromise<void> {
1217 1218
		return TPromise.as(void 0);
	}
1219

1220
	closeWorkspace(_windowId: number): TPromise<void> {
1221 1222
		return TPromise.as(void 0);
	}
1223

1224
	enterWorkspace(_windowId: number, _path: string): TPromise<IEnterWorkspaceResult> {
1225 1226 1227
		return TPromise.as(void 0);
	}

1228
	createAndEnterWorkspace(_windowId: number, _folders?: IWorkspaceFolderCreationData[], _path?: string): TPromise<IEnterWorkspaceResult> {
1229 1230 1231
		return TPromise.as(void 0);
	}

1232
	saveAndEnterWorkspace(_windowId: number, _path: string): TPromise<IEnterWorkspaceResult> {
1233 1234 1235
		return TPromise.as(void 0);
	}

1236
	toggleFullScreen(_windowId: number): TPromise<void> {
1237 1238
		return TPromise.as(void 0);
	}
1239

1240
	setRepresentedFilename(_windowId: number, _fileName: string): TPromise<void> {
1241 1242
		return TPromise.as(void 0);
	}
1243

1244
	addRecentlyOpened(_files: URI[]): TPromise<void> {
1245 1246
		return TPromise.as(void 0);
	}
1247

1248
	removeFromRecentlyOpened(_paths: URI[]): TPromise<void> {
1249 1250
		return TPromise.as(void 0);
	}
1251

B
Benjamin Pasero 已提交
1252
	clearRecentlyOpened(): TPromise<void> {
C
22768  
Cristian 已提交
1253 1254
		return TPromise.as(void 0);
	}
1255

1256
	getRecentlyOpened(_windowId: number): TPromise<IRecentlyOpened> {
1257 1258
		return TPromise.as(void 0);
	}
1259

1260
	focusWindow(_windowId: number): TPromise<void> {
1261 1262
		return TPromise.as(void 0);
	}
1263

1264
	closeWindow(_windowId: number): TPromise<void> {
1265 1266 1267
		return TPromise.as(void 0);
	}

1268
	isMaximized(_windowId: number): TPromise<boolean> {
1269 1270
		return TPromise.as(void 0);
	}
1271

1272
	maximizeWindow(_windowId: number): TPromise<void> {
1273 1274
		return TPromise.as(void 0);
	}
1275

1276
	minimizeWindow(_windowId: number): TPromise<void> {
S
SteVen Batten 已提交
1277 1278 1279
		return TPromise.as(void 0);
	}

1280
	unmaximizeWindow(_windowId: number): TPromise<void> {
1281 1282
		return TPromise.as(void 0);
	}
1283

1284
	onWindowTitleDoubleClick(_windowId: number): TPromise<void> {
1285 1286
		return TPromise.as(void 0);
	}
1287

1288
	setDocumentEdited(_windowId: number, _flag: boolean): TPromise<void> {
1289 1290
		return TPromise.as(void 0);
	}
1291

1292 1293 1294
	quit(): TPromise<void> {
		return TPromise.as(void 0);
	}
1295

1296
	relaunch(_options: { addArgs?: string[], removeArgs?: string[] }): TPromise<void> {
J
Johannes Rieken 已提交
1297 1298
		return TPromise.as(void 0);
	}
1299

1300 1301 1302
	whenSharedProcessReady(): TPromise<void> {
		return TPromise.as(void 0);
	}
1303

1304 1305 1306
	toggleSharedProcess(): TPromise<void> {
		return TPromise.as(void 0);
	}
1307

1308
	// Global methods
1309
	openWindow(_windowId: number, _paths: URI[], _options?: { forceNewWindow?: boolean, forceReuseWindow?: boolean, forceOpenWorkspaceAsFile?: boolean }): TPromise<void> {
1310 1311
		return TPromise.as(void 0);
	}
1312

1313 1314 1315
	openNewWindow(): TPromise<void> {
		return TPromise.as(void 0);
	}
1316

1317
	showWindow(_windowId: number): TPromise<void> {
1318 1319
		return TPromise.as(void 0);
	}
1320

1321
	getWindows(): TPromise<{ id: number; workspace?: IWorkspaceIdentifier; folderUri?: ISingleFolderWorkspaceIdentifier; title: string; filename?: string; }[]> {
1322 1323
		return TPromise.as(void 0);
	}
1324

1325
	getWindowCount(): TPromise<number> {
1326
		return TPromise.as(this.windowCount);
1327
	}
1328

1329
	log(_severity: string, ..._messages: string[]): TPromise<void> {
1330 1331
		return TPromise.as(void 0);
	}
1332

1333
	showItemInFolder(_path: string): TPromise<void> {
1334 1335 1336
		return TPromise.as(void 0);
	}

1337 1338 1339 1340
	newWindowTab(): TPromise<void> {
		return TPromise.as(void 0);
	}

J
Joao Moreno 已提交
1341
	showPreviousWindowTab(): TPromise<void> {
1342 1343 1344
		return TPromise.as(void 0);
	}

J
Joao Moreno 已提交
1345
	showNextWindowTab(): TPromise<void> {
1346 1347 1348
		return TPromise.as(void 0);
	}

J
Joao Moreno 已提交
1349
	moveWindowTabToNewWindow(): TPromise<void> {
1350 1351 1352
		return TPromise.as(void 0);
	}

J
Joao Moreno 已提交
1353
	mergeAllWindowTabs(): TPromise<void> {
1354 1355 1356
		return TPromise.as(void 0);
	}

J
Joao Moreno 已提交
1357
	toggleWindowTabsBar(): TPromise<void> {
1358
		return TPromise.as(void 0);
1359 1360
	}

1361
	updateTouchBar(_windowId: number, _items: ISerializableCommandAction[][]): TPromise<void> {
1362
		return TPromise.as(void 0);
1363 1364
	}

J
Joao Moreno 已提交
1365 1366 1367 1368
	getActiveWindowId(): TPromise<number | undefined> {
		return TPromise.as(undefined);
	}

1369 1370
	// This needs to be handled from browser process to prevent
	// foreground ordering issues on Windows
1371
	openExternal(_url: string): TPromise<boolean> {
1372
		return TPromise.as(true);
1373 1374 1375
	}

	// TODO: this is a bit backwards
1376
	startCrashReporter(_config: Electron.CrashReporterStartOptions): TPromise<void> {
1377 1378
		return TPromise.as(void 0);
	}
1379

1380
	showMessageBox(_windowId: number, _options: Electron.MessageBoxOptions): TPromise<IMessageBoxResult> {
1381 1382 1383
		return TPromise.as(void 0);
	}

1384
	showSaveDialog(_windowId: number, _options: Electron.SaveDialogOptions): TPromise<string> {
1385 1386 1387
		return TPromise.as(void 0);
	}

1388
	showOpenDialog(_windowId: number, _options: Electron.OpenDialogOptions): TPromise<string[]> {
1389 1390
		return TPromise.as(void 0);
	}
J
Joao Moreno 已提交
1391 1392 1393 1394

	openAboutDialog(): TPromise<void> {
		return TPromise.as(void 0);
	}
1395 1396 1397 1398

	resolveProxy(windowId: number, url: string): Promise<string | undefined> {
		return Promise.resolve(void 0);
	}
1399
}
B
Benjamin Pasero 已提交
1400

1401 1402 1403 1404 1405 1406 1407
export class TestTextResourceConfigurationService implements ITextResourceConfigurationService {

	_serviceBrand: any;

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

1408
	public onDidChangeConfiguration() {
1409 1410 1411
		return { dispose() { } };
	}

1412 1413 1414 1415
	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 });
1416
	}
B
Benjamin Pasero 已提交
1417 1418
}

S
Sandeep Somavarapu 已提交
1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439
export class TestTextResourcePropertiesService implements ITextResourcePropertiesService {

	_serviceBrand: any;

	constructor(
		@IConfigurationService private configurationService: IConfigurationService,
	) {
	}

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


R
Ramya Achutha Rao 已提交
1440 1441 1442 1443 1444 1445 1446 1447
export class TestHashService implements IHashService {
	_serviceBrand: any;

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

1448 1449 1450 1451 1452 1453 1454 1455 1456
export class TestViewletService implements IViewletService {

	_serviceBrand: ServiceIdentifier<any>;

	readonly onDidViewletRegister: Event<ViewletDescriptor> = new Emitter<ViewletDescriptor>().event;
	onDidViewletOpen: Event<IViewlet> = new Emitter<IViewlet>().event;
	onDidViewletClose: Event<IViewlet> = new Emitter<IViewlet>().event;
	onDidViewletEnablementChange: Event<{ id: string, enabled: boolean }> = new Emitter<{ id: string, enabled: boolean }>().event;

1457
	openViewlet(_id: string, _focus?: boolean): Promise<IViewlet> { return null; }
1458 1459 1460 1461 1462

	getActiveViewlet(): IViewlet { return null; }

	getDefaultViewletId(): string { return null; }

1463
	getViewlet(_id: string): ViewletDescriptor { return null; }
1464 1465 1466 1467 1468

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

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

1469
	setViewletEnablement(_id: string, _enabled: boolean): void { }
1470

1471
	getProgressIndicator(_id: string): IProgressService { return null; }
1472 1473 1474

}

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