extensionsActions.test.ts 141.4 KB
Newer Older
1 2 3 4 5 6 7 8
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

import * as assert from 'assert';
import { assign } from 'vs/base/common/objects';
import { generateUuid } from 'vs/base/common/uuid';
9
import { IExtensionsWorkbenchService, ExtensionContainers } from 'vs/workbench/contrib/extensions/common/extensions';
10
import * as ExtensionsActions from 'vs/workbench/contrib/extensions/browser/extensionsActions';
11
import { ExtensionsWorkbenchService } from 'vs/workbench/contrib/extensions/browser/extensionsWorkbenchService';
12
import {
13
	IExtensionManagementService, IExtensionGalleryService, ILocalExtension, IGalleryExtension,
14
	DidInstallExtensionEvent, DidUninstallExtensionEvent, InstallExtensionEvent, IExtensionIdentifier, InstallOperation
15
} from 'vs/platform/extensionManagement/common/extensionManagement';
S
rename  
Sandeep Somavarapu 已提交
16
import { IWorkbenchExtensionEnablementService, EnablementState, IExtensionManagementServerService, IExtensionManagementServer, IExtensionTipsService } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
17
import { getGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
18
import { ExtensionManagementService } from 'vs/platform/extensionManagement/node/extensionManagementService';
19
import { ExtensionTipsService } from 'vs/workbench/contrib/extensions/browser/extensionTipsService';
20
import { TestExtensionEnablementService } from 'vs/workbench/services/extensionManagement/test/browser/extensionEnablementService.test';
21
import { ExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionGalleryService';
22
import { IURLService } from 'vs/platform/url/common/url';
23
import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
S
Sandeep Somavarapu 已提交
24
import { Emitter, Event } from 'vs/base/common/event';
25
import { IPager } from 'vs/base/common/paging';
26 27
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
28
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
29
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
30
import { TestContextService } from 'vs/workbench/test/common/workbenchTestServices';
31
import { TestSharedProcessService } from 'vs/workbench/test/electron-browser/workbenchTestServices';
S
Sandeep Somavarapu 已提交
32
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
B
Benjamin Pasero 已提交
33
import { ILogService, NullLogService } from 'vs/platform/log/common/log';
34
import { URLService } from 'vs/platform/url/node/urlService';
35
import { URI } from 'vs/base/common/uri';
J
Johannes Rieken 已提交
36
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
37
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
38
import { RemoteAgentService } from 'vs/workbench/services/remote/electron-browser/remoteAgentServiceImpl';
39
import { ExtensionIdentifier, IExtensionContributions, ExtensionType, IExtensionDescription } from 'vs/platform/extensions/common/extensions';
40
import { ISharedProcessService } from 'vs/platform/ipc/electron-browser/sharedProcessService';
S
Sandeep Somavarapu 已提交
41
import { CancellationToken } from 'vs/base/common/cancellation';
42
import { ILabelService, IFormatterChangeEvent } from 'vs/platform/label/common/label';
43
import { ExtensionManagementServerService } from 'vs/workbench/services/extensionManagement/electron-browser/extensionManagementServerService';
44
import { IProductService } from 'vs/platform/product/common/productService';
S
Sandeep Somavarapu 已提交
45 46
import { Schemas } from 'vs/base/common/network';
import { REMOTE_HOST_SCHEME } from 'vs/platform/remote/common/remoteHosts';
47
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
S
Sandeep Somavarapu 已提交
48 49
import { IProgressService } from 'vs/platform/progress/common/progress';
import { ProgressService } from 'vs/workbench/services/progress/browser/progressService';
50

S
Sandeep Somavarapu 已提交
51
suite('ExtensionsActions Test', () => {
52 53 54

	let instantiationService: TestInstantiationService;

S
Sandeep Somavarapu 已提交
55 56
	let installEvent: Emitter<InstallExtensionEvent>,
		didInstallEvent: Emitter<DidInstallExtensionEvent>,
S
Sandeep Somavarapu 已提交
57
		uninstallEvent: Emitter<IExtensionIdentifier>,
S
Sandeep Somavarapu 已提交
58 59 60
		didUninstallEvent: Emitter<DidUninstallExtensionEvent>;


61
	setup(async () => {
62 63
		installEvent = new Emitter<InstallExtensionEvent>();
		didInstallEvent = new Emitter<DidInstallExtensionEvent>();
S
Sandeep Somavarapu 已提交
64
		uninstallEvent = new Emitter<IExtensionIdentifier>();
65
		didUninstallEvent = new Emitter<DidUninstallExtensionEvent>();
66 67 68

		instantiationService = new TestInstantiationService();
		instantiationService.stub(ITelemetryService, NullTelemetryService);
B
Benjamin Pasero 已提交
69
		instantiationService.stub(ILogService, NullLogService);
70

71
		instantiationService.stub(IWorkspaceContextService, new TestContextService());
J
Johannes Rieken 已提交
72
		instantiationService.stub(IConfigurationService, new TestConfigurationService());
S
Sandeep Somavarapu 已提交
73
		instantiationService.stub(IProgressService, ProgressService);
B
Benjamin Pasero 已提交
74

75
		instantiationService.stub(IExtensionGalleryService, ExtensionGalleryService);
76
		instantiationService.stub(ISharedProcessService, TestSharedProcessService);
77

78 79 80 81 82
		instantiationService.stub(IExtensionManagementService, ExtensionManagementService);
		instantiationService.stub(IExtensionManagementService, 'onInstallExtension', installEvent.event);
		instantiationService.stub(IExtensionManagementService, 'onDidInstallExtension', didInstallEvent.event);
		instantiationService.stub(IExtensionManagementService, 'onUninstallExtension', uninstallEvent.event);
		instantiationService.stub(IExtensionManagementService, 'onDidUninstallExtension', didUninstallEvent.event);
83
		instantiationService.stub(IRemoteAgentService, RemoteAgentService);
84

85 86 87
		instantiationService.stub(IExtensionManagementServerService, new class extends ExtensionManagementServerService {
			private _localExtensionManagementServer: IExtensionManagementServer = { extensionManagementService: instantiationService.get(IExtensionManagementService), label: 'local', authority: 'vscode-local' };
			constructor() {
88
				super(instantiationService.get(ISharedProcessService), instantiationService.get(IRemoteAgentService), instantiationService.get(IExtensionGalleryService), instantiationService.get(IConfigurationService), instantiationService.get(IProductService), instantiationService.get(ILogService), instantiationService.get(ILabelService));
89 90 91 92
			}
			get localExtensionManagementServer(): IExtensionManagementServer { return this._localExtensionManagementServer; }
			set localExtensionManagementServer(server: IExtensionManagementServer) { }
		}());
93

S
rename  
Sandeep Somavarapu 已提交
94
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
95
		instantiationService.stub(ILabelService, { onDidChangeFormatters: new Emitter<IFormatterChangeEvent>().event });
96

S
Sandeep Somavarapu 已提交
97
		instantiationService.set(IExtensionTipsService, instantiationService.createInstance(ExtensionTipsService));
98
		instantiationService.stub(IURLService, URLService);
S
Sandeep Somavarapu 已提交
99 100

		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', []);
J
Joao Moreno 已提交
101
		instantiationService.stubPromise(IExtensionManagementService, 'getExtensionsReport', []);
S
Sandeep Somavarapu 已提交
102
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage());
M
Matt Bierner 已提交
103
		instantiationService.stub(IExtensionService, <Partial<IExtensionService>>{ getExtensions: () => Promise.resolve([]), onDidChangeExtensions: new Emitter<void>().event, canAddExtension: (extension: IExtensionDescription) => false, canRemoveExtension: (extension: IExtensionDescription) => false });
S
rename  
Sandeep Somavarapu 已提交
104
		await (<TestExtensionEnablementService>instantiationService.get(IWorkbenchExtensionEnablementService)).reset();
S
Sandeep Somavarapu 已提交
105 106

		instantiationService.set(IExtensionsWorkbenchService, instantiationService.createInstance(ExtensionsWorkbenchService));
107 108 109 110 111 112 113
	});

	teardown(() => {
		(<ExtensionsWorkbenchService>instantiationService.get(IExtensionsWorkbenchService)).dispose();
	});

	test('Install action is disabled when there is no extension', () => {
S
Sandeep Somavarapu 已提交
114
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.InstallAction);
115 116 117 118

		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
119
	test('Test Install action when state is installed', () => {
120
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
S
Sandeep Somavarapu 已提交
121
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.InstallAction);
122
		instantiationService.createInstance(ExtensionContainers, [testObject]);
123 124
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
S
Sandeep Somavarapu 已提交
125 126 127
		return workbenchService.queryLocal()
			.then(() => {
				instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: local.identifier })));
S
Sandeep Somavarapu 已提交
128
				return workbenchService.queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
129 130 131 132 133 134
					.then((paged) => {
						testObject.extension = paged.firstPage[0];
						assert.ok(!testObject.enabled);
						assert.equal('Install', testObject.label);
						assert.equal('extension-action prominent install', testObject.class);
					});
135 136 137
			});
	});

S
Sandeep Somavarapu 已提交
138
	test('Test Install action when state is installing', () => {
139
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
S
Sandeep Somavarapu 已提交
140
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.InstallAction);
141
		instantiationService.createInstance(ExtensionContainers, [testObject]);
142 143
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));
S
Sandeep Somavarapu 已提交
144
		return workbenchService.queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
145 146 147 148 149 150 151 152
			.then((paged) => {
				testObject.extension = paged.firstPage[0];
				installEvent.fire({ identifier: gallery.identifier, gallery });

				assert.ok(!testObject.enabled);
				assert.equal('Installing', testObject.label);
				assert.equal('extension-action install installing', testObject.class);
			});
153 154
	});

S
Sandeep Somavarapu 已提交
155
	test('Test Install action when state is uninstalled', () => {
156
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
S
Sandeep Somavarapu 已提交
157
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.InstallAction);
158
		instantiationService.createInstance(ExtensionContainers, [testObject]);
159 160
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));
S
Sandeep Somavarapu 已提交
161
		return workbenchService.queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
162 163 164 165 166
			.then((paged) => {
				testObject.extension = paged.firstPage[0];
				assert.ok(testObject.enabled);
				assert.equal('Install', testObject.label);
			});
167 168
	});

S
Sandeep Somavarapu 已提交
169
	test('Test Install action when extension is system action', () => {
S
Sandeep Somavarapu 已提交
170
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.InstallAction);
171
		instantiationService.createInstance(ExtensionContainers, [testObject]);
172
		const local = aLocalExtension('a', {}, { type: ExtensionType.System });
173 174
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
175 176 177 178 179 180 181
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
				uninstallEvent.fire(local.identifier);
				didUninstallEvent.fire({ identifier: local.identifier });
				testObject.extension = extensions[0];
				assert.ok(!testObject.enabled);
			});
182 183
	});

S
Sandeep Somavarapu 已提交
184
	test('Test Install action when extension doesnot has gallery', () => {
S
Sandeep Somavarapu 已提交
185
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.InstallAction);
186
		instantiationService.createInstance(ExtensionContainers, [testObject]);
187 188 189
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
190 191 192 193 194 195 196
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
				uninstallEvent.fire(local.identifier);
				didUninstallEvent.fire({ identifier: local.identifier });
				testObject.extension = extensions[0];
				assert.ok(!testObject.enabled);
			});
197 198 199 200
	});

	test('Uninstall action is disabled when there is no extension', () => {
		const testObject: ExtensionsActions.UninstallAction = instantiationService.createInstance(ExtensionsActions.UninstallAction);
201
		instantiationService.createInstance(ExtensionContainers, [testObject]);
202 203 204 205

		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
206
	test('Test Uninstall action when state is uninstalling', () => {
207
		const testObject: ExtensionsActions.UninstallAction = instantiationService.createInstance(ExtensionsActions.UninstallAction);
208
		instantiationService.createInstance(ExtensionContainers, [testObject]);
209 210 211
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
212 213 214 215 216 217
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
				testObject.extension = extensions[0];
				uninstallEvent.fire(local.identifier);
				assert.ok(!testObject.enabled);
				assert.equal('Uninstalling', testObject.label);
S
Sandeep Somavarapu 已提交
218
				assert.equal('extension-action uninstall uninstalling', testObject.class);
S
Sandeep Somavarapu 已提交
219
			});
220 221
	});

S
Sandeep Somavarapu 已提交
222
	test('Test Uninstall action when state is installed and is user extension', () => {
223
		const testObject: ExtensionsActions.UninstallAction = instantiationService.createInstance(ExtensionsActions.UninstallAction);
224
		instantiationService.createInstance(ExtensionContainers, [testObject]);
225 226 227
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
228 229 230 231 232
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
				testObject.extension = extensions[0];
				assert.ok(testObject.enabled);
				assert.equal('Uninstall', testObject.label);
S
Sandeep Somavarapu 已提交
233
				assert.equal('extension-action uninstall', testObject.class);
S
Sandeep Somavarapu 已提交
234
			});
235 236
	});

S
Sandeep Somavarapu 已提交
237
	test('Test Uninstall action when state is installed and is system extension', () => {
238
		const testObject: ExtensionsActions.UninstallAction = instantiationService.createInstance(ExtensionsActions.UninstallAction);
239
		instantiationService.createInstance(ExtensionContainers, [testObject]);
240
		const local = aLocalExtension('a', {}, { type: ExtensionType.System });
241 242
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
243 244 245 246 247
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
				testObject.extension = extensions[0];
				assert.ok(!testObject.enabled);
				assert.equal('Uninstall', testObject.label);
S
Sandeep Somavarapu 已提交
248
				assert.equal('extension-action uninstall', testObject.class);
S
Sandeep Somavarapu 已提交
249
			});
250 251
	});

S
Sandeep Somavarapu 已提交
252 253
	test('Test Uninstall action when state is installing and is user extension', () => {
		const testObject: ExtensionsActions.UninstallAction = instantiationService.createInstance(ExtensionsActions.UninstallAction);
254
		instantiationService.createInstance(ExtensionContainers, [testObject]);
S
Sandeep Somavarapu 已提交
255 256 257 258 259 260
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
				const gallery = aGalleryExtension('a');
S
Sandeep Somavarapu 已提交
261 262
				const extension = extensions[0];
				extension.gallery = gallery;
S
Sandeep Somavarapu 已提交
263
				installEvent.fire({ identifier: gallery.identifier, gallery });
S
Sandeep Somavarapu 已提交
264
				testObject.extension = extension;
S
Sandeep Somavarapu 已提交
265 266 267 268
				assert.ok(!testObject.enabled);
			});
	});

S
Sandeep Somavarapu 已提交
269
	test('Test Uninstall action after extension is installed', () => {
270
		const testObject: ExtensionsActions.UninstallAction = instantiationService.createInstance(ExtensionsActions.UninstallAction);
271
		instantiationService.createInstance(ExtensionContainers, [testObject]);
272 273 274
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));

S
Sandeep Somavarapu 已提交
275
		return instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
276 277
			.then(paged => {
				testObject.extension = paged.firstPage[0];
278

S
Sandeep Somavarapu 已提交
279
				installEvent.fire({ identifier: gallery.identifier, gallery });
S
Sandeep Somavarapu 已提交
280
				didInstallEvent.fire({ identifier: gallery.identifier, gallery, operation: InstallOperation.Install, local: aLocalExtension('a', gallery, gallery) });
281

S
Sandeep Somavarapu 已提交
282 283
				assert.ok(testObject.enabled);
				assert.equal('Uninstall', testObject.label);
S
Sandeep Somavarapu 已提交
284
				assert.equal('extension-action uninstall', testObject.class);
S
Sandeep Somavarapu 已提交
285
			});
286 287 288
	});

	test('Test CombinedInstallAction when there is no extension', () => {
S
Sandeep Somavarapu 已提交
289
		const testObject: ExtensionsActions.CombinedInstallAction = instantiationService.createInstance(ExtensionsActions.CombinedInstallAction);
290
		instantiationService.createInstance(ExtensionContainers, [testObject]);
291 292

		assert.ok(!testObject.enabled);
S
Sandeep Somavarapu 已提交
293
		assert.equal('extension-action prominent install no-extension', testObject.class);
294 295
	});

S
Sandeep Somavarapu 已提交
296
	test('Test CombinedInstallAction when extension is system extension', () => {
S
Sandeep Somavarapu 已提交
297
		const testObject: ExtensionsActions.CombinedInstallAction = instantiationService.createInstance(ExtensionsActions.CombinedInstallAction);
298
		instantiationService.createInstance(ExtensionContainers, [testObject]);
299
		const local = aLocalExtension('a', {}, { type: ExtensionType.System });
300 301
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
302 303 304 305 306 307
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
				testObject.extension = extensions[0];
				assert.ok(!testObject.enabled);
				assert.equal('extension-action prominent install no-extension', testObject.class);
			});
308 309
	});

S
Sandeep Somavarapu 已提交
310
	test('Test CombinedInstallAction when installAction is enabled', () => {
311
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
S
Sandeep Somavarapu 已提交
312
		const testObject: ExtensionsActions.CombinedInstallAction = instantiationService.createInstance(ExtensionsActions.CombinedInstallAction);
313
		instantiationService.createInstance(ExtensionContainers, [testObject]);
314 315 316
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));

S
Sandeep Somavarapu 已提交
317
		return workbenchService.queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
318 319 320 321 322 323
			.then((paged) => {
				testObject.extension = paged.firstPage[0];
				assert.ok(testObject.enabled);
				assert.equal('Install', testObject.label);
				assert.equal('extension-action prominent install', testObject.class);
			});
324 325
	});

S
Sandeep Somavarapu 已提交
326
	test('Test CombinedInstallAction when unInstallAction is enabled', () => {
S
Sandeep Somavarapu 已提交
327
		const testObject: ExtensionsActions.CombinedInstallAction = instantiationService.createInstance(ExtensionsActions.CombinedInstallAction);
328
		instantiationService.createInstance(ExtensionContainers, [testObject]);
329 330 331
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
332 333 334 335 336
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
				testObject.extension = extensions[0];
				assert.ok(testObject.enabled);
				assert.equal('Uninstall', testObject.label);
S
Sandeep Somavarapu 已提交
337
				assert.equal('extension-action uninstall', testObject.class);
S
Sandeep Somavarapu 已提交
338
			});
339 340
	});

S
Sandeep Somavarapu 已提交
341
	test('Test CombinedInstallAction when state is installing', () => {
S
Sandeep Somavarapu 已提交
342
		const testObject: ExtensionsActions.CombinedInstallAction = instantiationService.createInstance(ExtensionsActions.CombinedInstallAction);
343
		instantiationService.createInstance(ExtensionContainers, [testObject]);
344 345 346
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));
S
Sandeep Somavarapu 已提交
347
		return workbenchService.queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
348 349 350 351 352 353 354 355
			.then((paged) => {
				testObject.extension = paged.firstPage[0];
				installEvent.fire({ identifier: gallery.identifier, gallery });

				assert.ok(!testObject.enabled);
				assert.equal('Installing', testObject.label);
				assert.equal('extension-action install installing', testObject.class);
			});
356 357
	});

S
Sandeep Somavarapu 已提交
358 359
	test('Test CombinedInstallAction when state is installing during update', () => {
		const testObject: ExtensionsActions.CombinedInstallAction = instantiationService.createInstance(ExtensionsActions.CombinedInstallAction);
360
		instantiationService.createInstance(ExtensionContainers, [testObject]);
S
Sandeep Somavarapu 已提交
361 362 363 364 365 366
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
				const gallery = aGalleryExtension('a');
S
Sandeep Somavarapu 已提交
367 368 369
				const extension = extensions[0];
				extension.gallery = gallery;
				testObject.extension = extension;
S
Sandeep Somavarapu 已提交
370 371 372 373 374 375 376
				installEvent.fire({ identifier: gallery.identifier, gallery });
				assert.ok(!testObject.enabled);
				assert.equal('Installing', testObject.label);
				assert.equal('extension-action install installing', testObject.class);
			});
	});

S
Sandeep Somavarapu 已提交
377
	test('Test CombinedInstallAction when state is uninstalling', () => {
S
Sandeep Somavarapu 已提交
378
		const testObject: ExtensionsActions.CombinedInstallAction = instantiationService.createInstance(ExtensionsActions.CombinedInstallAction);
379
		instantiationService.createInstance(ExtensionContainers, [testObject]);
380 381 382
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
383 384 385 386 387 388
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
				testObject.extension = extensions[0];
				uninstallEvent.fire(local.identifier);
				assert.ok(!testObject.enabled);
				assert.equal('Uninstalling', testObject.label);
S
Sandeep Somavarapu 已提交
389
				assert.equal('extension-action uninstall uninstalling', testObject.class);
S
Sandeep Somavarapu 已提交
390
			});
391 392 393
	});

	test('Test UpdateAction when there is no extension', () => {
S
Sandeep Somavarapu 已提交
394
		const testObject: ExtensionsActions.UpdateAction = instantiationService.createInstance(ExtensionsActions.UpdateAction);
395
		instantiationService.createInstance(ExtensionContainers, [testObject]);
396 397 398 399

		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
400
	test('Test UpdateAction when extension is uninstalled', () => {
S
Sandeep Somavarapu 已提交
401
		const testObject: ExtensionsActions.UpdateAction = instantiationService.createInstance(ExtensionsActions.UpdateAction);
402
		instantiationService.createInstance(ExtensionContainers, [testObject]);
403 404
		const gallery = aGalleryExtension('a', { version: '1.0.0' });
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));
S
Sandeep Somavarapu 已提交
405
		return instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
406 407 408 409
			.then((paged) => {
				testObject.extension = paged.firstPage[0];
				assert.ok(!testObject.enabled);
			});
410 411
	});

S
Sandeep Somavarapu 已提交
412
	test('Test UpdateAction when extension is installed and not outdated', () => {
S
Sandeep Somavarapu 已提交
413
		const testObject: ExtensionsActions.UpdateAction = instantiationService.createInstance(ExtensionsActions.UpdateAction);
414
		instantiationService.createInstance(ExtensionContainers, [testObject]);
415 416 417
		const local = aLocalExtension('a', { version: '1.0.0' });
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
418 419 420 421
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
				testObject.extension = extensions[0];
				instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: local.identifier, version: local.manifest.version })));
S
Sandeep Somavarapu 已提交
422
				return instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
423
					.then(extensions => assert.ok(!testObject.enabled));
424 425 426
			});
	});

S
Sandeep Somavarapu 已提交
427
	test('Test UpdateAction when extension is installed outdated and system extension', () => {
S
Sandeep Somavarapu 已提交
428
		const testObject: ExtensionsActions.UpdateAction = instantiationService.createInstance(ExtensionsActions.UpdateAction);
429
		instantiationService.createInstance(ExtensionContainers, [testObject]);
430
		const local = aLocalExtension('a', { version: '1.0.0' }, { type: ExtensionType.System });
431 432
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
433 434 435 436
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
				testObject.extension = extensions[0];
				instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: local.identifier, version: '1.0.1' })));
S
Sandeep Somavarapu 已提交
437
				return instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
438
					.then(extensions => assert.ok(!testObject.enabled));
439 440 441
			});
	});

S
Sandeep Somavarapu 已提交
442
	test('Test UpdateAction when extension is installed outdated and user extension', () => {
S
Sandeep Somavarapu 已提交
443
		const testObject: ExtensionsActions.UpdateAction = instantiationService.createInstance(ExtensionsActions.UpdateAction);
444
		instantiationService.createInstance(ExtensionContainers, [testObject]);
445 446 447
		const local = aLocalExtension('a', { version: '1.0.0' });
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
448 449
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
		return workbenchService.queryLocal()
S
Sandeep Somavarapu 已提交
450
			.then(async extensions => {
S
Sandeep Somavarapu 已提交
451 452
				testObject.extension = extensions[0];
				instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: local.identifier, version: '1.0.1' })));
S
Sandeep Somavarapu 已提交
453 454 455 456 457 458 459
				assert.ok(!testObject.enabled);
				return new Promise(c => {
					testObject.onDidChange(() => {
						if (testObject.enabled) {
							c();
						}
					});
S
Sandeep Somavarapu 已提交
460
					instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None);
S
Sandeep Somavarapu 已提交
461
				});
462 463 464
			});
	});

S
Sandeep Somavarapu 已提交
465
	test('Test UpdateAction when extension is installing and outdated and user extension', () => {
S
Sandeep Somavarapu 已提交
466
		const testObject: ExtensionsActions.UpdateAction = instantiationService.createInstance(ExtensionsActions.UpdateAction);
467
		instantiationService.createInstance(ExtensionContainers, [testObject]);
468 469 470
		const local = aLocalExtension('a', { version: '1.0.0' });
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
471 472 473 474 475
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
				testObject.extension = extensions[0];
				const gallery = aGalleryExtension('a', { identifier: local.identifier, version: '1.0.1' });
				instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));
S
Sandeep Somavarapu 已提交
476
				return instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
477 478 479 480
					.then(extensions => {
						installEvent.fire({ identifier: local.identifier, gallery });
						assert.ok(!testObject.enabled);
					});
481 482 483 484 485
			});
	});

	test('Test ManageExtensionAction when there is no extension', () => {
		const testObject: ExtensionsActions.ManageExtensionAction = instantiationService.createInstance(ExtensionsActions.ManageExtensionAction);
486
		instantiationService.createInstance(ExtensionContainers, [testObject]);
487 488 489 490

		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
491
	test('Test ManageExtensionAction when extension is installed', () => {
492
		const testObject: ExtensionsActions.ManageExtensionAction = instantiationService.createInstance(ExtensionsActions.ManageExtensionAction);
493
		instantiationService.createInstance(ExtensionContainers, [testObject]);
494 495 496
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
497 498 499 500
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
				testObject.extension = extensions[0];
				assert.ok(testObject.enabled);
M
Miguel Solorio 已提交
501
				assert.equal('extension-action manage codicon-gear', testObject.class);
S
Sandeep Somavarapu 已提交
502 503
				assert.equal('', testObject.tooltip);
			});
504 505
	});

S
Sandeep Somavarapu 已提交
506
	test('Test ManageExtensionAction when extension is uninstalled', () => {
507
		const testObject: ExtensionsActions.ManageExtensionAction = instantiationService.createInstance(ExtensionsActions.ManageExtensionAction);
508
		instantiationService.createInstance(ExtensionContainers, [testObject]);
509 510 511
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));

S
Sandeep Somavarapu 已提交
512
		return instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
513 514 515
			.then(page => {
				testObject.extension = page.firstPage[0];
				assert.ok(!testObject.enabled);
M
Miguel Solorio 已提交
516
				assert.equal('extension-action manage codicon-gear hide', testObject.class);
S
Sandeep Somavarapu 已提交
517 518
				assert.equal('', testObject.tooltip);
			});
519 520
	});

S
Sandeep Somavarapu 已提交
521
	test('Test ManageExtensionAction when extension is installing', () => {
522
		const testObject: ExtensionsActions.ManageExtensionAction = instantiationService.createInstance(ExtensionsActions.ManageExtensionAction);
523
		instantiationService.createInstance(ExtensionContainers, [testObject]);
524 525 526
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));

S
Sandeep Somavarapu 已提交
527
		return instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
528 529
			.then(page => {
				testObject.extension = page.firstPage[0];
530

S
Sandeep Somavarapu 已提交
531 532
				installEvent.fire({ identifier: gallery.identifier, gallery });
				assert.ok(!testObject.enabled);
M
Miguel Solorio 已提交
533
				assert.equal('extension-action manage codicon-gear hide', testObject.class);
S
Sandeep Somavarapu 已提交
534 535
				assert.equal('', testObject.tooltip);
			});
S
Sandeep Somavarapu 已提交
536 537
	});

S
Sandeep Somavarapu 已提交
538
	test('Test ManageExtensionAction when extension is queried from gallery and installed', () => {
S
Sandeep Somavarapu 已提交
539
		const testObject: ExtensionsActions.ManageExtensionAction = instantiationService.createInstance(ExtensionsActions.ManageExtensionAction);
540
		instantiationService.createInstance(ExtensionContainers, [testObject]);
S
Sandeep Somavarapu 已提交
541 542 543
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));

S
Sandeep Somavarapu 已提交
544
		return instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
545 546 547
			.then(page => {
				testObject.extension = page.firstPage[0];
				installEvent.fire({ identifier: gallery.identifier, gallery });
S
Sandeep Somavarapu 已提交
548
				didInstallEvent.fire({ identifier: gallery.identifier, gallery, operation: InstallOperation.Install, local: aLocalExtension('a', gallery, gallery) });
S
Sandeep Somavarapu 已提交
549

S
Sandeep Somavarapu 已提交
550
				assert.ok(testObject.enabled);
M
Miguel Solorio 已提交
551
				assert.equal('extension-action manage codicon-gear', testObject.class);
S
Sandeep Somavarapu 已提交
552 553
				assert.equal('', testObject.tooltip);
			});
S
Sandeep Somavarapu 已提交
554 555
	});

S
Sandeep Somavarapu 已提交
556
	test('Test ManageExtensionAction when extension is system extension', () => {
S
Sandeep Somavarapu 已提交
557
		const testObject: ExtensionsActions.ManageExtensionAction = instantiationService.createInstance(ExtensionsActions.ManageExtensionAction);
558
		instantiationService.createInstance(ExtensionContainers, [testObject]);
559
		const local = aLocalExtension('a', {}, { type: ExtensionType.System });
S
Sandeep Somavarapu 已提交
560 561
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
562 563 564
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
				testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
565
				assert.ok(testObject.enabled);
M
Miguel Solorio 已提交
566
				assert.equal('extension-action manage codicon-gear', testObject.class);
S
Sandeep Somavarapu 已提交
567 568
				assert.equal('', testObject.tooltip);
			});
569 570
	});

S
Sandeep Somavarapu 已提交
571
	test('Test ManageExtensionAction when extension is uninstalling', () => {
572
		const testObject: ExtensionsActions.ManageExtensionAction = instantiationService.createInstance(ExtensionsActions.ManageExtensionAction);
573
		instantiationService.createInstance(ExtensionContainers, [testObject]);
574 575 576
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
577 578 579 580
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
				testObject.extension = extensions[0];
				uninstallEvent.fire(local.identifier);
581

S
Sandeep Somavarapu 已提交
582
				assert.ok(!testObject.enabled);
M
Miguel Solorio 已提交
583
				assert.equal('extension-action manage codicon-gear', testObject.class);
S
Sandeep Somavarapu 已提交
584 585
				assert.equal('Uninstalling', testObject.tooltip);
			});
586 587 588
	});

	test('Test EnableForWorkspaceAction when there is no extension', () => {
S
Sandeep Somavarapu 已提交
589
		const testObject: ExtensionsActions.EnableForWorkspaceAction = instantiationService.createInstance(ExtensionsActions.EnableForWorkspaceAction);
590 591 592 593

		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
594
	test('Test EnableForWorkspaceAction when there extension is not disabled', () => {
595 596 597
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
598 599
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
S
Sandeep Somavarapu 已提交
600 601
				const testObject: ExtensionsActions.EnableForWorkspaceAction = instantiationService.createInstance(ExtensionsActions.EnableForWorkspaceAction);
				testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
602 603
				assert.ok(!testObject.enabled);
			});
604 605
	});

S
Sandeep Somavarapu 已提交
606
	test('Test EnableForWorkspaceAction when the extension is disabled globally', () => {
607
		const local = aLocalExtension('a');
S
rename  
Sandeep Somavarapu 已提交
608
		return instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledGlobally)
S
Sandeep Somavarapu 已提交
609 610 611 612 613
			.then(() => {
				instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

				return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
					.then(extensions => {
S
Sandeep Somavarapu 已提交
614 615
						const testObject: ExtensionsActions.EnableForWorkspaceAction = instantiationService.createInstance(ExtensionsActions.EnableForWorkspaceAction);
						testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
616 617
						assert.ok(testObject.enabled);
					});
S
Sandeep Somavarapu 已提交
618
			});
619 620
	});

S
Sandeep Somavarapu 已提交
621
	test('Test EnableForWorkspaceAction when extension is disabled for workspace', () => {
622
		const local = aLocalExtension('a');
S
rename  
Sandeep Somavarapu 已提交
623
		return instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledWorkspace)
S
Sandeep Somavarapu 已提交
624 625 626 627 628
			.then(() => {
				instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

				return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
					.then(extensions => {
S
Sandeep Somavarapu 已提交
629 630
						const testObject: ExtensionsActions.EnableForWorkspaceAction = instantiationService.createInstance(ExtensionsActions.EnableForWorkspaceAction);
						testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
631 632
						assert.ok(testObject.enabled);
					});
S
Sandeep Somavarapu 已提交
633
			});
634 635
	});

S
Sandeep Somavarapu 已提交
636
	test('Test EnableForWorkspaceAction when the extension is disabled globally and workspace', () => {
637
		const local = aLocalExtension('a');
S
rename  
Sandeep Somavarapu 已提交
638 639
		return instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledGlobally)
			.then(() => instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledWorkspace))
S
Sandeep Somavarapu 已提交
640 641 642 643 644
			.then(() => {
				instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

				return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
					.then(extensions => {
S
Sandeep Somavarapu 已提交
645 646
						const testObject: ExtensionsActions.EnableForWorkspaceAction = instantiationService.createInstance(ExtensionsActions.EnableForWorkspaceAction);
						testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
647 648
						assert.ok(testObject.enabled);
					});
S
Sandeep Somavarapu 已提交
649
			});
650 651 652
	});

	test('Test EnableGloballyAction when there is no extension', () => {
S
Sandeep Somavarapu 已提交
653
		const testObject: ExtensionsActions.EnableGloballyAction = instantiationService.createInstance(ExtensionsActions.EnableGloballyAction);
654 655 656 657

		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
658
	test('Test EnableGloballyAction when the extension is not disabled', () => {
659 660 661
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
662 663
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
S
Sandeep Somavarapu 已提交
664 665
				const testObject: ExtensionsActions.EnableGloballyAction = instantiationService.createInstance(ExtensionsActions.EnableGloballyAction);
				testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
666 667
				assert.ok(!testObject.enabled);
			});
668 669
	});

S
Sandeep Somavarapu 已提交
670
	test('Test EnableGloballyAction when the extension is disabled for workspace', () => {
671
		const local = aLocalExtension('a');
S
rename  
Sandeep Somavarapu 已提交
672
		return instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledWorkspace)
S
Sandeep Somavarapu 已提交
673 674 675 676 677
			.then(() => {
				instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

				return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
					.then(extensions => {
S
Sandeep Somavarapu 已提交
678 679
						const testObject: ExtensionsActions.EnableGloballyAction = instantiationService.createInstance(ExtensionsActions.EnableGloballyAction);
						testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
680
						assert.ok(!testObject.enabled);
S
Sandeep Somavarapu 已提交
681 682
					});
			});
683 684
	});

S
Sandeep Somavarapu 已提交
685
	test('Test EnableGloballyAction when the extension is disabled globally', () => {
686
		const local = aLocalExtension('a');
S
rename  
Sandeep Somavarapu 已提交
687
		return instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledGlobally)
S
Sandeep Somavarapu 已提交
688 689 690 691 692
			.then(() => {
				instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

				return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
					.then(extensions => {
S
Sandeep Somavarapu 已提交
693 694
						const testObject: ExtensionsActions.EnableGloballyAction = instantiationService.createInstance(ExtensionsActions.EnableGloballyAction);
						testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
695 696 697
						assert.ok(testObject.enabled);
					});
			});
698 699
	});

S
Sandeep Somavarapu 已提交
700
	test('Test EnableGloballyAction when the extension is disabled in both', () => {
701
		const local = aLocalExtension('a');
S
rename  
Sandeep Somavarapu 已提交
702 703
		return instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledGlobally)
			.then(() => instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledWorkspace))
S
Sandeep Somavarapu 已提交
704 705 706 707 708
			.then(() => {
				instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

				return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
					.then(extensions => {
S
Sandeep Somavarapu 已提交
709 710
						const testObject: ExtensionsActions.EnableGloballyAction = instantiationService.createInstance(ExtensionsActions.EnableGloballyAction);
						testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
711
						assert.ok(!testObject.enabled);
S
Sandeep Somavarapu 已提交
712 713
					});
			});
714 715 716
	});

	test('Test EnableAction when there is no extension', () => {
S
Sandeep Somavarapu 已提交
717
		const testObject: ExtensionsActions.EnableDropDownAction = instantiationService.createInstance(ExtensionsActions.EnableDropDownAction);
718 719 720 721

		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
722
	test('Test EnableDropDownAction when extension is installed and enabled', () => {
723 724 725
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
726 727
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
S
Sandeep Somavarapu 已提交
728
				const testObject: ExtensionsActions.EnableDropDownAction = instantiationService.createInstance(ExtensionsActions.EnableDropDownAction);
S
Sandeep Somavarapu 已提交
729
				testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
730 731
				assert.ok(!testObject.enabled);
			});
732 733
	});

S
Sandeep Somavarapu 已提交
734
	test('Test EnableDropDownAction when extension is installed and disabled globally', () => {
735
		const local = aLocalExtension('a');
S
rename  
Sandeep Somavarapu 已提交
736
		return instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledGlobally)
S
Sandeep Somavarapu 已提交
737 738 739 740 741
			.then(() => {
				instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

				return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
					.then(extensions => {
S
Sandeep Somavarapu 已提交
742
						const testObject: ExtensionsActions.EnableDropDownAction = instantiationService.createInstance(ExtensionsActions.EnableDropDownAction);
S
Sandeep Somavarapu 已提交
743
						testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
744 745 746
						assert.ok(testObject.enabled);
					});
			});
747 748
	});

S
Sandeep Somavarapu 已提交
749
	test('Test EnableDropDownAction when extension is installed and disabled for workspace', () => {
750
		const local = aLocalExtension('a');
S
rename  
Sandeep Somavarapu 已提交
751
		return instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledWorkspace)
S
Sandeep Somavarapu 已提交
752 753 754 755 756
			.then(() => {
				instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

				return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
					.then(extensions => {
S
Sandeep Somavarapu 已提交
757
						const testObject: ExtensionsActions.EnableDropDownAction = instantiationService.createInstance(ExtensionsActions.EnableDropDownAction);
S
Sandeep Somavarapu 已提交
758
						testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
759 760 761
						assert.ok(testObject.enabled);
					});
			});
762 763
	});

S
Sandeep Somavarapu 已提交
764
	test('Test EnableDropDownAction when extension is uninstalled', () => {
765 766 767
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));

S
Sandeep Somavarapu 已提交
768
		return instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
769
			.then(page => {
S
Sandeep Somavarapu 已提交
770
				const testObject: ExtensionsActions.EnableDropDownAction = instantiationService.createInstance(ExtensionsActions.EnableDropDownAction);
S
Sandeep Somavarapu 已提交
771
				testObject.extension = page.firstPage[0];
S
Sandeep Somavarapu 已提交
772 773
				assert.ok(!testObject.enabled);
			});
774 775
	});

S
Sandeep Somavarapu 已提交
776
	test('Test EnableDropDownAction when extension is installing', () => {
777 778 779
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));

S
Sandeep Somavarapu 已提交
780
		return instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
781
			.then(page => {
S
Sandeep Somavarapu 已提交
782
				const testObject: ExtensionsActions.EnableDropDownAction = instantiationService.createInstance(ExtensionsActions.EnableDropDownAction);
S
Sandeep Somavarapu 已提交
783
				testObject.extension = page.firstPage[0];
784
				instantiationService.createInstance(ExtensionContainers, [testObject]);
785

S
Sandeep Somavarapu 已提交
786 787 788
				installEvent.fire({ identifier: gallery.identifier, gallery });
				assert.ok(!testObject.enabled);
			});
789 790
	});

S
Sandeep Somavarapu 已提交
791
	test('Test EnableDropDownAction when extension is uninstalling', () => {
792 793 794
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
795 796
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
S
Sandeep Somavarapu 已提交
797
				const testObject: ExtensionsActions.EnableDropDownAction = instantiationService.createInstance(ExtensionsActions.EnableDropDownAction);
S
Sandeep Somavarapu 已提交
798
				testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
799 800 801
				uninstallEvent.fire(local.identifier);
				assert.ok(!testObject.enabled);
			});
802 803 804
	});

	test('Test DisableForWorkspaceAction when there is no extension', () => {
S
Sandeep Somavarapu 已提交
805
		const testObject: ExtensionsActions.DisableForWorkspaceAction = instantiationService.createInstance(ExtensionsActions.DisableForWorkspaceAction, []);
806 807 808 809

		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
810
	test('Test DisableForWorkspaceAction when the extension is disabled globally', () => {
811
		const local = aLocalExtension('a');
S
rename  
Sandeep Somavarapu 已提交
812
		return instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledGlobally)
S
Sandeep Somavarapu 已提交
813 814 815 816 817
			.then(() => {
				instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

				return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
					.then(extensions => {
S
Sandeep Somavarapu 已提交
818 819
						const testObject: ExtensionsActions.DisableForWorkspaceAction = instantiationService.createInstance(ExtensionsActions.DisableForWorkspaceAction, []);
						testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
820 821 822
						assert.ok(!testObject.enabled);
					});
			});
823 824
	});

S
Sandeep Somavarapu 已提交
825
	test('Test DisableForWorkspaceAction when the extension is disabled workspace', () => {
826
		const local = aLocalExtension('a');
S
rename  
Sandeep Somavarapu 已提交
827
		return instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledGlobally)
S
Sandeep Somavarapu 已提交
828 829 830 831 832
			.then(() => {
				instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

				return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
					.then(extensions => {
S
Sandeep Somavarapu 已提交
833 834
						const testObject: ExtensionsActions.DisableForWorkspaceAction = instantiationService.createInstance(ExtensionsActions.DisableForWorkspaceAction, []);
						testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
835 836 837
						assert.ok(!testObject.enabled);
					});
			});
838 839
	});

S
Sandeep Somavarapu 已提交
840
	test('Test DisableForWorkspaceAction when extension is enabled', () => {
841 842 843
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
844 845
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
S
Sandeep Somavarapu 已提交
846 847
				const testObject: ExtensionsActions.DisableForWorkspaceAction = instantiationService.createInstance(ExtensionsActions.DisableForWorkspaceAction, [{ identifier: new ExtensionIdentifier('pub.a'), extensionLocation: URI.file('pub.a') }]);
				testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
848
				assert.ok(testObject.enabled);
S
Sandeep Somavarapu 已提交
849
			});
850 851 852
	});

	test('Test DisableGloballyAction when there is no extension', () => {
S
Sandeep Somavarapu 已提交
853
		const testObject: ExtensionsActions.DisableGloballyAction = instantiationService.createInstance(ExtensionsActions.DisableGloballyAction, []);
854 855 856 857

		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
858
	test('Test DisableGloballyAction when the extension is disabled globally', () => {
859
		const local = aLocalExtension('a');
S
rename  
Sandeep Somavarapu 已提交
860
		return instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledGlobally)
S
Sandeep Somavarapu 已提交
861 862 863 864 865
			.then(() => {
				instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

				return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
					.then(extensions => {
S
Sandeep Somavarapu 已提交
866 867
						const testObject: ExtensionsActions.DisableGloballyAction = instantiationService.createInstance(ExtensionsActions.DisableGloballyAction, []);
						testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
868 869 870
						assert.ok(!testObject.enabled);
					});
			});
871 872
	});

S
Sandeep Somavarapu 已提交
873
	test('Test DisableGloballyAction when the extension is disabled for workspace', () => {
874
		const local = aLocalExtension('a');
S
rename  
Sandeep Somavarapu 已提交
875
		return instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledWorkspace)
S
Sandeep Somavarapu 已提交
876 877 878 879 880
			.then(() => {
				instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

				return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
					.then(extensions => {
S
Sandeep Somavarapu 已提交
881 882
						const testObject: ExtensionsActions.DisableGloballyAction = instantiationService.createInstance(ExtensionsActions.DisableGloballyAction, []);
						testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
883 884 885
						assert.ok(!testObject.enabled);
					});
			});
886 887
	});

S
Sandeep Somavarapu 已提交
888
	test('Test DisableGloballyAction when the extension is enabled', () => {
889 890 891
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
892 893
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
S
Sandeep Somavarapu 已提交
894 895
				const testObject: ExtensionsActions.DisableGloballyAction = instantiationService.createInstance(ExtensionsActions.DisableGloballyAction, [{ identifier: new ExtensionIdentifier('pub.a'), extensionLocation: URI.file('pub.a') }]);
				testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
896
				assert.ok(testObject.enabled);
S
Sandeep Somavarapu 已提交
897
			});
898 899
	});

S
Sandeep Somavarapu 已提交
900
	test('Test DisableDropDownAction when there is no extension', () => {
S
Sandeep Somavarapu 已提交
901
		const testObject: ExtensionsActions.DisableDropDownAction = instantiationService.createInstance(ExtensionsActions.DisableDropDownAction, []);
902 903 904 905

		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
906
	test('Test DisableDropDownAction when extension is installed and enabled', () => {
907 908 909
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
910 911
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
S
Sandeep Somavarapu 已提交
912 913
				const testObject: ExtensionsActions.DisableDropDownAction = instantiationService.createInstance(ExtensionsActions.DisableDropDownAction, [{ identifier: new ExtensionIdentifier('pub.a'), extensionLocation: URI.file('pub.a') }]);
				testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
914
				assert.ok(testObject.enabled);
S
Sandeep Somavarapu 已提交
915
			});
916 917
	});

S
Sandeep Somavarapu 已提交
918
	test('Test DisableDropDownAction when extension is installed and disabled globally', () => {
919
		const local = aLocalExtension('a');
S
rename  
Sandeep Somavarapu 已提交
920
		return instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledGlobally)
S
Sandeep Somavarapu 已提交
921 922 923 924 925
			.then(() => {
				instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

				return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
					.then(extensions => {
S
Sandeep Somavarapu 已提交
926 927
						const testObject: ExtensionsActions.DisableDropDownAction = instantiationService.createInstance(ExtensionsActions.DisableDropDownAction, [{ identifier: new ExtensionIdentifier('pub.a'), extensionLocation: URI.file('pub.a') }]);
						testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
928 929 930
						assert.ok(!testObject.enabled);
					});
			});
931 932
	});

S
Sandeep Somavarapu 已提交
933
	test('Test DisableDropDownAction when extension is installed and disabled for workspace', () => {
934
		const local = aLocalExtension('a');
S
rename  
Sandeep Somavarapu 已提交
935
		return instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledWorkspace)
S
Sandeep Somavarapu 已提交
936 937 938 939 940
			.then(() => {
				instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

				return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
					.then(extensions => {
S
Sandeep Somavarapu 已提交
941 942
						const testObject: ExtensionsActions.DisableDropDownAction = instantiationService.createInstance(ExtensionsActions.DisableDropDownAction, [{ identifier: new ExtensionIdentifier('pub.a'), extensionLocation: URI.file('pub.a') }]);
						testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
943 944 945
						assert.ok(!testObject.enabled);
					});
			});
946 947
	});

S
Sandeep Somavarapu 已提交
948
	test('Test DisableDropDownAction when extension is uninstalled', () => {
949 950 951
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));

S
Sandeep Somavarapu 已提交
952
		return instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
953
			.then(page => {
S
Sandeep Somavarapu 已提交
954 955
				const testObject: ExtensionsActions.DisableDropDownAction = instantiationService.createInstance(ExtensionsActions.DisableDropDownAction, [{ identifier: new ExtensionIdentifier('pub.a'), extensionLocation: URI.file('pub.a') }]);
				testObject.extension = page.firstPage[0];
S
Sandeep Somavarapu 已提交
956 957
				assert.ok(!testObject.enabled);
			});
958 959
	});

S
Sandeep Somavarapu 已提交
960
	test('Test DisableDropDownAction when extension is installing', () => {
961 962 963
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));

S
Sandeep Somavarapu 已提交
964
		return instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
965
			.then(page => {
S
Sandeep Somavarapu 已提交
966 967
				const testObject: ExtensionsActions.DisableDropDownAction = instantiationService.createInstance(ExtensionsActions.DisableDropDownAction, [{ identifier: new ExtensionIdentifier('pub.a'), extensionLocation: URI.file('pub.a') }]);
				testObject.extension = page.firstPage[0];
968
				instantiationService.createInstance(ExtensionContainers, [testObject]);
S
Sandeep Somavarapu 已提交
969 970 971
				installEvent.fire({ identifier: gallery.identifier, gallery });
				assert.ok(!testObject.enabled);
			});
972 973
	});

S
Sandeep Somavarapu 已提交
974
	test('Test DisableDropDownAction when extension is uninstalling', () => {
975 976 977
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
978 979
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => {
S
Sandeep Somavarapu 已提交
980 981
				const testObject: ExtensionsActions.DisableDropDownAction = instantiationService.createInstance(ExtensionsActions.DisableDropDownAction, [{ identifier: new ExtensionIdentifier('pub.a'), extensionLocation: URI.file('pub.a') }]);
				testObject.extension = extensions[0];
982
				instantiationService.createInstance(ExtensionContainers, [testObject]);
S
Sandeep Somavarapu 已提交
983 984 985
				uninstallEvent.fire(local.identifier);
				assert.ok(!testObject.enabled);
			});
986 987 988 989 990 991 992 993
	});

	test('Test UpdateAllAction when no installed extensions', () => {
		const testObject: ExtensionsActions.UpdateAllAction = instantiationService.createInstance(ExtensionsActions.UpdateAllAction, 'id', 'label');

		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
994
	test('Test UpdateAllAction when installed extensions are not outdated', () => {
995 996
		const testObject: ExtensionsActions.UpdateAllAction = instantiationService.createInstance(ExtensionsActions.UpdateAllAction, 'id', 'label');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [aLocalExtension('a'), aLocalExtension('b')]);
S
Sandeep Somavarapu 已提交
997 998
		return instantiationService.get(IExtensionsWorkbenchService).queryLocal()
			.then(extensions => assert.ok(!testObject.enabled));
999 1000
	});

S
Sandeep Somavarapu 已提交
1001
	test('Test UpdateAllAction when some installed extensions are outdated', () => {
1002 1003 1004 1005
		const testObject: ExtensionsActions.UpdateAllAction = instantiationService.createInstance(ExtensionsActions.UpdateAllAction, 'id', 'label');
		const local = [aLocalExtension('a', { version: '1.0.1' }), aLocalExtension('b', { version: '1.0.1' }), aLocalExtension('c', { version: '1.0.1' })];
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', local);
S
Sandeep Somavarapu 已提交
1006
		return workbenchService.queryLocal()
S
Sandeep Somavarapu 已提交
1007 1008
			.then(async () => {
				instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: local[0].identifier, version: '1.0.2' }), aGalleryExtension('b', { identifier: local[1].identifier, version: '1.0.2' }), aGalleryExtension('c', local[2].manifest)));
S
Sandeep Somavarapu 已提交
1009 1010 1011 1012 1013 1014 1015
				assert.ok(!testObject.enabled);
				return new Promise(c => {
					testObject.onDidChange(() => {
						if (testObject.enabled) {
							c();
						}
					});
S
Sandeep Somavarapu 已提交
1016
					workbenchService.queryGallery(CancellationToken.None);
S
Sandeep Somavarapu 已提交
1017
				});
1018 1019 1020
			});
	});

S
Sandeep Somavarapu 已提交
1021
	test('Test UpdateAllAction when some installed extensions are outdated and some outdated are being installed', () => {
1022 1023
		const testObject: ExtensionsActions.UpdateAllAction = instantiationService.createInstance(ExtensionsActions.UpdateAllAction, 'id', 'label');
		const local = [aLocalExtension('a', { version: '1.0.1' }), aLocalExtension('b', { version: '1.0.1' }), aLocalExtension('c', { version: '1.0.1' })];
S
Sandeep Somavarapu 已提交
1024
		const gallery = [aGalleryExtension('a', { identifier: local[0].identifier, version: '1.0.2' }), aGalleryExtension('b', { identifier: local[1].identifier, version: '1.0.2' }), aGalleryExtension('c', local[2].manifest)];
1025 1026
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', local);
S
Sandeep Somavarapu 已提交
1027
		return workbenchService.queryLocal()
S
Sandeep Somavarapu 已提交
1028 1029
			.then(async () => {
				instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(...gallery));
S
Sandeep Somavarapu 已提交
1030 1031 1032 1033 1034 1035 1036 1037
				assert.ok(!testObject.enabled);
				return new Promise(c => {
					installEvent.fire({ identifier: local[0].identifier, gallery: gallery[0] });
					testObject.onDidChange(() => {
						if (testObject.enabled) {
							c();
						}
					});
S
Sandeep Somavarapu 已提交
1038
					workbenchService.queryGallery(CancellationToken.None);
S
Sandeep Somavarapu 已提交
1039
				});
1040 1041 1042
			});
	});

S
Sandeep Somavarapu 已提交
1043
	test('Test UpdateAllAction when some installed extensions are outdated and all outdated are being installed', () => {
1044 1045
		const testObject: ExtensionsActions.UpdateAllAction = instantiationService.createInstance(ExtensionsActions.UpdateAllAction, 'id', 'label');
		const local = [aLocalExtension('a', { version: '1.0.1' }), aLocalExtension('b', { version: '1.0.1' }), aLocalExtension('c', { version: '1.0.1' })];
S
Sandeep Somavarapu 已提交
1046
		const gallery = [aGalleryExtension('a', { identifier: local[0].identifier, version: '1.0.2' }), aGalleryExtension('b', { identifier: local[1].identifier, version: '1.0.2' }), aGalleryExtension('c', local[2].manifest)];
1047 1048
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', local);
S
Sandeep Somavarapu 已提交
1049 1050 1051
		return workbenchService.queryLocal()
			.then(() => {
				instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(...gallery));
S
Sandeep Somavarapu 已提交
1052
				return workbenchService.queryGallery(CancellationToken.None)
S
Sandeep Somavarapu 已提交
1053 1054 1055 1056 1057
					.then(() => {
						installEvent.fire({ identifier: local[0].identifier, gallery: gallery[0] });
						installEvent.fire({ identifier: local[1].identifier, gallery: gallery[1] });
						assert.ok(!testObject.enabled);
					});
1058 1059 1060 1061
			});
	});

	test('Test ReloadAction when there is no extension', () => {
S
Sandeep Somavarapu 已提交
1062
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
1063
		instantiationService.createInstance(ExtensionContainers, [testObject]);
1064 1065 1066 1067

		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
1068
	test('Test ReloadAction when extension state is installing', async () => {
S
Sandeep Somavarapu 已提交
1069
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
1070
		instantiationService.createInstance(ExtensionContainers, [testObject]);
1071 1072 1073
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));
S
Sandeep Somavarapu 已提交
1074 1075 1076
		const paged = await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = paged.firstPage[0];
		installEvent.fire({ identifier: gallery.identifier, gallery });
1077

S
Sandeep Somavarapu 已提交
1078
		assert.ok(!testObject.enabled);
1079 1080
	});

S
Sandeep Somavarapu 已提交
1081
	test('Test ReloadAction when extension state is uninstalling', async () => {
S
Sandeep Somavarapu 已提交
1082
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
1083
		instantiationService.createInstance(ExtensionContainers, [testObject]);
1084 1085 1086
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);

S
Sandeep Somavarapu 已提交
1087 1088 1089 1090
		const extensions = await instantiationService.get(IExtensionsWorkbenchService).queryLocal();
		testObject.extension = extensions[0];
		uninstallEvent.fire(local.identifier);
		assert.ok(!testObject.enabled);
1091 1092
	});

S
Sandeep Somavarapu 已提交
1093
	test('Test ReloadAction when extension is newly installed', async () => {
S
Sandeep Somavarapu 已提交
1094 1095 1096 1097 1098
		const onDidChangeExtensionsEmitter: Emitter<void> = new Emitter<void>();
		const runningExtensions = [{ identifier: new ExtensionIdentifier('pub.b'), extensionLocation: URI.file('pub.b') }];
		instantiationService.stub(IExtensionService, <Partial<IExtensionService>>{
			getExtensions: () => Promise.resolve(runningExtensions),
			onDidChangeExtensions: onDidChangeExtensionsEmitter.event,
S
Sandeep Somavarapu 已提交
1099
			canAddExtension: (extension) => false
S
Sandeep Somavarapu 已提交
1100
		});
S
Sandeep Somavarapu 已提交
1101
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
1102
		instantiationService.createInstance(ExtensionContainers, [testObject]);
1103 1104
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));
S
Sandeep Somavarapu 已提交
1105

S
Sandeep Somavarapu 已提交
1106
		const paged = await instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None);
S
Sandeep Somavarapu 已提交
1107 1108 1109
		testObject.extension = paged.firstPage[0];
		assert.ok(!testObject.enabled);

S
Sandeep Somavarapu 已提交
1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122
		installEvent.fire({ identifier: gallery.identifier, gallery });
		didInstallEvent.fire({ identifier: gallery.identifier, gallery, operation: InstallOperation.Install, local: aLocalExtension('a', gallery, gallery) });
		assert.ok(testObject.enabled);
		assert.equal(testObject.tooltip, 'Please reload Visual Studio Code to enable this extension.');
	});

	test('Test ReloadAction when extension is newly installed and reload is not required', async () => {
		const onDidChangeExtensionsEmitter: Emitter<void> = new Emitter<void>();
		const runningExtensions = [{ identifier: new ExtensionIdentifier('pub.b'), extensionLocation: URI.file('pub.b') }];
		instantiationService.stub(IExtensionService, <Partial<IExtensionService>>{
			getExtensions: () => Promise.resolve(runningExtensions),
			onDidChangeExtensions: onDidChangeExtensionsEmitter.event,
			canAddExtension: (extension) => true
S
Sandeep Somavarapu 已提交
1123
		});
S
Sandeep Somavarapu 已提交
1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));

		const paged = await instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None);
		testObject.extension = paged.firstPage[0];
		assert.ok(!testObject.enabled);

		installEvent.fire({ identifier: gallery.identifier, gallery });
		didInstallEvent.fire({ identifier: gallery.identifier, gallery, operation: InstallOperation.Install, local: aLocalExtension('a', gallery, gallery) });
		assert.ok(!testObject.enabled);
1136 1137
	});

S
Sandeep Somavarapu 已提交
1138
	test('Test ReloadAction when extension is installed and uninstalled', async () => {
1139
		instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ identifier: new ExtensionIdentifier('pub.b'), extensionLocation: URI.file('pub.b') }]);
S
Sandeep Somavarapu 已提交
1140
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
1141
		instantiationService.createInstance(ExtensionContainers, [testObject]);
1142 1143
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));
S
Sandeep Somavarapu 已提交
1144
		const paged = await instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None);
S
Sandeep Somavarapu 已提交
1145

S
Sandeep Somavarapu 已提交
1146 1147 1148 1149 1150 1151 1152 1153
		testObject.extension = paged.firstPage[0];
		const identifier = gallery.identifier;
		installEvent.fire({ identifier, gallery });
		didInstallEvent.fire({ identifier, gallery, operation: InstallOperation.Install, local: aLocalExtension('a', gallery, { identifier }) });
		uninstallEvent.fire(identifier);
		didUninstallEvent.fire({ identifier });

		assert.ok(!testObject.enabled);
1154 1155
	});

S
Sandeep Somavarapu 已提交
1156
	test('Test ReloadAction when extension is uninstalled', async () => {
1157
		instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ identifier: new ExtensionIdentifier('pub.a'), extensionLocation: URI.file('pub.a'), version: '1.0.0' }]);
S
Sandeep Somavarapu 已提交
1158
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
1159
		instantiationService.createInstance(ExtensionContainers, [testObject]);
1160 1161
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
S
Sandeep Somavarapu 已提交
1162 1163 1164
		const extensions = await instantiationService.get(IExtensionsWorkbenchService).queryLocal();
		testObject.extension = extensions[0];

S
Sandeep Somavarapu 已提交
1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177
		uninstallEvent.fire(local.identifier);
		didUninstallEvent.fire({ identifier: local.identifier });
		assert.ok(testObject.enabled);
		assert.equal(testObject.tooltip, 'Please reload Visual Studio Code to complete the uninstallation of this extension.');
	});

	test('Test ReloadAction when extension is uninstalled and can be removed', async () => {
		const local = aLocalExtension('a');
		instantiationService.stub(IExtensionService, <Partial<IExtensionService>>{
			getExtensions: () => Promise.resolve([ExtensionsActions.toExtensionDescription(local)]),
			onDidChangeExtensions: new Emitter<void>().event,
			canRemoveExtension: (extension) => true,
			canAddExtension: (extension) => true
S
Sandeep Somavarapu 已提交
1178
		});
S
Sandeep Somavarapu 已提交
1179 1180 1181 1182 1183 1184 1185 1186 1187
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
		const extensions = await instantiationService.get(IExtensionsWorkbenchService).queryLocal();
		testObject.extension = extensions[0];

		uninstallEvent.fire(local.identifier);
		didUninstallEvent.fire({ identifier: local.identifier });
		assert.ok(!testObject.enabled);
1188 1189
	});

S
Sandeep Somavarapu 已提交
1190
	test('Test ReloadAction when extension is uninstalled and installed', async () => {
1191
		instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ identifier: new ExtensionIdentifier('pub.a'), version: '1.0.0', extensionLocation: URI.file('pub.a') }]);
S
Sandeep Somavarapu 已提交
1192
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
1193
		instantiationService.createInstance(ExtensionContainers, [testObject]);
1194 1195
		const local = aLocalExtension('a');
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
S
Sandeep Somavarapu 已提交
1196
		const extensions = await instantiationService.get(IExtensionsWorkbenchService).queryLocal();
1197

S
Sandeep Somavarapu 已提交
1198 1199 1200
		testObject.extension = extensions[0];
		uninstallEvent.fire(local.identifier);
		didUninstallEvent.fire({ identifier: local.identifier });
1201

S
Sandeep Somavarapu 已提交
1202 1203 1204 1205 1206 1207
		const gallery = aGalleryExtension('a');
		const identifier = gallery.identifier;
		installEvent.fire({ identifier, gallery });
		didInstallEvent.fire({ identifier, gallery, operation: InstallOperation.Install, local });

		assert.ok(!testObject.enabled);
1208 1209
	});

S
Sandeep Somavarapu 已提交
1210
	test('Test ReloadAction when extension is updated while running', async () => {
1211
		instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ identifier: new ExtensionIdentifier('pub.a'), version: '1.0.1', extensionLocation: URI.file('pub.a') }]);
S
Sandeep Somavarapu 已提交
1212
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
1213
		instantiationService.createInstance(ExtensionContainers, [testObject]);
1214 1215 1216
		const local = aLocalExtension('a', { version: '1.0.1' });
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
S
Sandeep Somavarapu 已提交
1217 1218 1219 1220 1221
		const extensions = await workbenchService.queryLocal();
		testObject.extension = extensions[0];

		return new Promise(c => {
			testObject.onDidChange(() => {
1222
				if (testObject.enabled && testObject.tooltip === 'Please reload Visual Studio Code to enable the updated extension.') {
S
Sandeep Somavarapu 已提交
1223 1224
					c();
				}
S
Sandeep Somavarapu 已提交
1225
			});
S
Sandeep Somavarapu 已提交
1226 1227 1228 1229
			const gallery = aGalleryExtension('a', { uuid: local.identifier.id, version: '1.0.2' });
			installEvent.fire({ identifier: gallery.identifier, gallery });
			didInstallEvent.fire({ identifier: gallery.identifier, gallery, operation: InstallOperation.Install, local: aLocalExtension('a', gallery, gallery) });
		});
1230 1231
	});

S
Sandeep Somavarapu 已提交
1232
	test('Test ReloadAction when extension is updated when not running', async () => {
1233
		instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ identifier: new ExtensionIdentifier('pub.b'), extensionLocation: URI.file('pub.b') }]);
1234
		const local = aLocalExtension('a', { version: '1.0.1' });
S
rename  
Sandeep Somavarapu 已提交
1235
		await instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledGlobally);
S
Sandeep Somavarapu 已提交
1236 1237 1238 1239 1240 1241
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
		const extensions = await workbenchService.queryLocal();
		testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
1242

S
Sandeep Somavarapu 已提交
1243 1244 1245
		const gallery = aGalleryExtension('a', { identifier: local.identifier, version: '1.0.2' });
		installEvent.fire({ identifier: gallery.identifier, gallery });
		didInstallEvent.fire({ identifier: gallery.identifier, gallery, operation: InstallOperation.Update, local: aLocalExtension('a', gallery, gallery) });
S
Sandeep Somavarapu 已提交
1246

S
Sandeep Somavarapu 已提交
1247
		assert.ok(!testObject.enabled);
1248 1249
	});

S
Sandeep Somavarapu 已提交
1250
	test('Test ReloadAction when extension is disabled when running', async () => {
1251
		instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ identifier: new ExtensionIdentifier('pub.a'), extensionLocation: URI.file('pub.a') }]);
S
Sandeep Somavarapu 已提交
1252
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
1253
		instantiationService.createInstance(ExtensionContainers, [testObject]);
1254 1255 1256
		const local = aLocalExtension('a');
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
S
Sandeep Somavarapu 已提交
1257 1258 1259 1260 1261 1262 1263
		const extensions = await workbenchService.queryLocal();
		testObject.extension = extensions[0];
		await workbenchService.setEnablement(extensions[0], EnablementState.DisabledGlobally);
		await testObject.update();

		assert.ok(testObject.enabled);
		assert.equal('Please reload Visual Studio Code to disable this extension.', testObject.tooltip);
1264 1265
	});

S
Sandeep Somavarapu 已提交
1266
	test('Test ReloadAction when extension enablement is toggled when running', async () => {
1267
		instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ identifier: new ExtensionIdentifier('pub.a'), version: '1.0.0', extensionLocation: URI.file('pub.a') }]);
S
Sandeep Somavarapu 已提交
1268
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
1269
		instantiationService.createInstance(ExtensionContainers, [testObject]);
1270 1271 1272
		const local = aLocalExtension('a');
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
S
Sandeep Somavarapu 已提交
1273 1274 1275 1276 1277
		const extensions = await workbenchService.queryLocal();
		testObject.extension = extensions[0];
		await workbenchService.setEnablement(extensions[0], EnablementState.DisabledGlobally);
		await workbenchService.setEnablement(extensions[0], EnablementState.EnabledGlobally);
		assert.ok(!testObject.enabled);
1278 1279
	});

S
Sandeep Somavarapu 已提交
1280
	test('Test ReloadAction when extension is enabled when not running', async () => {
1281
		instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ identifier: new ExtensionIdentifier('pub.b'), extensionLocation: URI.file('pub.b') }]);
1282
		const local = aLocalExtension('a');
S
rename  
Sandeep Somavarapu 已提交
1283
		await instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledGlobally);
S
Sandeep Somavarapu 已提交
1284 1285 1286 1287 1288 1289 1290 1291 1292 1293
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
		const extensions = await workbenchService.queryLocal();
		testObject.extension = extensions[0];
		await workbenchService.setEnablement(extensions[0], EnablementState.EnabledGlobally);
		await testObject.update();
		assert.ok(testObject.enabled);
		assert.equal('Please reload Visual Studio Code to enable this extension.', testObject.tooltip);
1294 1295
	});

S
Sandeep Somavarapu 已提交
1296
	test('Test ReloadAction when extension enablement is toggled when not running', async () => {
1297
		instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ identifier: new ExtensionIdentifier('pub.b'), extensionLocation: URI.file('pub.b') }]);
1298
		const local = aLocalExtension('a');
S
rename  
Sandeep Somavarapu 已提交
1299
		await instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledGlobally);
S
Sandeep Somavarapu 已提交
1300 1301 1302 1303 1304 1305 1306 1307 1308
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
		const extensions = await workbenchService.queryLocal();
		testObject.extension = extensions[0];
		await workbenchService.setEnablement(extensions[0], EnablementState.EnabledGlobally);
		await workbenchService.setEnablement(extensions[0], EnablementState.DisabledGlobally);
		assert.ok(!testObject.enabled);
1309 1310
	});

S
Sandeep Somavarapu 已提交
1311
	test('Test ReloadAction when extension is updated when not running and enabled', async () => {
1312
		instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ identifier: new ExtensionIdentifier('pub.b'), extensionLocation: URI.file('pub.b') }]);
1313
		const local = aLocalExtension('a', { version: '1.0.1' });
S
rename  
Sandeep Somavarapu 已提交
1314
		await instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledGlobally);
S
Sandeep Somavarapu 已提交
1315 1316 1317 1318 1319 1320
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
		const extensions = await workbenchService.queryLocal();
		testObject.extension = extensions[0];
S
Sandeep Somavarapu 已提交
1321

S
Sandeep Somavarapu 已提交
1322 1323 1324 1325 1326 1327 1328
		const gallery = aGalleryExtension('a', { identifier: local.identifier, version: '1.0.2' });
		installEvent.fire({ identifier: gallery.identifier, gallery });
		didInstallEvent.fire({ identifier: gallery.identifier, gallery, operation: InstallOperation.Install, local: aLocalExtension('a', gallery, gallery) });
		await workbenchService.setEnablement(extensions[0], EnablementState.EnabledGlobally);
		await testObject.update();
		assert.ok(testObject.enabled);
		assert.equal('Please reload Visual Studio Code to enable this extension.', testObject.tooltip);
1329 1330
	});

S
Sandeep Somavarapu 已提交
1331
	test('Test ReloadAction when a localization extension is newly installed', async () => {
1332
		instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ identifier: new ExtensionIdentifier('pub.b'), extensionLocation: URI.file('pub.b') }]);
S
Sandeep Somavarapu 已提交
1333
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
1334
		instantiationService.createInstance(ExtensionContainers, [testObject]);
S
Sandeep Somavarapu 已提交
1335 1336 1337
		const gallery = aGalleryExtension('a');
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));

S
Sandeep Somavarapu 已提交
1338
		const paged = await instantiationService.get(IExtensionsWorkbenchService).queryGallery(CancellationToken.None);
S
Sandeep Somavarapu 已提交
1339 1340 1341 1342 1343 1344 1345 1346 1347
		testObject.extension = paged.firstPage[0];
		assert.ok(!testObject.enabled);

		installEvent.fire({ identifier: gallery.identifier, gallery });
		didInstallEvent.fire({ identifier: gallery.identifier, gallery, operation: InstallOperation.Install, local: aLocalExtension('a', { ...gallery, ...{ contributes: <IExtensionContributions>{ localizations: [{ languageId: 'de', translations: [] }] } } }, gallery) });
		assert.ok(!testObject.enabled);
	});

	test('Test ReloadAction when a localization extension is updated while running', async () => {
1348
		instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ identifier: new ExtensionIdentifier('pub.a'), version: '1.0.1', extensionLocation: URI.file('pub.a') }]);
S
Sandeep Somavarapu 已提交
1349
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
1350
		instantiationService.createInstance(ExtensionContainers, [testObject]);
S
Sandeep Somavarapu 已提交
1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362
		const local = aLocalExtension('a', { version: '1.0.1', contributes: <IExtensionContributions>{ localizations: [{ languageId: 'de', translations: [] }] } });
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
		const extensions = await workbenchService.queryLocal();
		testObject.extension = extensions[0];

		const gallery = aGalleryExtension('a', { uuid: local.identifier.id, version: '1.0.2' });
		installEvent.fire({ identifier: gallery.identifier, gallery });
		didInstallEvent.fire({ identifier: gallery.identifier, gallery, operation: InstallOperation.Install, local: aLocalExtension('a', { ...gallery, ...{ contributes: <IExtensionContributions>{ localizations: [{ languageId: 'de', translations: [] }] } } }, gallery) });
		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
1363 1364 1365
	test('Test ReloadAction when extension is not installed but extension from different server is installed and running', async () => {
		// multi server setup
		const gallery = aGalleryExtension('a');
S
#85036  
Sandeep Somavarapu 已提交
1366 1367
		const localExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file('pub.a') });
		const remoteExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file('pub.a').with({ scheme: Schemas.vscodeRemote }) });
S
Sandeep Somavarapu 已提交
1368 1369
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localExtension]), createExtensionManagementService([remoteExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1370
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
S
Sandeep Somavarapu 已提交
1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		const onDidChangeExtensionsEmitter: Emitter<void> = new Emitter<void>();
		const runningExtensions = [ExtensionsActions.toExtensionDescription(remoteExtension)];
		instantiationService.stub(IExtensionService, <Partial<IExtensionService>>{
			getExtensions: () => Promise.resolve(runningExtensions),
			onDidChangeExtensions: onDidChangeExtensionsEmitter.event,
			canAddExtension: (extension) => false
		});
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));

		await workbenchService.queryGallery(CancellationToken.None);
		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);
	});

	test('Test ReloadAction when extension is uninstalled but extension from different server is installed and running', async () => {
		// multi server setup
		const gallery = aGalleryExtension('a');
S
#85036  
Sandeep Somavarapu 已提交
1395 1396
		const localExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file('pub.a') });
		const remoteExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file('pub.a').with({ scheme: Schemas.vscodeRemote }) });
S
Sandeep Somavarapu 已提交
1397 1398 1399 1400 1401 1402 1403
		const localExtensionManagementService = createExtensionManagementService([localExtension]);
		const uninstallEvent = new Emitter<IExtensionIdentifier>();
		const onDidUninstallEvent = new Emitter<{ identifier: IExtensionIdentifier }>();
		localExtensionManagementService.onUninstallExtension = uninstallEvent.event;
		localExtensionManagementService.onDidUninstallExtension = onDidUninstallEvent.event;
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, localExtensionManagementService, createExtensionManagementService([remoteExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1404
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
S
Sandeep Somavarapu 已提交
1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		const onDidChangeExtensionsEmitter: Emitter<void> = new Emitter<void>();
		const runningExtensions = [ExtensionsActions.toExtensionDescription(remoteExtension)];
		instantiationService.stub(IExtensionService, <Partial<IExtensionService>>{
			getExtensions: () => Promise.resolve(runningExtensions),
			onDidChangeExtensions: onDidChangeExtensionsEmitter.event,
			canAddExtension: (extension) => false
		});
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));

		await workbenchService.queryGallery(CancellationToken.None);
		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);

		uninstallEvent.fire(localExtension.identifier);
		didUninstallEvent.fire({ identifier: localExtension.identifier });

		assert.ok(!testObject.enabled);
	});

	test('Test ReloadAction when workspace extension is disabled on local server and installed in remote server', async () => {
		// multi server setup
		const gallery = aGalleryExtension('a');
		const remoteExtensionManagementService = createExtensionManagementService([]);
		const onDidInstallEvent = new Emitter<DidInstallExtensionEvent>();
		remoteExtensionManagementService.onDidInstallExtension = onDidInstallEvent.event;
S
#85036  
Sandeep Somavarapu 已提交
1437
		const localExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file('pub.a') });
S
Sandeep Somavarapu 已提交
1438 1439
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localExtension]), remoteExtensionManagementService);
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1440
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
S
Sandeep Somavarapu 已提交
1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		const onDidChangeExtensionsEmitter: Emitter<void> = new Emitter<void>();
		instantiationService.stub(IExtensionService, <Partial<IExtensionService>>{
			getExtensions: () => Promise.resolve([]),
			onDidChangeExtensions: onDidChangeExtensionsEmitter.event,
			canAddExtension: (extension) => false
		});
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));

		await workbenchService.queryGallery(CancellationToken.None);
		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);

S
#85036  
Sandeep Somavarapu 已提交
1460
		const remoteExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file('pub.a').with({ scheme: Schemas.vscodeRemote }) });
S
Sandeep Somavarapu 已提交
1461 1462 1463 1464 1465 1466
		onDidInstallEvent.fire({ identifier: remoteExtension.identifier, local: remoteExtension, operation: InstallOperation.Install });

		assert.ok(testObject.enabled);
		assert.equal(testObject.tooltip, 'Please reload Visual Studio Code to enable this extension.');
	});

1467
	test('Test ReloadAction when ui extension is disabled on remote server and installed in local server', async () => {
S
Sandeep Somavarapu 已提交
1468 1469 1470 1471 1472
		// multi server setup
		const gallery = aGalleryExtension('a');
		const localExtensionManagementService = createExtensionManagementService([]);
		const onDidInstallEvent = new Emitter<DidInstallExtensionEvent>();
		localExtensionManagementService.onDidInstallExtension = onDidInstallEvent.event;
S
#85036  
Sandeep Somavarapu 已提交
1473
		const remoteExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file('pub.a').with({ scheme: Schemas.vscodeRemote }) });
S
Sandeep Somavarapu 已提交
1474 1475
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, localExtensionManagementService, createExtensionManagementService([remoteExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1476
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
S
Sandeep Somavarapu 已提交
1477 1478 1479 1480 1481
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		const onDidChangeExtensionsEmitter: Emitter<void> = new Emitter<void>();
		instantiationService.stub(IExtensionService, <Partial<IExtensionService>>{
1482
			getExtensions: () => Promise.resolve([]),
S
Sandeep Somavarapu 已提交
1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495
			onDidChangeExtensions: onDidChangeExtensionsEmitter.event,
			canAddExtension: (extension) => false
		});
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));

		await workbenchService.queryGallery(CancellationToken.None);
		const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);

S
#85036  
Sandeep Somavarapu 已提交
1496
		const localExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file('pub.a') });
S
Sandeep Somavarapu 已提交
1497 1498
		onDidInstallEvent.fire({ identifier: localExtension.identifier, local: localExtension, operation: InstallOperation.Install });

1499 1500
		assert.ok(testObject.enabled);
		assert.equal(testObject.tooltip, 'Please reload Visual Studio Code to enable this extension.');
S
Sandeep Somavarapu 已提交
1501
	});
S
Sandeep Somavarapu 已提交
1502

1503 1504 1505
	test('Test ReloadAction for remote ui extension is disabled when it is installed and enabled in local server', async () => {
		// multi server setup
		const gallery = aGalleryExtension('a');
S
#85036  
Sandeep Somavarapu 已提交
1506
		const localExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file('pub.a') });
1507 1508 1509
		const localExtensionManagementService = createExtensionManagementService([localExtension]);
		const onDidInstallEvent = new Emitter<DidInstallExtensionEvent>();
		localExtensionManagementService.onDidInstallExtension = onDidInstallEvent.event;
S
#85036  
Sandeep Somavarapu 已提交
1510
		const remoteExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file('pub.a').with({ scheme: Schemas.vscodeRemote }) });
1511 1512
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, localExtensionManagementService, createExtensionManagementService([remoteExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1513
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		const onDidChangeExtensionsEmitter: Emitter<void> = new Emitter<void>();
		instantiationService.stub(IExtensionService, <Partial<IExtensionService>>{
			getExtensions: () => Promise.resolve([ExtensionsActions.toExtensionDescription(localExtension)]),
			onDidChangeExtensions: onDidChangeExtensionsEmitter.event,
			canAddExtension: (extension) => false
		});
		const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));

		await workbenchService.queryGallery(CancellationToken.None);
		const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
1534 1535
	test('Test remote install action is enabled for local workspace extension', async () => {
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
1536
		const localWorkspaceExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file(`pub.a`) });
1537
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]));
S
Sandeep Somavarapu 已提交
1538
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1539
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
1540
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
S
Sandeep Somavarapu 已提交
1541 1542
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

1543 1544 1545 1546 1547 1548 1549 1550
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: localWorkspaceExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.RemoteInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
		assert.ok(testObject.enabled);
S
Sandeep Somavarapu 已提交
1551
		assert.equal('Install in remote', testObject.label);
1552 1553 1554
		assert.equal('extension-action prominent install', testObject.class);
	});

S
Sandeep Somavarapu 已提交
1555
	test('Test remote install action when installing local workspace extension', async () => {
S
Sandeep Somavarapu 已提交
1556 1557
		// multi server setup
		const remoteExtensionManagementService: IExtensionManagementService = createExtensionManagementService();
S
Sandeep Somavarapu 已提交
1558 1559
		const onInstallExtension = new Emitter<InstallExtensionEvent>();
		remoteExtensionManagementService.onInstallExtension = onInstallExtension.event;
S
#85036  
Sandeep Somavarapu 已提交
1560
		const localWorkspaceExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file(`pub.a`) });
S
Sandeep Somavarapu 已提交
1561 1562
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]), remoteExtensionManagementService);
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1563
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
S
Sandeep Somavarapu 已提交
1564 1565 1566 1567
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.stub(IExtensionsWorkbenchService, workbenchService, 'open', undefined);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

S
Sandeep Somavarapu 已提交
1568 1569
		const gallery = aGalleryExtension('a', { identifier: localWorkspaceExtension.identifier });
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));
S
Sandeep Somavarapu 已提交
1570 1571 1572 1573 1574 1575 1576
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.RemoteInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
		assert.ok(testObject.enabled);
S
Sandeep Somavarapu 已提交
1577
		assert.equal('Install in remote', testObject.label);
S
Sandeep Somavarapu 已提交
1578 1579
		assert.equal('extension-action prominent install', testObject.class);

S
Sandeep Somavarapu 已提交
1580 1581 1582 1583
		onInstallExtension.fire({ identifier: localWorkspaceExtension.identifier, gallery });
		assert.ok(testObject.enabled);
		assert.equal('Installing', testObject.label);
		assert.equal('extension-action install installing', testObject.class);
S
Sandeep Somavarapu 已提交
1584 1585
	});

S
Sandeep Somavarapu 已提交
1586
	test('Test remote install action when installing local workspace extension is finished', async () => {
S
Sandeep Somavarapu 已提交
1587 1588
		// multi server setup
		const remoteExtensionManagementService: IExtensionManagementService = createExtensionManagementService();
S
Sandeep Somavarapu 已提交
1589 1590
		const onInstallExtension = new Emitter<InstallExtensionEvent>();
		remoteExtensionManagementService.onInstallExtension = onInstallExtension.event;
S
Sandeep Somavarapu 已提交
1591 1592
		const onDidInstallEvent = new Emitter<DidInstallExtensionEvent>();
		remoteExtensionManagementService.onDidInstallExtension = onDidInstallEvent.event;
S
#85036  
Sandeep Somavarapu 已提交
1593
		const localWorkspaceExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file(`pub.a`) });
S
Sandeep Somavarapu 已提交
1594 1595
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]), remoteExtensionManagementService);
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1596
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
S
Sandeep Somavarapu 已提交
1597 1598 1599 1600
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.stub(IExtensionsWorkbenchService, workbenchService, 'open', undefined);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

S
Sandeep Somavarapu 已提交
1601 1602
		const gallery = aGalleryExtension('a', { identifier: localWorkspaceExtension.identifier });
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));
S
Sandeep Somavarapu 已提交
1603 1604 1605 1606 1607 1608 1609
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.RemoteInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
		assert.ok(testObject.enabled);
S
Sandeep Somavarapu 已提交
1610
		assert.equal('Install in remote', testObject.label);
S
Sandeep Somavarapu 已提交
1611 1612
		assert.equal('extension-action prominent install', testObject.class);

S
Sandeep Somavarapu 已提交
1613
		onInstallExtension.fire({ identifier: localWorkspaceExtension.identifier, gallery });
S
Sandeep Somavarapu 已提交
1614
		assert.ok(testObject.enabled);
S
Sandeep Somavarapu 已提交
1615 1616
		assert.equal('Installing', testObject.label);
		assert.equal('extension-action install installing', testObject.class);
S
Sandeep Somavarapu 已提交
1617

S
#85036  
Sandeep Somavarapu 已提交
1618
		const installedExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
S
Sandeep Somavarapu 已提交
1619
		onDidInstallEvent.fire({ identifier: installedExtension.identifier, local: installedExtension, operation: InstallOperation.Install });
S
Sandeep Somavarapu 已提交
1620
		assert.ok(!testObject.enabled);
S
Sandeep Somavarapu 已提交
1621 1622
	});

1623 1624
	test('Test remote install action is enabled for disabled local workspace extension', async () => {
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
1625
		const localWorkspaceExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file(`pub.a`) });
1626 1627
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1628
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
1629 1630 1631
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

S
rename  
Sandeep Somavarapu 已提交
1632
		await instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([localWorkspaceExtension], EnablementState.DisabledGlobally);
S
Sandeep Somavarapu 已提交
1633 1634 1635 1636 1637 1638 1639 1640
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: localWorkspaceExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.RemoteInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
		assert.ok(testObject.enabled);
S
Sandeep Somavarapu 已提交
1641
		assert.equal('Install in remote', testObject.label);
S
Sandeep Somavarapu 已提交
1642 1643
		assert.equal('extension-action prominent install', testObject.class);
	});
S
Sandeep Somavarapu 已提交
1644

1645 1646
	test('Test remote install action is disabled when extension is not set', async () => {
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
1647
		const localWorkspaceExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file(`pub.a`) });
1648
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]));
S
rename  
Sandeep Somavarapu 已提交
1649
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: localWorkspaceExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.RemoteInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		assert.ok(!testObject.enabled);
	});

	test('Test remote install action is disabled for extension which is not installed', async () => {
		// multi server setup
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService);
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1666
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a')));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.RemoteInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const pager = await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = pager.firstPage[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);
	});

	test('Test remote install action is disabled for local workspace extension which is disabled in env', async () => {
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
1682
		const localWorkspaceExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file(`pub.a`) });
1683 1684 1685
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]));
		instantiationService.stub(IWorkbenchEnvironmentService, { disableExtensions: true } as IWorkbenchEnvironmentService);
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1686
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: localWorkspaceExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.RemoteInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);
	});

	test('Test remote install action is disabled when remote server is not available', async () => {
		// single server setup
		const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
		const extensionManagementServerService = instantiationService.get(IExtensionManagementServerService);
S
#85036  
Sandeep Somavarapu 已提交
1705
		const localWorkspaceExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file(`pub.a`) });
1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [localWorkspaceExtension]);
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: localWorkspaceExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.RemoteInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
1718 1719 1720 1721 1722
	test('Test remote install action is disabled for local workspace extension if it is uninstalled locally', async () => {
		// multi server setup
		const extensionManagementService = instantiationService.get(IExtensionManagementService);
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, extensionManagementService);
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1723
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
S
#85036  
Sandeep Somavarapu 已提交
1724
		const localWorkspaceExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file(`pub.a`) });
S
Sandeep Somavarapu 已提交
1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [localWorkspaceExtension]);
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: localWorkspaceExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.RemoteInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
		assert.ok(testObject.enabled);
S
Sandeep Somavarapu 已提交
1737
		assert.equal('Install in remote', testObject.label);
S
Sandeep Somavarapu 已提交
1738 1739 1740 1741 1742

		uninstallEvent.fire(localWorkspaceExtension.identifier);
		assert.ok(!testObject.enabled);
	});

1743 1744
	test('Test remote install action is disabled for local workspace extension if it is installed in remote', async () => {
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
1745 1746
		const localWorkspaceExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file(`pub.a`) });
		const remoteWorkspaceExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
1747 1748
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]), createExtensionManagementService([remoteWorkspaceExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1749
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: localWorkspaceExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.RemoteInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
1764
	test('Test remote install action is enabled for local workspace extension if it has not gallery', async () => {
1765
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
1766
		const localWorkspaceExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file(`pub.a`) });
1767 1768
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1769
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
1770 1771 1772 1773 1774 1775 1776 1777 1778 1779
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: localWorkspaceExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.RemoteInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
S
Sandeep Somavarapu 已提交
1780
		assert.ok(testObject.enabled);
1781 1782
	});

1783 1784
	test('Test remote install action is disabled for local workspace system extension', async () => {
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
1785
		const localWorkspaceSystemExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file(`pub.a`), type: ExtensionType.System });
1786 1787
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceSystemExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1788
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: localWorkspaceSystemExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.RemoteInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);
	});

1802 1803
	test('Test remote install action is disabled for local ui extension if it is not installed in remote', async () => {
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
1804
		const localUIExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file(`pub.a`) });
1805 1806
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localUIExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1807
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: localUIExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.RemoteInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);
	});

	test('Test remote install action is disabled for local ui extension if it is also installed in remote', async () => {
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
1823 1824
		const localUIExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file(`pub.a`) });
		const remoteUIExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
1825 1826
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localUIExtension]), createExtensionManagementService([remoteUIExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1827
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: localUIExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.RemoteInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
1841 1842 1843 1844 1845
	test('Test remote install action is enabled for locally installed language pack extension', async () => {
		// multi server setup
		const languagePackExtension = aLocalExtension('a', { contributes: <IExtensionContributions>{ localizations: [{ languageId: 'de', translations: [] }] } }, { location: URI.file(`pub.a`) });
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([languagePackExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1846
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
S
Sandeep Somavarapu 已提交
1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: languagePackExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.RemoteInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
		assert.ok(testObject.enabled);
S
Sandeep Somavarapu 已提交
1858
		assert.equal('Install in remote', testObject.label);
S
Sandeep Somavarapu 已提交
1859 1860 1861 1862 1863 1864 1865 1866
		assert.equal('extension-action prominent install', testObject.class);
	});

	test('Test remote install action is disabled if local language pack extension is uninstalled', async () => {
		// multi server setup
		const extensionManagementService = instantiationService.get(IExtensionManagementService);
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, extensionManagementService);
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1867
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
S
Sandeep Somavarapu 已提交
1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880
		const languagePackExtension = aLocalExtension('a', { contributes: <IExtensionContributions>{ localizations: [{ languageId: 'de', translations: [] }] } }, { location: URI.file(`pub.a`) });
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [languagePackExtension]);
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: languagePackExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.RemoteInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
		assert.ok(testObject.enabled);
S
Sandeep Somavarapu 已提交
1881
		assert.equal('Install in remote', testObject.label);
S
Sandeep Somavarapu 已提交
1882 1883 1884 1885 1886

		uninstallEvent.fire(languagePackExtension.identifier);
		assert.ok(!testObject.enabled);
	});

1887
	test('Test local install action is enabled for remote ui extension', async () => {
1888
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
1889
		const remoteUIExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
1890 1891
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUIExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1892
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
1893 1894 1895 1896 1897 1898 1899 1900 1901 1902
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: remoteUIExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
1903 1904 1905
		assert.ok(testObject.enabled);
		assert.equal('Install Locally', testObject.label);
		assert.equal('extension-action prominent install', testObject.class);
1906 1907
	});

S
Sandeep Somavarapu 已提交
1908
	test('Test local install action when installing remote ui extension', async () => {
S
Sandeep Somavarapu 已提交
1909 1910
		// multi server setup
		const localExtensionManagementService: IExtensionManagementService = createExtensionManagementService();
S
Sandeep Somavarapu 已提交
1911 1912
		const onInstallExtension = new Emitter<InstallExtensionEvent>();
		localExtensionManagementService.onInstallExtension = onInstallExtension.event;
S
#85036  
Sandeep Somavarapu 已提交
1913
		const remoteUIExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
S
Sandeep Somavarapu 已提交
1914 1915
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, localExtensionManagementService, createExtensionManagementService([remoteUIExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1916
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
S
Sandeep Somavarapu 已提交
1917 1918 1919 1920
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.stub(IExtensionsWorkbenchService, workbenchService, 'open', undefined);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

S
Sandeep Somavarapu 已提交
1921 1922
		const gallery = aGalleryExtension('a', { identifier: remoteUIExtension.identifier });
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));
S
Sandeep Somavarapu 已提交
1923 1924 1925 1926 1927 1928
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945
		assert.ok(testObject.enabled);
		assert.equal('Install Locally', testObject.label);
		assert.equal('extension-action prominent install', testObject.class);

		onInstallExtension.fire({ identifier: remoteUIExtension.identifier, gallery });
		assert.ok(testObject.enabled);
		assert.equal('Installing', testObject.label);
		assert.equal('extension-action install installing', testObject.class);
	});

	test('Test local install action when installing remote ui extension is finished', async () => {
		// multi server setup
		const localExtensionManagementService: IExtensionManagementService = createExtensionManagementService();
		const onInstallExtension = new Emitter<InstallExtensionEvent>();
		localExtensionManagementService.onInstallExtension = onInstallExtension.event;
		const onDidInstallEvent = new Emitter<DidInstallExtensionEvent>();
		localExtensionManagementService.onDidInstallExtension = onDidInstallEvent.event;
S
#85036  
Sandeep Somavarapu 已提交
1946
		const remoteUIExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
1947 1948
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, localExtensionManagementService, createExtensionManagementService([remoteUIExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1949
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.stub(IExtensionsWorkbenchService, workbenchService, 'open', undefined);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		const gallery = aGalleryExtension('a', { identifier: remoteUIExtension.identifier });
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
		assert.ok(testObject.enabled);
		assert.equal('Install Locally', testObject.label);
		assert.equal('extension-action prominent install', testObject.class);

		onInstallExtension.fire({ identifier: remoteUIExtension.identifier, gallery });
		assert.ok(testObject.enabled);
		assert.equal('Installing', testObject.label);
		assert.equal('extension-action install installing', testObject.class);

S
#85036  
Sandeep Somavarapu 已提交
1971
		const installedExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file(`pub.a`) });
1972
		onDidInstallEvent.fire({ identifier: installedExtension.identifier, local: installedExtension, operation: InstallOperation.Install });
S
Sandeep Somavarapu 已提交
1973
		assert.ok(!testObject.enabled);
S
Sandeep Somavarapu 已提交
1974 1975
	});

1976
	test('Test local install action is enabled for disabled remote ui extension', async () => {
1977
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
1978
		const remoteUIExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
1979 1980
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUIExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
1981
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
1982 1983 1984
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

S
rename  
Sandeep Somavarapu 已提交
1985
		await instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([remoteUIExtension], EnablementState.DisabledGlobally);
1986 1987 1988 1989 1990 1991 1992
		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: remoteUIExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
1993 1994 1995
		assert.ok(testObject.enabled);
		assert.equal('Install Locally', testObject.label);
		assert.equal('extension-action prominent install', testObject.class);
1996 1997 1998 1999
	});

	test('Test local install action is disabled when extension is not set', async () => {
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
2000
		const remoteUIExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
2001
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUIExtension]));
S
rename  
Sandeep Somavarapu 已提交
2002
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: remoteUIExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		assert.ok(!testObject.enabled);
	});

	test('Test local install action is disabled for extension which is not installed', async () => {
		// multi server setup
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService);
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
2019
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a')));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const pager = await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = pager.firstPage[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);
	});

	test('Test local install action is disabled for remote ui extension which is disabled in env', async () => {
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
2035
		const remoteUIExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
2036 2037 2038
		instantiationService.stub(IWorkbenchEnvironmentService, { disableExtensions: true } as IWorkbenchEnvironmentService);
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUIExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
2039
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: remoteUIExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);
	});

	test('Test local install action is disabled when local server is not available', async () => {
		// single server setup
S
#85036  
Sandeep Somavarapu 已提交
2056
		const remoteUIExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
2057 2058
		const extensionManagementServerService = aSingleRemoteExtensionManagementServerService(instantiationService, createExtensionManagementService([remoteUIExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
2059
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: remoteUIExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);
	});

	test('Test local install action is disabled for remote ui extension if it is installed in local', async () => {
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
2076 2077
		const localUIExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file(`pub.a`) });
		const remoteUIExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
2078 2079
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localUIExtension]), createExtensionManagementService([remoteUIExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
2080
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: localUIExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);
	});

2095
	test('Test local install action is disabled for remoteUI extension if it is uninstalled locally', async () => {
S
Sandeep Somavarapu 已提交
2096 2097 2098 2099
		// multi server setup
		const extensionManagementService = instantiationService.get(IExtensionManagementService);
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), extensionManagementService);
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
2100
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
S
#85036  
Sandeep Somavarapu 已提交
2101
		const remoteUIExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
S
Sandeep Somavarapu 已提交
2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [remoteUIExtension]);
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: remoteUIExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
2113 2114
		assert.ok(testObject.enabled);
		assert.equal('Install Locally', testObject.label);
S
Sandeep Somavarapu 已提交
2115 2116 2117

		uninstallEvent.fire(remoteUIExtension.identifier);
		assert.ok(!testObject.enabled);
S
Sandeep Somavarapu 已提交
2118 2119
	});

2120
	test('Test local install action is enabled for remote UI extension if it has gallery', async () => {
2121
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
2122
		const remoteUIExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
2123 2124
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUIExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
2125
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
2126 2127 2128 2129 2130 2131 2132 2133 2134 2135
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: remoteUIExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
2136
		assert.ok(testObject.enabled);
2137 2138
	});

2139 2140
	test('Test local install action is disabled for remote UI system extension', async () => {
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
2141
		const remoteUISystemExtension = aLocalExtension('a', { extensionKind: ['ui'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }), type: ExtensionType.System });
2142 2143
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUISystemExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
2144
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: remoteUISystemExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);
	});

2158 2159
	test('Test local install action is disabled for remote workspace extension if it is not installed in local', async () => {
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
2160
		const remoteWorkspaceExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
2161 2162
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteWorkspaceExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
2163
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: remoteWorkspaceExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);
	});

	test('Test local install action is disabled for remote workspace extension if it is also installed in local', async () => {
		// multi server setup
S
#85036  
Sandeep Somavarapu 已提交
2179 2180
		const localWorkspaceExtension = aLocalExtension('a', { extensionKind: ['workspae'] }, { location: URI.file(`pub.a`) });
		const remoteWorkspaceExtension = aLocalExtension('a', { extensionKind: ['workspace'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
2181 2182
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]), createExtensionManagementService([remoteWorkspaceExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
2183
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: localWorkspaceExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		testObject.extension = extensions[0];
		assert.ok(testObject.extension);
		assert.ok(!testObject.enabled);
	});

S
Sandeep Somavarapu 已提交
2197 2198 2199 2200 2201
	test('Test local install action is enabled for remotely installed language pack extension', async () => {
		// multi server setup
		const languagePackExtension = aLocalExtension('a', { contributes: <IExtensionContributions>{ localizations: [{ languageId: 'de', translations: [] }] } }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([languagePackExtension]));
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
2202
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
S
Sandeep Somavarapu 已提交
2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: languagePackExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
		assert.ok(testObject.enabled);
		assert.equal('Install Locally', testObject.label);
		assert.equal('extension-action prominent install', testObject.class);
	});

	test('Test local install action is disabled if remote language pack extension is uninstalled', async () => {
		// multi server setup
		const extensionManagementService = instantiationService.get(IExtensionManagementService);
		const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), extensionManagementService);
		instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
S
rename  
Sandeep Somavarapu 已提交
2223
		instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
S
Sandeep Somavarapu 已提交
2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242
		const languagePackExtension = aLocalExtension('a', { contributes: <IExtensionContributions>{ localizations: [{ languageId: 'de', translations: [] }] } }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
		instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [languagePackExtension]);
		const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
		instantiationService.set(IExtensionsWorkbenchService, workbenchService);

		instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(aGalleryExtension('a', { identifier: languagePackExtension.identifier })));
		const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
		instantiationService.createInstance(ExtensionContainers, [testObject]);

		const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
		await workbenchService.queryGallery(CancellationToken.None);
		testObject.extension = extensions[0];
		assert.ok(testObject.enabled);
		assert.equal('Install Locally', testObject.label);

		uninstallEvent.fire(languagePackExtension.identifier);
		assert.ok(!testObject.enabled);
	});

2243 2244 2245 2246
	test(`RecommendToFolderAction`, () => {
		// TODO: Implement test
	});

2247
	function aLocalExtension(name: string = 'someext', manifest: any = {}, properties: any = {}): ILocalExtension {
2248 2249 2250 2251
		manifest = assign({ name, publisher: 'pub', version: '1.0.0' }, manifest);
		properties = assign({
			type: ExtensionType.User,
			location: URI.file(`pub.${name}`),
2252
			identifier: { id: getGalleryExtensionId(manifest.publisher, manifest.name), uuid: undefined },
2253 2254 2255
			metadata: { id: getGalleryExtensionId(manifest.publisher, manifest.name), publisherId: manifest.publisher, publisherDisplayName: 'somename' }
		}, properties);
		return <ILocalExtension>Object.create({ manifest, ...properties });
2256 2257 2258 2259
	}

	function aGalleryExtension(name: string, properties: any = {}, galleryExtensionProperties: any = {}, assets: any = {}): IGalleryExtension {
		const galleryExtension = <IGalleryExtension>Object.create({});
S
Sandeep Somavarapu 已提交
2260
		assign(galleryExtension, { name, publisher: 'pub', version: '1.0.0', properties: {}, assets: {} }, properties);
2261 2262
		assign(galleryExtension.properties, { dependencies: [] }, galleryExtensionProperties);
		assign(galleryExtension.assets, assets);
S
Sandeep Somavarapu 已提交
2263
		galleryExtension.identifier = { id: getGalleryExtensionId(galleryExtension.publisher, galleryExtension.name), uuid: generateUuid() };
2264 2265 2266 2267
		return <IGalleryExtension>galleryExtension;
	}

	function aPage<T>(...objects: T[]): IPager<T> {
2268
		return { firstPage: objects, total: objects.length, pageSize: objects.length, getPage: () => null! };
2269 2270
	}

2271 2272 2273 2274 2275 2276 2277
	function aSingleRemoteExtensionManagementServerService(instantiationService: TestInstantiationService, remoteExtensionManagementService?: IExtensionManagementService): IExtensionManagementServerService {
		const remoteExtensionManagementServer: IExtensionManagementServer = {
			authority: 'vscode-remote',
			label: 'remote',
			extensionManagementService: remoteExtensionManagementService || createExtensionManagementService()
		};
		return {
2278
			_serviceBrand: undefined,
2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289
			localExtensionManagementServer: null,
			remoteExtensionManagementServer,
			getExtensionManagementServer: (location: URI) => {
				if (location.scheme === REMOTE_HOST_SCHEME) {
					return remoteExtensionManagementServer;
				}
				return null;
			}
		};
	}

S
Sandeep Somavarapu 已提交
2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301
	function aMultiExtensionManagementServerService(instantiationService: TestInstantiationService, localExtensionManagementService?: IExtensionManagementService, remoteExtensionManagementService?: IExtensionManagementService): IExtensionManagementServerService {
		const localExtensionManagementServer: IExtensionManagementServer = {
			authority: 'vscode-local',
			label: 'local',
			extensionManagementService: localExtensionManagementService || createExtensionManagementService()
		};
		const remoteExtensionManagementServer: IExtensionManagementServer = {
			authority: 'vscode-remote',
			label: 'remote',
			extensionManagementService: remoteExtensionManagementService || createExtensionManagementService()
		};
		return {
2302
			_serviceBrand: undefined,
S
Sandeep Somavarapu 已提交
2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316
			localExtensionManagementServer,
			remoteExtensionManagementServer,
			getExtensionManagementServer: (location: URI) => {
				if (location.scheme === Schemas.file) {
					return localExtensionManagementServer;
				}
				if (location.scheme === REMOTE_HOST_SCHEME) {
					return remoteExtensionManagementServer;
				}
				return null;
			}
		};
	}

2317
	function createExtensionManagementService(installed: ILocalExtension[] = []): IExtensionManagementService {
S
Sandeep Somavarapu 已提交
2318 2319 2320 2321 2322
		return <IExtensionManagementService>{
			onInstallExtension: Event.None,
			onDidInstallExtension: Event.None,
			onUninstallExtension: Event.None,
			onDidUninstallExtension: Event.None,
S
Sandeep Somavarapu 已提交
2323 2324
			getInstalled: () => Promise.resolve<ILocalExtension[]>(installed),
			installFromGallery: (extension: IGalleryExtension) => Promise.reject(new Error('not supported'))
S
Sandeep Somavarapu 已提交
2325 2326 2327
		};
	}

2328
});