From f6c122b4cec9d734a78eb9f93c99aa8e07f0bb43 Mon Sep 17 00:00:00 2001 From: isidor Date: Thu, 15 Jun 2023 16:49:07 +0200 Subject: [PATCH 1/3] remove dependency on experiment service for search --- .../abstractExtensionManagementService.ts | 2 +- .../common/extensionGalleryService.ts | 13 ++- .../common/extensionManagement.ts | 6 ++ .../experiments/common/experimentService.ts | 15 ---- .../experimentService.test.ts | 81 ------------------- .../extensions/browser/extensionsViews.ts | 47 ++--------- .../extensionRecommendationsService.test.ts | 2 +- .../extensionsActions.test.ts | 4 +- .../electron-sandbox/extensionsViews.test.ts | 54 +++---------- .../extensionsWorkbenchService.test.ts | 4 +- .../common/extensionManagementService.ts | 2 +- 11 files changed, 42 insertions(+), 188 deletions(-) diff --git a/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.ts b/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.ts index f681fc5b653..83a39d798bb 100644 --- a/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.ts +++ b/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.ts @@ -643,7 +643,7 @@ export abstract class AbstractExtensionManagementService extends Disposable impl return manifest; } catch (err) { this.logService.trace('ExtensionManagementService.refreshControlCache - failed to get extension control manifest'); - return { malicious: [], deprecated: {} }; + return { malicious: [], deprecated: {}, search: [] }; } } diff --git a/src/vs/platform/extensionManagement/common/extensionGalleryService.ts b/src/vs/platform/extensionManagement/common/extensionGalleryService.ts index c4378ef5387..2fcc28f621f 100644 --- a/src/vs/platform/extensionManagement/common/extensionGalleryService.ts +++ b/src/vs/platform/extensionManagement/common/extensionGalleryService.ts @@ -15,7 +15,7 @@ import { URI } from 'vs/base/common/uri'; import { IHeaders, IRequestContext, IRequestOptions } from 'vs/base/parts/request/common/request'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { getFallbackTargetPlarforms, getTargetPlatform, IExtensionGalleryService, IExtensionIdentifier, IExtensionInfo, IGalleryExtension, IGalleryExtensionAsset, IGalleryExtensionAssets, IGalleryExtensionVersion, InstallOperation, IQueryOptions, IExtensionsControlManifest, isNotWebExtensionInWebTargetPlatform, isTargetPlatformCompatible, ITranslation, SortBy, SortOrder, StatisticType, toTargetPlatform, WEB_EXTENSION_TAG, IExtensionQueryOptions, IDeprecationInfo } from 'vs/platform/extensionManagement/common/extensionManagement'; +import { getFallbackTargetPlarforms, getTargetPlatform, IExtensionGalleryService, IExtensionIdentifier, IExtensionInfo, IGalleryExtension, IGalleryExtensionAsset, IGalleryExtensionAssets, IGalleryExtensionVersion, InstallOperation, IQueryOptions, IExtensionsControlManifest, isNotWebExtensionInWebTargetPlatform, isTargetPlatformCompatible, ITranslation, SortBy, SortOrder, StatisticType, toTargetPlatform, WEB_EXTENSION_TAG, IExtensionQueryOptions, IDeprecationInfo, ISearchPrefferedResults } from 'vs/platform/extensionManagement/common/extensionManagement'; import { adoptToGalleryExtensionId, areSameExtensions, getGalleryExtensionId, getGalleryExtensionTelemetryData } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; import { IExtensionManifest, TargetPlatform } from 'vs/platform/extensions/common/extensions'; import { isEngineValid } from 'vs/platform/extensions/common/extensionValidator'; @@ -574,6 +574,7 @@ interface IRawExtensionsControlManifest { settings?: string[]; additionalInfo?: string; }>; + search?: ISearchPrefferedResults[]; } abstract class AbstractExtensionGalleryService implements IExtensionGalleryService { @@ -1206,7 +1207,7 @@ abstract class AbstractExtensionGalleryService implements IExtensionGalleryServi } if (!this.extensionsControlUrl) { - return { malicious: [], deprecated: {} }; + return { malicious: [], deprecated: {}, search: [] }; } const context = await this.requestService.request({ type: 'GET', url: this.extensionsControlUrl }, CancellationToken.None); @@ -1217,6 +1218,7 @@ abstract class AbstractExtensionGalleryService implements IExtensionGalleryServi const result = await asJson(context); const malicious: IExtensionIdentifier[] = []; const deprecated: IStringDictionary = {}; + const search: ISearchPrefferedResults[] = []; if (result) { for (const id of result.malicious) { malicious.push({ id }); @@ -1243,9 +1245,14 @@ abstract class AbstractExtensionGalleryService implements IExtensionGalleryServi } } } + if (result.search) { + for (const s of result.search) { + search.push(s); + } + } } - return { malicious, deprecated }; + return { malicious, deprecated, search }; } } diff --git a/src/vs/platform/extensionManagement/common/extensionManagement.ts b/src/vs/platform/extensionManagement/common/extensionManagement.ts index d407374f6ee..237a775ee19 100644 --- a/src/vs/platform/extensionManagement/common/extensionManagement.ts +++ b/src/vs/platform/extensionManagement/common/extensionManagement.ts @@ -311,9 +311,15 @@ export interface IDeprecationInfo { readonly additionalInfo?: string; } +export interface ISearchPrefferedResults { + readonly query?: string; + readonly preferredResults?: string[]; +} + export interface IExtensionsControlManifest { readonly malicious: IExtensionIdentifier[]; readonly deprecated: IStringDictionary; + readonly search: ISearchPrefferedResults[]; } export const enum InstallOperation { diff --git a/src/vs/workbench/contrib/experiments/common/experimentService.ts b/src/vs/workbench/contrib/experiments/common/experimentService.ts index 297b08a29af..b5e78575a5c 100644 --- a/src/vs/workbench/contrib/experiments/common/experimentService.ts +++ b/src/vs/workbench/contrib/experiments/common/experimentService.ts @@ -75,7 +75,6 @@ export interface IExperimentService { readonly _serviceBrand: undefined; getExperimentById(id: string): Promise; getExperimentsByType(type: ExperimentActionType): Promise; - getCuratedExtensionsList(curatedExtensionsKey: string): Promise; markAsCompleted(experimentId: string): void; onExperimentEnabled: Event; @@ -207,20 +206,6 @@ export class ExperimentService extends Disposable implements IExperimentService }); } - public getCuratedExtensionsList(curatedExtensionsKey: string): Promise { - return this._loadExperimentsPromise.then(() => { - for (const experiment of this._experiments) { - if (experiment.enabled - && experiment.state === ExperimentState.Run - && this._curatedMapping[experiment.id] - && this._curatedMapping[experiment.id].curatedExtensionsKey === curatedExtensionsKey) { - return this._curatedMapping[experiment.id].curatedExtensionsList; - } - } - return []; - }); - } - public markAsCompleted(experimentId: string): void { const storageKey = 'experiments.' + experimentId; const experimentState: IExperimentStorageState = safeParse(this.storageService.get(storageKey, StorageScope.APPLICATION), {}); diff --git a/src/vs/workbench/contrib/experiments/test/electron-sandbox/experimentService.test.ts b/src/vs/workbench/contrib/experiments/test/electron-sandbox/experimentService.test.ts index 6d570201069..d01e3379989 100644 --- a/src/vs/workbench/contrib/experiments/test/electron-sandbox/experimentService.test.ts +++ b/src/vs/workbench/contrib/experiments/test/electron-sandbox/experimentService.test.ts @@ -766,87 +766,6 @@ suite('Experiment Service', () => { }); }); - test('Curated list should be available if experiment is enabled.', () => { - const promptText = 'Hello there! Can you see this?'; - const curatedExtensionsKey = 'AzureDeploy'; - const curatedExtensionsList = ['uninstalled-extention-id1', 'uninstalled-extention-id2']; - experimentData = { - experiments: [ - { - id: 'experiment1', - enabled: true, - action: { - type: 'Prompt', - properties: { - promptText, - commands: [ - { - text: 'Search Marketplace', - dontShowAgain: true, - curatedExtensionsKey, - curatedExtensionsList - }, - { - text: 'No' - } - ] - } - } - } - ] - }; - - testObject = instantiationService.createInstance(TestExperimentService); - return testObject.getExperimentById('experiment1').then(result => { - assert.strictEqual(result.enabled, true); - assert.strictEqual(result.state, ExperimentState.Run); - return testObject.getCuratedExtensionsList(curatedExtensionsKey).then(curatedList => { - assert.strictEqual(curatedList, curatedExtensionsList); - }); - }); - }); - - test('Curated list shouldnt be available if experiment is disabled.', () => { - const promptText = 'Hello there! Can you see this?'; - const curatedExtensionsKey = 'AzureDeploy'; - const curatedExtensionsList = ['uninstalled-extention-id1', 'uninstalled-extention-id2']; - experimentData = { - experiments: [ - { - id: 'experiment1', - enabled: false, - action: { - type: 'Prompt', - properties: { - promptText, - commands: [ - { - text: 'Search Marketplace', - dontShowAgain: true, - curatedExtensionsKey, - curatedExtensionsList - }, - { - text: 'No' - } - ] - } - } - } - ] - }; - - testObject = instantiationService.createInstance(TestExperimentService); - return testObject.getExperimentById('experiment1').then(result => { - assert.strictEqual(result.enabled, false); - assert.strictEqual(result.action?.type, 'Prompt'); - assert.strictEqual(result.state, ExperimentState.NoRun); - return testObject.getCuratedExtensionsList(curatedExtensionsKey).then(curatedList => { - assert.strictEqual(curatedList.length, 0); - }); - }); - }); - test('Maps action2 to action.', () => { experimentData = { experiments: [ diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsViews.ts b/src/vs/workbench/contrib/extensions/browser/extensionsViews.ts index cafecd41f82..fef5b3166c6 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsViews.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsViews.ts @@ -32,7 +32,6 @@ import { INotificationService, Severity } from 'vs/platform/notification/common/ import { ViewPane, IViewPaneOptions } from 'vs/workbench/browser/parts/views/viewPane'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { coalesce, distinct, flatten } from 'vs/base/common/arrays'; -import { IExperimentService, IExperiment, ExperimentActionType } from 'vs/workbench/contrib/experiments/common/experimentService'; import { alert } from 'vs/base/browser/ui/aria/aria'; import { IListContextMenuEvent } from 'vs/base/browser/ui/list/list'; import { CancellationToken } from 'vs/base/common/cancellation'; @@ -134,7 +133,6 @@ export class ExtensionsListView extends ViewPane { @ITelemetryService telemetryService: ITelemetryService, @IConfigurationService configurationService: IConfigurationService, @IWorkspaceContextService protected contextService: IWorkspaceContextService, - @IExperimentService private readonly experimentService: IExperimentService, @IExtensionManagementServerService protected readonly extensionManagementServerService: IExtensionManagementServerService, @IExtensionManifestPropertiesService private readonly extensionManifestPropertiesService: IExtensionManifestPropertiesService, @IWorkbenchExtensionManagementService protected readonly extensionManagementService: IWorkbenchExtensionManagementService, @@ -729,10 +727,6 @@ export class ExtensionsListView extends ViewPane { return this.queryRecommendations(query, options, token); } - if (/\bcurated:([^\s]+)\b/.test(query.value)) { - return this.getCuratedModel(query, options, token); - } - const text = query.value; if (/\bext:([^\s]+)\b/g.test(text)) { @@ -746,12 +740,14 @@ export class ExtensionsListView extends ViewPane { options.text = text.substring(0, 350); options.source = 'searchText'; if (!hasUserDefinedSortOrder) { - const searchExperiments = await this.getSearchExperiments(); - for (const experiment of searchExperiments) { - if (experiment.action && text.toLowerCase() === experiment.action.properties['searchText'] && Array.isArray(experiment.action.properties['preferredResults'])) { - preferredResults = experiment.action.properties['preferredResults']; - options.source += `-experiment-${experiment.id}`; - break; + const manifest = await this.extensionManagementService.getExtensionsControlManifest(); + const search = manifest.search; + if (Array.isArray(search)) { + for (const s of search) { + if (s.query && s.query.toLowerCase() === text.toLowerCase() && Array.isArray(s.preferredResults)) { + preferredResults = s.preferredResults; + break; + } } } } @@ -778,19 +774,6 @@ export class ExtensionsListView extends ViewPane { } - resetSearchExperiments() { ExtensionsListView.searchExperiments = undefined; } - private static searchExperiments: Promise | undefined; - private getSearchExperiments(): Promise { - if (!ExtensionsListView.searchExperiments) { - ExtensionsListView.searchExperiments = this.experimentService.getExperimentsByType(ExperimentActionType.ExtensionSearchResults) - .then(null, e => { - this.logService.error(e); - return []; - }); - } - return ExtensionsListView.searchExperiments; - } - private sortExtensions(extensions: IExtension[], options: IQueryOptions): IExtension[] { switch (options.sortBy) { case GallerySortBy.InstallCount: @@ -816,20 +799,6 @@ export class ExtensionsListView extends ViewPane { return extensions; } - private async getCuratedModel(query: Query, options: IQueryOptions, token: CancellationToken): Promise> { - const value = query.value.replace(/curated:/g, '').trim(); - let ids = await this.experimentService.getCuratedExtensionsList(value); - if (Array.isArray(ids) && ids.length) { - ids = ids.map(id => id.toLowerCase()); - const extensions = await this.extensionsWorkbenchService.getExtensions(ids.map(id => ({ id })), { source: `curated:${value}` }, token); - // Sorts the firstPage of the pager in the same order as given array of extension ids - extensions.sort((a, b) => - ids.indexOf(a.identifier.id.toLowerCase()) < ids.indexOf(b.identifier.id.toLowerCase()) ? -1 : 1); - return this.getPagedModel(extensions); - } - return new PagedModel([]); - } - private isRecommendationsQuery(query: Query): boolean { return ExtensionsListView.isWorkspaceRecommendedExtensionsQuery(query.value) || ExtensionsListView.isKeymapsRecommendedExtensionsQuery(query.value) diff --git a/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionRecommendationsService.test.ts b/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionRecommendationsService.test.ts index 01e91a63ebf..ec7bc5c2dcf 100644 --- a/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionRecommendationsService.test.ts +++ b/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionRecommendationsService.test.ts @@ -222,7 +222,7 @@ suite('ExtensionRecommendationsService Test', () => { onDidChangeProfile: Event.None, async getInstalled() { return []; }, async canInstall() { return true; }, - async getExtensionsControlManifest() { return { malicious: [], deprecated: {} }; }, + async getExtensionsControlManifest() { return { malicious: [], deprecated: {}, search: [] }; }, async getTargetPlatform() { return getTargetPlatform(platform, arch); } }); instantiationService.stub(IExtensionService, >{ diff --git a/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsActions.test.ts b/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsActions.test.ts index 40518dad943..4d5bc5faee8 100644 --- a/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsActions.test.ts +++ b/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsActions.test.ts @@ -99,7 +99,7 @@ function setupTest() { onDidChangeProfile: Event.None, onDidUpdateExtensionMetadata: Event.None, async getInstalled() { return []; }, - async getExtensionsControlManifest() { return { malicious: [], deprecated: {} }; }, + async getExtensionsControlManifest() { return { malicious: [], deprecated: {}, search: [] }; }, async updateMetadata(local: ILocalExtension, metadata: Partial) { local.identifier.uuid = metadata.id; local.publisherDisplayName = metadata.publisherDisplayName!; @@ -2641,7 +2641,7 @@ function createExtensionManagementService(installed: ILocalExtension[] = []): IP return local; }, async getTargetPlatform() { return getTargetPlatform(platform, arch); }, - async getExtensionsControlManifest() { return { malicious: [], deprecated: {} }; }, + async getExtensionsControlManifest() { return { malicious: [], deprecated: {}, search: [] }; }, }; } diff --git a/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsViews.test.ts b/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsViews.test.ts index 680ad283906..6c7eee14934 100644 --- a/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsViews.test.ts +++ b/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsViews.test.ts @@ -13,7 +13,7 @@ import { IExtensionManagementService, IExtensionGalleryService, ILocalExtension, IGalleryExtension, IQueryOptions, DidUninstallExtensionEvent, InstallExtensionEvent, InstallExtensionResult, getTargetPlatform, IExtensionInfo, UninstallExtensionEvent, SortBy } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { IWorkbenchExtensionEnablementService, EnablementState, IExtensionManagementServerService, IExtensionManagementServer, IProfileAwareExtensionManagementService } from 'vs/workbench/services/extensionManagement/common/extensionManagement'; +import { IWorkbenchExtensionEnablementService, EnablementState, IExtensionManagementServerService, IExtensionManagementServer, IProfileAwareExtensionManagementService, IWorkbenchExtensionManagementService } from 'vs/workbench/services/extensionManagement/common/extensionManagement'; import { IExtensionRecommendationsService, ExtensionRecommendationReason } from 'vs/workbench/services/extensionRecommendations/common/extensionRecommendations'; import { getGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; import { TestExtensionEnablementService } from 'vs/workbench/services/extensionManagement/test/browser/extensionEnablementService.test'; @@ -33,7 +33,7 @@ import { NativeURLService } from 'vs/platform/url/common/urlService'; import { URI } from 'vs/base/common/uri'; import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; import { SinonStub } from 'sinon'; -import { IExperimentService, ExperimentState, ExperimentActionType, ExperimentService } from 'vs/workbench/contrib/experiments/common/experimentService'; +import { IExperimentService, ExperimentService } from 'vs/workbench/contrib/experiments/common/experimentService'; import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; import { RemoteAgentService } from 'vs/workbench/services/remote/electron-sandbox/remoteAgentService'; import { ExtensionType, IExtension } from 'vs/platform/extensions/common/extensions'; @@ -103,7 +103,7 @@ suite('ExtensionsViews Tests', () => { onDidUpdateExtensionMetadata: Event.None, async getInstalled() { return []; }, async canInstall() { return true; }, - async getExtensionsControlManifest() { return { malicious: [], deprecated: {} }; }, + async getExtensionsControlManifest() { return { malicious: [], deprecated: {}, search: [] }; }, async getTargetPlatform() { return getTargetPlatform(platform, arch); }, async updateMetadata(local) { return local; } }); @@ -462,29 +462,6 @@ suite('ExtensionsViews Tests', () => { }); }); - test('Test curated list experiment', () => { - const curatedList = [ - workspaceRecommendationA, - fileBasedRecommendationA - ]; - const experimentTarget = instantiationService.stubPromise(IExperimentService, 'getCuratedExtensionsList', curatedList.map(e => e.identifier.id)); - const queryTarget = instantiationService.stubPromise(IExtensionGalleryService, 'getExtensions', curatedList); - - return testableView.show('curated:mykey').then(result => { - const curatedKey: string = experimentTarget.args[0][0]; - const extensionInfos: IExtensionInfo[] = queryTarget.args[0][0]; - - assert.ok(experimentTarget.calledOnce); - assert.strictEqual(extensionInfos.length, curatedList.length); - assert.strictEqual(result.length, curatedList.length); - for (let i = 0; i < curatedList.length; i++) { - assert.strictEqual(extensionInfos[i].id, curatedList[i].identifier.id); - assert.strictEqual(result.get(i).identifier.id, curatedList[i].identifier.id); - } - assert.strictEqual(curatedKey, 'mykey'); - }); - }); - test('Test search', () => { const searchText = 'search-me'; const results = [ @@ -522,31 +499,22 @@ suite('ExtensionsViews Tests', () => { ]; const queryTarget = instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(...actual)); - const experimentTarget = instantiationService.stubPromise(IExperimentService, 'getExperimentsByType', [{ - id: 'someId', - enabled: true, - state: ExperimentState.Run, - action: { - type: ExperimentActionType.ExtensionSearchResults, - properties: { - searchText: 'search-me', - preferredResults: [ - workspaceRecommendationA.identifier.id, - 'something-that-wasnt-in-first-page', - workspaceRecommendationB.identifier.id - ] - } - } + const experimentTarget = instantiationService.stubPromise(IWorkbenchExtensionManagementService, 'getExtensionsControlManifest', [{ + query: 'search-me', + preferredResults: [ + workspaceRecommendationA.identifier.id, + 'something-that-wasnt-in-first-page', + workspaceRecommendationB.identifier.id + ] }]); - testableView.resetSearchExperiments(); testableView.dispose(); testableView = instantiationService.createInstance(ExtensionsListView, {}, { id: '', title: '' }); return testableView.show('search-me').then(result => { const options: IQueryOptions = queryTarget.args[0][0]; - assert.ok(experimentTarget.calledOnce); + assert.ok(experimentTarget.calledTwice); assert.ok(queryTarget.calledOnce); assert.strictEqual(options.text, searchText); assert.strictEqual(result.length, expected.length); diff --git a/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsWorkbenchService.test.ts b/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsWorkbenchService.test.ts index 0c7d2dc6d38..70f9cc3efe9 100644 --- a/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsWorkbenchService.test.ts +++ b/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsWorkbenchService.test.ts @@ -96,7 +96,7 @@ suite('ExtensionsWorkbenchServiceTest', () => { onDidChangeProfile: Event.None, onDidUpdateExtensionMetadata: Event.None, async getInstalled() { return []; }, - async getExtensionsControlManifest() { return { malicious: [], deprecated: {} }; }, + async getExtensionsControlManifest() { return { malicious: [], deprecated: {}, search: [] }; }, async updateMetadata(local: ILocalExtension, metadata: Partial) { local.identifier.uuid = metadata.id; local.publisherDisplayName = metadata.publisherDisplayName!; @@ -1498,7 +1498,7 @@ suite('ExtensionsWorkbenchServiceTest', () => { return local; }, getTargetPlatform: async () => getTargetPlatform(platform, arch), - async getExtensionsControlManifest() { return { malicious: [], deprecated: {} }; }, + async getExtensionsControlManifest() { return { malicious: [], deprecated: {}, search: [] }; }, }; } }); diff --git a/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts b/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts index b29c51da2d5..9423e3e8bf5 100644 --- a/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts +++ b/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts @@ -415,7 +415,7 @@ export class ExtensionManagementService extends Disposable implements IWorkbench if (this.extensionManagementServerService.webExtensionManagementServer) { return this.extensionManagementServerService.webExtensionManagementServer.extensionManagementService.getExtensionsControlManifest(); } - return Promise.resolve({ malicious: [], deprecated: {} }); + return Promise.resolve({ malicious: [], deprecated: {}, search: [] }); } private getServer(extension: ILocalExtension): IExtensionManagementServer | null { From 0fac30c95ce5536df7838d970b2877e201ad439f Mon Sep 17 00:00:00 2001 From: isidor Date: Fri, 16 Jun 2023 14:40:10 +0200 Subject: [PATCH 2/3] fix test issue --- .../electron-sandbox/extensionsViews.test.ts | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsViews.test.ts b/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsViews.test.ts index 6c7eee14934..b551267d523 100644 --- a/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsViews.test.ts +++ b/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsViews.test.ts @@ -499,14 +499,16 @@ suite('ExtensionsViews Tests', () => { ]; const queryTarget = instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(...actual)); - const experimentTarget = instantiationService.stubPromise(IWorkbenchExtensionManagementService, 'getExtensionsControlManifest', [{ - query: 'search-me', - preferredResults: [ - workspaceRecommendationA.identifier.id, - 'something-that-wasnt-in-first-page', - workspaceRecommendationB.identifier.id - ] - }]); + const experimentTarget = instantiationService.stubPromise(IWorkbenchExtensionManagementService, 'getExtensionsControlManifest', { + search: [{ + query: 'search-me', + preferredResults: [ + workspaceRecommendationA.identifier.id, + 'something-that-wasnt-in-first-page', + workspaceRecommendationB.identifier.id + ] + }] + }); testableView.dispose(); testableView = instantiationService.createInstance(ExtensionsListView, {}, { id: '', title: '' }); From af108a22246ddff673de933ab3069848e2b00d0e Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Mon, 19 Jun 2023 11:20:41 +0200 Subject: [PATCH 3/3] fix tests --- .../extensions/test/electron-sandbox/extensionsViews.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsViews.test.ts b/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsViews.test.ts index b551267d523..d691f90f15b 100644 --- a/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsViews.test.ts +++ b/src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsViews.test.ts @@ -500,6 +500,7 @@ suite('ExtensionsViews Tests', () => { const queryTarget = instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(...actual)); const experimentTarget = instantiationService.stubPromise(IWorkbenchExtensionManagementService, 'getExtensionsControlManifest', { + malicious: [], deprecated: {}, search: [{ query: 'search-me', preferredResults: [