|
|
|
|
@@ -21,7 +21,7 @@ import { TestExtensionEnablementService } from 'vs/workbench/services/extensionM
|
|
|
|
|
import { ExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionGalleryService';
|
|
|
|
|
import { IURLService } from 'vs/platform/url/common/url';
|
|
|
|
|
import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
|
|
|
|
|
import { Emitter } from 'vs/base/common/event';
|
|
|
|
|
import { Emitter, Event } from 'vs/base/common/event';
|
|
|
|
|
import { IPager } from 'vs/base/common/paging';
|
|
|
|
|
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
|
|
|
|
import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
|
|
|
|
|
@@ -42,6 +42,9 @@ import { CancellationToken } from 'vs/base/common/cancellation';
|
|
|
|
|
import { ILabelService } from 'vs/platform/label/common/label';
|
|
|
|
|
import { ExtensionManagementServerService } from 'vs/workbench/services/extensionManagement/electron-browser/extensionManagementServerService';
|
|
|
|
|
import { IProductService } from 'vs/platform/product/common/product';
|
|
|
|
|
import { Schemas } from 'vs/base/common/network';
|
|
|
|
|
import { REMOTE_HOST_SCHEME } from 'vs/platform/remote/common/remoteHosts';
|
|
|
|
|
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
|
|
|
|
|
|
|
|
|
|
suite('ExtensionsActions Test', () => {
|
|
|
|
|
|
|
|
|
|
@@ -53,7 +56,7 @@ suite('ExtensionsActions Test', () => {
|
|
|
|
|
didUninstallEvent: Emitter<DidUninstallExtensionEvent>;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
suiteSetup(() => {
|
|
|
|
|
setup(async () => {
|
|
|
|
|
installEvent = new Emitter<InstallExtensionEvent>();
|
|
|
|
|
didInstallEvent = new Emitter<DidInstallExtensionEvent>();
|
|
|
|
|
uninstallEvent = new Emitter<IExtensionIdentifier>();
|
|
|
|
|
@@ -91,9 +94,7 @@ suite('ExtensionsActions Test', () => {
|
|
|
|
|
|
|
|
|
|
instantiationService.set(IExtensionTipsService, instantiationService.createInstance(ExtensionTipsService));
|
|
|
|
|
instantiationService.stub(IURLService, URLService);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
setup(async () => {
|
|
|
|
|
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', []);
|
|
|
|
|
instantiationService.stubPromise(IExtensionManagementService, 'getExtensionsReport', []);
|
|
|
|
|
instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage());
|
|
|
|
|
@@ -1357,6 +1358,682 @@ suite('ExtensionsActions Test', () => {
|
|
|
|
|
assert.ok(!testObject.enabled);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('Test remote install action is enabled for local workspace extension', async () => {
|
|
|
|
|
// multi server setup
|
|
|
|
|
const localWorkspaceExtension = aLocalExtension('a', { extensionKind: 'workspace' }, { location: URI.file(`pub.a`) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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);
|
|
|
|
|
assert.equal('Install on remote', testObject.label);
|
|
|
|
|
assert.equal('extension-action prominent install', testObject.class);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('Test remote install action when installing local workspace extension', async (done) => {
|
|
|
|
|
// multi server setup
|
|
|
|
|
const remoteExtensionManagementService: IExtensionManagementService = createExtensionManagementService();
|
|
|
|
|
const localWorkspaceExtension = aLocalExtension('a', { extensionKind: 'workspace' }, { location: URI.file(`pub.a`) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]), remoteExtensionManagementService);
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
|
|
|
|
|
instantiationService.stub(IExtensionsWorkbenchService, workbenchService, 'open', undefined);
|
|
|
|
|
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);
|
|
|
|
|
assert.equal('Install on remote', testObject.label);
|
|
|
|
|
assert.equal('extension-action prominent install', testObject.class);
|
|
|
|
|
|
|
|
|
|
remoteExtensionManagementService.installFromGallery = () => new Promise<ILocalExtension>(c => c(aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`) })));
|
|
|
|
|
const disposable = testObject.onDidChange(() => {
|
|
|
|
|
if (testObject.label === 'Installing' && testObject.enabled) {
|
|
|
|
|
disposable.dispose();
|
|
|
|
|
done();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
testObject.run();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('Test remote install action when installing local workspace extension is finished', async (done) => {
|
|
|
|
|
// multi server setup
|
|
|
|
|
const remoteExtensionManagementService: IExtensionManagementService = createExtensionManagementService();
|
|
|
|
|
const onDidInstallEvent = new Emitter<DidInstallExtensionEvent>();
|
|
|
|
|
remoteExtensionManagementService.onDidInstallExtension = onDidInstallEvent.event;
|
|
|
|
|
const localWorkspaceExtension = aLocalExtension('a', { extensionKind: 'workspace' }, { location: URI.file(`pub.a`) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]), remoteExtensionManagementService);
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
|
|
|
|
|
instantiationService.stub(IExtensionsWorkbenchService, workbenchService, 'open', undefined);
|
|
|
|
|
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);
|
|
|
|
|
assert.equal('Install on remote', testObject.label);
|
|
|
|
|
assert.equal('extension-action prominent install', testObject.class);
|
|
|
|
|
|
|
|
|
|
const installedExtension = aLocalExtension('a', { extensionKind: 'workspace' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
|
|
|
|
remoteExtensionManagementService.installFromGallery = () => new Promise<ILocalExtension>(c => c(installedExtension));
|
|
|
|
|
await testObject.run();
|
|
|
|
|
assert.ok(testObject.enabled);
|
|
|
|
|
assert.equal('Install on remote', testObject.label);
|
|
|
|
|
|
|
|
|
|
const disposable = testObject.onDidChange(() => {
|
|
|
|
|
if (testObject.label === 'Install on remote' && !testObject.enabled) {
|
|
|
|
|
disposable.dispose();
|
|
|
|
|
done();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
onDidInstallEvent.fire({ identifier: installedExtension.identifier, local: installedExtension, operation: InstallOperation.Install });
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('Test remote install action is enabled for disabled local workspace extension', async () => {
|
|
|
|
|
// multi server setup
|
|
|
|
|
const localWorkspaceExtension = aLocalExtension('a', { extensionKind: 'workspace' }, { location: URI.file(`pub.a`) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
|
|
|
|
|
instantiationService.set(IExtensionsWorkbenchService, workbenchService);
|
|
|
|
|
|
|
|
|
|
await instantiationService.get(IExtensionEnablementService).setEnablement([localWorkspaceExtension], EnablementState.DisabledGlobally);
|
|
|
|
|
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);
|
|
|
|
|
assert.equal('Install on remote', testObject.label);
|
|
|
|
|
assert.equal('extension-action prominent install', testObject.class);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('Test remote install action is disabled when extension is not set', async () => {
|
|
|
|
|
// multi server setup
|
|
|
|
|
const localWorkspaceExtension = aLocalExtension('a', { extensionKind: 'workspace' }, { location: URI.file(`pub.a`) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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
|
|
|
|
|
const localWorkspaceExtension = aLocalExtension('a', { extensionKind: 'workspace' }, { location: URI.file(`pub.a`) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]));
|
|
|
|
|
instantiationService.stub(IWorkbenchEnvironmentService, { disableExtensions: true } as IWorkbenchEnvironmentService);
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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);
|
|
|
|
|
const localWorkspaceExtension = aLocalExtension('a', { extensionKind: 'workspace' }, { location: URI.file(`pub.a`) });
|
|
|
|
|
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);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
const localWorkspaceExtension = aLocalExtension('a', { extensionKind: 'workspace' }, { location: URI.file(`pub.a`) });
|
|
|
|
|
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);
|
|
|
|
|
assert.equal('Install on remote', testObject.label);
|
|
|
|
|
|
|
|
|
|
uninstallEvent.fire(localWorkspaceExtension.identifier);
|
|
|
|
|
assert.ok(!testObject.enabled);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('Test remote install action is disabled for local workspace extension if it is installed in remote', async () => {
|
|
|
|
|
// multi server setup
|
|
|
|
|
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 }) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]), createExtensionManagementService([remoteWorkspaceExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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 for local workspace extension if it cannot be installed', async () => {
|
|
|
|
|
// multi server setup
|
|
|
|
|
const localWorkspaceExtension = aLocalExtension('a', { extensionKind: 'workspace' }, { location: URI.file(`pub.a`) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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);
|
|
|
|
|
assert.ok(!testObject.enabled);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('Test remote install action is disabled for local ui extension if it is not installed in remote', async () => {
|
|
|
|
|
// multi server setup
|
|
|
|
|
const localUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localUIExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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
|
|
|
|
|
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 }) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localUIExtension]), createExtensionManagementService([remoteUIExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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 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);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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);
|
|
|
|
|
assert.equal('Install on remote', testObject.label);
|
|
|
|
|
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);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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);
|
|
|
|
|
assert.equal('Install on remote', testObject.label);
|
|
|
|
|
|
|
|
|
|
uninstallEvent.fire(languagePackExtension.identifier);
|
|
|
|
|
assert.ok(!testObject.enabled);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('Test local install action is enabled for remote ui extension', async () => {
|
|
|
|
|
// multi server setup
|
|
|
|
|
const remoteUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUIExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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.enabled);
|
|
|
|
|
assert.equal('Install Locally', testObject.label);
|
|
|
|
|
assert.equal('extension-action prominent install', testObject.class);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('Test local install action when installing remote ui extension', async (done) => {
|
|
|
|
|
// multi server setup
|
|
|
|
|
const localExtensionManagementService: IExtensionManagementService = createExtensionManagementService();
|
|
|
|
|
const remoteUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, localExtensionManagementService, createExtensionManagementService([remoteUIExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
|
|
|
|
|
instantiationService.stub(IExtensionsWorkbenchService, workbenchService, 'open', undefined);
|
|
|
|
|
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.enabled);
|
|
|
|
|
assert.equal('Install Locally', testObject.label);
|
|
|
|
|
assert.equal('extension-action prominent install', testObject.class);
|
|
|
|
|
|
|
|
|
|
localExtensionManagementService.installFromGallery = () => new Promise<ILocalExtension>(c => c(aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`) })));
|
|
|
|
|
const disposable = testObject.onDidChange(() => {
|
|
|
|
|
if (testObject.label === 'Installing' && testObject.enabled) {
|
|
|
|
|
disposable.dispose();
|
|
|
|
|
done();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
testObject.run();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('Test local install action when installing remote ui extension is finished', async (done) => {
|
|
|
|
|
// multi server setup
|
|
|
|
|
const localExtensionManagementService: IExtensionManagementService = createExtensionManagementService();
|
|
|
|
|
const onDidInstallEvent = new Emitter<DidInstallExtensionEvent>();
|
|
|
|
|
localExtensionManagementService.onDidInstallExtension = onDidInstallEvent.event;
|
|
|
|
|
const remoteUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, localExtensionManagementService, createExtensionManagementService([remoteUIExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
|
|
|
|
|
instantiationService.stub(IExtensionsWorkbenchService, workbenchService, 'open', undefined);
|
|
|
|
|
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.enabled);
|
|
|
|
|
assert.equal('Install Locally', testObject.label);
|
|
|
|
|
assert.equal('extension-action prominent install', testObject.class);
|
|
|
|
|
|
|
|
|
|
const installedExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`) });
|
|
|
|
|
localExtensionManagementService.installFromGallery = () => new Promise<ILocalExtension>(c => c(installedExtension));
|
|
|
|
|
await testObject.run();
|
|
|
|
|
assert.ok(testObject.enabled);
|
|
|
|
|
assert.equal('Install Locally', testObject.label);
|
|
|
|
|
|
|
|
|
|
const disposable = testObject.onDidChange(() => {
|
|
|
|
|
if (testObject.label === 'Install Locally' && !testObject.enabled) {
|
|
|
|
|
disposable.dispose();
|
|
|
|
|
done();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
onDidInstallEvent.fire({ identifier: installedExtension.identifier, local: installedExtension, operation: InstallOperation.Install });
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('Test local install action is enabled for disabled remote ui extension', async () => {
|
|
|
|
|
// multi server setup
|
|
|
|
|
const remoteUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUIExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
|
|
|
|
|
instantiationService.set(IExtensionsWorkbenchService, workbenchService);
|
|
|
|
|
|
|
|
|
|
await instantiationService.get(IExtensionEnablementService).setEnablement([remoteUIExtension], EnablementState.DisabledGlobally);
|
|
|
|
|
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.enabled);
|
|
|
|
|
assert.equal('Install Locally', testObject.label);
|
|
|
|
|
assert.equal('extension-action prominent install', testObject.class);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('Test local install action is disabled when extension is not set', async () => {
|
|
|
|
|
// multi server setup
|
|
|
|
|
const remoteUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUIExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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
|
|
|
|
|
const remoteUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
|
|
|
|
instantiationService.stub(IWorkbenchEnvironmentService, { disableExtensions: true } as IWorkbenchEnvironmentService);
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUIExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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
|
|
|
|
|
const remoteUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
|
|
|
|
const extensionManagementServerService = aSingleRemoteExtensionManagementServerService(instantiationService, createExtensionManagementService([remoteUIExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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
|
|
|
|
|
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 }) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localUIExtension]), createExtensionManagementService([remoteUIExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('Test local install action is disabled for remoteUI extension if it is uninstalled locally', async () => {
|
|
|
|
|
// multi server setup
|
|
|
|
|
const extensionManagementService = instantiationService.get(IExtensionManagementService);
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), extensionManagementService);
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
const remoteUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
|
|
|
|
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];
|
|
|
|
|
assert.ok(testObject.enabled);
|
|
|
|
|
assert.equal('Install Locally', testObject.label);
|
|
|
|
|
|
|
|
|
|
uninstallEvent.fire(remoteUIExtension.identifier);
|
|
|
|
|
assert.ok(!testObject.enabled);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('Test local install action is disabled for remote UI extension if it cannot be installed', async () => {
|
|
|
|
|
// multi server setup
|
|
|
|
|
const remoteUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUIExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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);
|
|
|
|
|
assert.ok(!testObject.enabled);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('Test local install action is disabled for remote workspace extension if it is not installed in local', async () => {
|
|
|
|
|
// multi server setup
|
|
|
|
|
const remoteWorkspaceExtension = aLocalExtension('a', { extensionKind: 'workspace' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteWorkspaceExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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
|
|
|
|
|
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 }) });
|
|
|
|
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService([localWorkspaceExtension]), createExtensionManagementService([remoteWorkspaceExtension]));
|
|
|
|
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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);
|
|
|
|
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
|
|
|
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);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test(`RecommendToFolderAction`, () => {
|
|
|
|
|
// TODO: Implement test
|
|
|
|
|
@@ -1386,4 +2063,61 @@ suite('ExtensionsActions Test', () => {
|
|
|
|
|
return { firstPage: objects, total: objects.length, pageSize: objects.length, getPage: () => null! };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function aSingleRemoteExtensionManagementServerService(instantiationService: TestInstantiationService, remoteExtensionManagementService?: IExtensionManagementService): IExtensionManagementServerService {
|
|
|
|
|
const remoteExtensionManagementServer: IExtensionManagementServer = {
|
|
|
|
|
authority: 'vscode-remote',
|
|
|
|
|
label: 'remote',
|
|
|
|
|
extensionManagementService: remoteExtensionManagementService || createExtensionManagementService()
|
|
|
|
|
};
|
|
|
|
|
return {
|
|
|
|
|
_serviceBrand: {},
|
|
|
|
|
localExtensionManagementServer: null,
|
|
|
|
|
remoteExtensionManagementServer,
|
|
|
|
|
getExtensionManagementServer: (location: URI) => {
|
|
|
|
|
if (location.scheme === REMOTE_HOST_SCHEME) {
|
|
|
|
|
return remoteExtensionManagementServer;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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 {
|
|
|
|
|
_serviceBrand: {},
|
|
|
|
|
localExtensionManagementServer,
|
|
|
|
|
remoteExtensionManagementServer,
|
|
|
|
|
getExtensionManagementServer: (location: URI) => {
|
|
|
|
|
if (location.scheme === Schemas.file) {
|
|
|
|
|
return localExtensionManagementServer;
|
|
|
|
|
}
|
|
|
|
|
if (location.scheme === REMOTE_HOST_SCHEME) {
|
|
|
|
|
return remoteExtensionManagementServer;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function createExtensionManagementService(installed: ILocalExtension[] = []): IExtensionManagementService {
|
|
|
|
|
return <IExtensionManagementService>{
|
|
|
|
|
onInstallExtension: Event.None,
|
|
|
|
|
onDidInstallExtension: Event.None,
|
|
|
|
|
onUninstallExtension: Event.None,
|
|
|
|
|
onDidUninstallExtension: Event.None,
|
|
|
|
|
getInstalled: () => Promise.resolve<ILocalExtension[]>(installed),
|
|
|
|
|
installFromGallery: (extension: IGalleryExtension) => Promise.reject(new Error('not supported'))
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|