mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-04-01 01:20:31 -04:00
Merge from vscode 10492ba146318412cbee8b76a8c630f226914734
This commit is contained in:
@@ -12,10 +12,9 @@ import * as uuid from 'vs/base/common/uuid';
|
||||
import { mkdirp, rimraf, RimRafMode } from 'vs/base/node/pfs';
|
||||
import {
|
||||
IExtensionGalleryService, IGalleryExtensionAssets, IGalleryExtension, IExtensionManagementService,
|
||||
DidInstallExtensionEvent, DidUninstallExtensionEvent, InstallExtensionEvent, IExtensionIdentifier
|
||||
DidInstallExtensionEvent, DidUninstallExtensionEvent, InstallExtensionEvent, IExtensionIdentifier, IExtensionTipsService
|
||||
} from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { IWorkbenchExtensionEnablementService } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
|
||||
import { ExtensionTipsService } from 'vs/workbench/contrib/extensions/browser/extensionTipsService';
|
||||
import { ExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionGalleryService';
|
||||
import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
|
||||
import { Emitter } from 'vs/base/common/event';
|
||||
@@ -54,6 +53,10 @@ import { Schemas } from 'vs/base/common/network';
|
||||
import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider';
|
||||
import { IFileService } from 'vs/platform/files/common/files';
|
||||
import { IProductService } from 'vs/platform/product/common/productService';
|
||||
import { ExtensionTipsService } from 'vs/platform/extensionManagement/node/extensionTipsService';
|
||||
import { ExtensionRecommendationsService } from 'vs/workbench/contrib/extensions/browser/extensionRecommendationsService';
|
||||
import { NoOpWorkspaceTagsService } from 'vs/workbench/contrib/tags/browser/workspaceTagsService';
|
||||
import { IWorkspaceTagsService } from 'vs/workbench/contrib/tags/common/workspaceTags';
|
||||
|
||||
const mockExtensionGallery: IGalleryExtension[] = [
|
||||
aGalleryExtension('MockExtension1', {
|
||||
@@ -169,11 +172,11 @@ function aGalleryExtension(name: string, properties: any = {}, galleryExtensionP
|
||||
return <IGalleryExtension>galleryExtension;
|
||||
}
|
||||
|
||||
suite.skip('ExtensionsTipsService Test', () => { // {{SQL CARBON EDIT}} skip suite
|
||||
suite.skip('ExtensionRecommendationsService Test', () => { // {{SQL CARBON EDIT}} skip suite
|
||||
let workspaceService: IWorkspaceContextService;
|
||||
let instantiationService: TestInstantiationService;
|
||||
let testConfigurationService: TestConfigurationService;
|
||||
let testObject: ExtensionTipsService;
|
||||
let testObject: ExtensionRecommendationsService;
|
||||
let parentResource: string;
|
||||
let installEvent: Emitter<InstallExtensionEvent>,
|
||||
didInstallEvent: Emitter<DidInstallExtensionEvent>,
|
||||
@@ -203,11 +206,12 @@ suite.skip('ExtensionsTipsService Test', () => { // {{SQL CARBON EDIT}} skip sui
|
||||
instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
||||
instantiationService.stub(ITelemetryService, NullTelemetryService);
|
||||
instantiationService.stub(IURLService, URLService);
|
||||
instantiationService.stub(IWorkspaceTagsService, new NoOpWorkspaceTagsService());
|
||||
instantiationService.set(IProductService, {
|
||||
...productService,
|
||||
...{
|
||||
extensionTips: {
|
||||
'ms-vscode.csharp': '{**/*.cs,**/project.json,**/global.json,**/*.csproj,**/*.sln,**/appsettings.json}',
|
||||
'ms-dotnettools.csharp': '{**/*.cs,**/project.json,**/global.json,**/*.csproj,**/*.sln,**/appsettings.json}',
|
||||
'msjsdiag.debugger-for-chrome': '{**/*.ts,**/*.tsx,**/*.js,**/*.jsx,**/*.es6,**/*.mjs,**/*.cjs,**/.babelrc}',
|
||||
'lukehoban.Go': '**/*.go'
|
||||
},
|
||||
@@ -226,6 +230,7 @@ suite.skip('ExtensionsTipsService Test', () => { // {{SQL CARBON EDIT}} skip sui
|
||||
|
||||
experimentService = instantiationService.createInstance(TestExperimentService);
|
||||
instantiationService.stub(IExperimentService, experimentService);
|
||||
instantiationService.stub(IExtensionTipsService, instantiationService.createInstance(ExtensionTipsService));
|
||||
|
||||
onModelAddedEvent = new Emitter<ITextModel>();
|
||||
});
|
||||
@@ -262,7 +267,7 @@ suite.skip('ExtensionsTipsService Test', () => { // {{SQL CARBON EDIT}} skip sui
|
||||
});
|
||||
|
||||
teardown(done => {
|
||||
(<ExtensionTipsService>testObject).dispose();
|
||||
(<ExtensionRecommendationsService>testObject).dispose();
|
||||
if (parentResource) {
|
||||
rimraf(parentResource, RimRafMode.MOVE).then(done, done);
|
||||
} else {
|
||||
@@ -296,7 +301,7 @@ suite.skip('ExtensionsTipsService Test', () => { // {{SQL CARBON EDIT}} skip sui
|
||||
|
||||
function testNoPromptForValidRecommendations(recommendations: string[]) {
|
||||
return setUpFolderWorkspace('myFolder', recommendations).then(() => {
|
||||
testObject = instantiationService.createInstance(ExtensionTipsService);
|
||||
testObject = instantiationService.createInstance(ExtensionRecommendationsService);
|
||||
return testObject.loadWorkspaceConfigPromise.then(() => {
|
||||
assert.equal(Object.keys(testObject.getAllRecommendationsWithReason()).length, recommendations.length);
|
||||
assert.ok(!prompted);
|
||||
@@ -306,7 +311,7 @@ suite.skip('ExtensionsTipsService Test', () => { // {{SQL CARBON EDIT}} skip sui
|
||||
|
||||
function testNoPromptOrRecommendationsForValidRecommendations(recommendations: string[]) {
|
||||
return setUpFolderWorkspace('myFolder', mockTestData.validRecommendedExtensions).then(() => {
|
||||
testObject = instantiationService.createInstance(ExtensionTipsService);
|
||||
testObject = instantiationService.createInstance(ExtensionRecommendationsService);
|
||||
assert.ok(!prompted);
|
||||
|
||||
return testObject.getWorkspaceRecommendations().then(() => {
|
||||
@@ -316,7 +321,7 @@ suite.skip('ExtensionsTipsService Test', () => { // {{SQL CARBON EDIT}} skip sui
|
||||
});
|
||||
}
|
||||
|
||||
test('ExtensionTipsService: No Prompt for valid workspace recommendations when galleryService is absent', () => {
|
||||
test('ExtensionRecommendationsService: No Prompt for valid workspace recommendations when galleryService is absent', () => {
|
||||
const galleryQuerySpy = sinon.spy();
|
||||
instantiationService.stub(IExtensionGalleryService, { query: galleryQuerySpy, isEnabled: () => false });
|
||||
|
||||
@@ -324,18 +329,18 @@ suite.skip('ExtensionsTipsService Test', () => { // {{SQL CARBON EDIT}} skip sui
|
||||
.then(() => assert.ok(galleryQuerySpy.notCalled));
|
||||
});
|
||||
|
||||
test('ExtensionTipsService: No Prompt for valid workspace recommendations during extension development', () => {
|
||||
test('ExtensionRecommendationsService: No Prompt for valid workspace recommendations during extension development', () => {
|
||||
instantiationService.stub(IEnvironmentService, { extensionDevelopmentLocationURI: [URI.file('/folder/file')] });
|
||||
return testNoPromptOrRecommendationsForValidRecommendations(mockTestData.validRecommendedExtensions);
|
||||
});
|
||||
|
||||
test('ExtensionTipsService: No workspace recommendations or prompts when extensions.json has empty array', () => {
|
||||
test('ExtensionRecommendationsService: No workspace recommendations or prompts when extensions.json has empty array', () => {
|
||||
return testNoPromptForValidRecommendations([]);
|
||||
});
|
||||
|
||||
test('ExtensionTipsService: Prompt for valid workspace recommendations', () => {
|
||||
test('ExtensionRecommendationsService: Prompt for valid workspace recommendations', () => {
|
||||
return setUpFolderWorkspace('myFolder', mockTestData.recommendedExtensions).then(() => {
|
||||
testObject = instantiationService.createInstance(ExtensionTipsService);
|
||||
testObject = instantiationService.createInstance(ExtensionRecommendationsService);
|
||||
return testObject.loadWorkspaceConfigPromise.then(() => {
|
||||
const recommendations = Object.keys(testObject.getAllRecommendationsWithReason());
|
||||
|
||||
@@ -349,41 +354,40 @@ suite.skip('ExtensionsTipsService Test', () => { // {{SQL CARBON EDIT}} skip sui
|
||||
});
|
||||
});
|
||||
|
||||
test('ExtensionTipsService: No Prompt for valid workspace recommendations if they are already installed', () => {
|
||||
test('ExtensionRecommendationsService: No Prompt for valid workspace recommendations if they are already installed', () => {
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', mockExtensionLocal);
|
||||
return testNoPromptForValidRecommendations(mockTestData.validRecommendedExtensions);
|
||||
});
|
||||
|
||||
test('ExtensionTipsService: No Prompt for valid workspace recommendations with casing mismatch if they are already installed', () => {
|
||||
test('ExtensionRecommendationsService: No Prompt for valid workspace recommendations with casing mismatch if they are already installed', () => {
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', mockExtensionLocal);
|
||||
return testNoPromptForValidRecommendations(mockTestData.validRecommendedExtensions.map(x => x.toUpperCase()));
|
||||
});
|
||||
|
||||
test('ExtensionTipsService: No Prompt for valid workspace recommendations if ignoreRecommendations is set', () => {
|
||||
test('ExtensionRecommendationsService: No Prompt for valid workspace recommendations if ignoreRecommendations is set', () => {
|
||||
testConfigurationService.setUserConfiguration(ConfigurationKey, { ignoreRecommendations: true });
|
||||
return testNoPromptForValidRecommendations(mockTestData.validRecommendedExtensions);
|
||||
});
|
||||
|
||||
test('ExtensionTipsService: No Prompt for valid workspace recommendations if showRecommendationsOnlyOnDemand is set', () => {
|
||||
test('ExtensionRecommendationsService: No Prompt for valid workspace recommendations if showRecommendationsOnlyOnDemand is set', () => {
|
||||
testConfigurationService.setUserConfiguration(ConfigurationKey, { showRecommendationsOnlyOnDemand: true });
|
||||
return setUpFolderWorkspace('myFolder', mockTestData.validRecommendedExtensions).then(() => {
|
||||
testObject = instantiationService.createInstance(ExtensionTipsService);
|
||||
testObject = instantiationService.createInstance(ExtensionRecommendationsService);
|
||||
return testObject.loadWorkspaceConfigPromise.then(() => {
|
||||
assert.equal(Object.keys(testObject.getAllRecommendationsWithReason()).length, 0);
|
||||
assert.ok(!prompted);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('ExtensionTipsService: No Prompt for valid workspace recommendations if ignoreRecommendations is set for current workspace', () => {
|
||||
test('ExtensionRecommendationsService: No Prompt for valid workspace recommendations if ignoreRecommendations is set for current workspace', () => {
|
||||
instantiationService.stub(IStorageService, <Partial<IStorageService>>{ get: (a: string, b: StorageScope, c?: string) => c, getBoolean: (a: string, b: StorageScope, c?: boolean) => a === 'extensionsAssistant/workspaceRecommendationsIgnore' || c });
|
||||
return testNoPromptForValidRecommendations(mockTestData.validRecommendedExtensions);
|
||||
});
|
||||
|
||||
test('ExtensionTipsService: No Recommendations of globally ignored recommendations', () => {
|
||||
test('ExtensionRecommendationsService: No Recommendations of globally ignored recommendations', () => {
|
||||
const storageGetterStub = (a: string, _: StorageScope, c?: string) => {
|
||||
const storedRecommendations = '["ms-vscode.csharp", "ms-python.python", "ms-vscode.vscode-typescript-tslint-plugin"]';
|
||||
const ignoredRecommendations = '["ms-vscode.csharp", "mockpublisher2.mockextension2"]'; // ignore a stored recommendation and a workspace recommendation.
|
||||
const storedRecommendations = '["ms-dotnettools.csharp", "ms-python.python", "ms-vscode.vscode-typescript-tslint-plugin"]';
|
||||
const ignoredRecommendations = '["ms-dotnettools.csharp", "mockpublisher2.mockextension2"]'; // ignore a stored recommendation and a workspace recommendation.
|
||||
if (a === 'extensionsAssistant/recommendations') { return storedRecommendations; }
|
||||
if (a === 'extensionsAssistant/ignored_recommendations') { return ignoredRecommendations; }
|
||||
return c;
|
||||
@@ -395,10 +399,10 @@ suite.skip('ExtensionsTipsService Test', () => { // {{SQL CARBON EDIT}} skip sui
|
||||
});
|
||||
|
||||
return setUpFolderWorkspace('myFolder', mockTestData.validRecommendedExtensions).then(() => {
|
||||
testObject = instantiationService.createInstance(ExtensionTipsService);
|
||||
testObject = instantiationService.createInstance(ExtensionRecommendationsService);
|
||||
return testObject.loadWorkspaceConfigPromise.then(() => {
|
||||
const recommendations = testObject.getAllRecommendationsWithReason();
|
||||
assert.ok(!recommendations['ms-vscode.csharp']); // stored recommendation that has been globally ignored
|
||||
assert.ok(!recommendations['ms-dotnettools.csharp']); // stored recommendation that has been globally ignored
|
||||
assert.ok(recommendations['ms-python.python']); // stored recommendation
|
||||
assert.ok(recommendations['mockpublisher1.mockextension1']); // workspace recommendation
|
||||
assert.ok(!recommendations['mockpublisher2.mockextension2']); // workspace recommendation that has been globally ignored
|
||||
@@ -406,19 +410,19 @@ suite.skip('ExtensionsTipsService Test', () => { // {{SQL CARBON EDIT}} skip sui
|
||||
});
|
||||
});
|
||||
|
||||
test('ExtensionTipsService: No Recommendations of workspace ignored recommendations', () => {
|
||||
const ignoredRecommendations = ['ms-vscode.csharp', 'mockpublisher2.mockextension2']; // ignore a stored recommendation and a workspace recommendation.
|
||||
const storedRecommendations = '["ms-vscode.csharp", "ms-python.python"]';
|
||||
test('ExtensionRecommendationsService: No Recommendations of workspace ignored recommendations', () => {
|
||||
const ignoredRecommendations = ['ms-dotnettools.csharp', 'mockpublisher2.mockextension2']; // ignore a stored recommendation and a workspace recommendation.
|
||||
const storedRecommendations = '["ms-dotnettools.csharp", "ms-python.python"]';
|
||||
instantiationService.stub(IStorageService, <Partial<IStorageService>>{
|
||||
get: (a: string, b: StorageScope, c?: string) => a === 'extensionsAssistant/recommendations' ? storedRecommendations : c,
|
||||
getBoolean: (a: string, _: StorageScope, c?: boolean) => a === 'extensionsAssistant/workspaceRecommendationsIgnore' || c
|
||||
});
|
||||
|
||||
return setUpFolderWorkspace('myFolder', mockTestData.validRecommendedExtensions, ignoredRecommendations).then(() => {
|
||||
testObject = instantiationService.createInstance(ExtensionTipsService);
|
||||
testObject = instantiationService.createInstance(ExtensionRecommendationsService);
|
||||
return testObject.loadWorkspaceConfigPromise.then(() => {
|
||||
const recommendations = testObject.getAllRecommendationsWithReason();
|
||||
assert.ok(!recommendations['ms-vscode.csharp']); // stored recommendation that has been workspace ignored
|
||||
assert.ok(!recommendations['ms-dotnettools.csharp']); // stored recommendation that has been workspace ignored
|
||||
assert.ok(recommendations['ms-python.python']); // stored recommendation
|
||||
assert.ok(recommendations['mockpublisher1.mockextension1']); // workspace recommendation
|
||||
assert.ok(!recommendations['mockpublisher2.mockextension2']); // workspace recommendation that has been workspace ignored
|
||||
@@ -426,37 +430,37 @@ suite.skip('ExtensionsTipsService Test', () => { // {{SQL CARBON EDIT}} skip sui
|
||||
});
|
||||
});
|
||||
|
||||
test('ExtensionTipsService: Able to retrieve collection of all ignored recommendations', () => {
|
||||
test('ExtensionRecommendationsService: Able to retrieve collection of all ignored recommendations', () => {
|
||||
|
||||
const storageGetterStub = (a: string, _: StorageScope, c?: string) => {
|
||||
const storedRecommendations = '["ms-vscode.csharp", "ms-python.python"]';
|
||||
const storedRecommendations = '["ms-dotnettools.csharp", "ms-python.python"]';
|
||||
const globallyIgnoredRecommendations = '["mockpublisher2.mockextension2"]'; // ignore a workspace recommendation.
|
||||
if (a === 'extensionsAssistant/recommendations') { return storedRecommendations; }
|
||||
if (a === 'extensionsAssistant/ignored_recommendations') { return globallyIgnoredRecommendations; }
|
||||
return c;
|
||||
};
|
||||
|
||||
const workspaceIgnoredRecommendations = ['ms-vscode.csharp']; // ignore a stored recommendation and a workspace recommendation.
|
||||
const workspaceIgnoredRecommendations = ['ms-dotnettools.csharp']; // ignore a stored recommendation and a workspace recommendation.
|
||||
instantiationService.stub(IStorageService, <Partial<IStorageService>>{
|
||||
get: storageGetterStub,
|
||||
getBoolean: (a: string, _: StorageScope, c?: boolean) => a === 'extensionsAssistant/workspaceRecommendationsIgnore' || c
|
||||
});
|
||||
|
||||
return setUpFolderWorkspace('myFolder', mockTestData.validRecommendedExtensions, workspaceIgnoredRecommendations).then(() => {
|
||||
testObject = instantiationService.createInstance(ExtensionTipsService);
|
||||
testObject = instantiationService.createInstance(ExtensionRecommendationsService);
|
||||
return testObject.loadWorkspaceConfigPromise.then(() => {
|
||||
const recommendations = testObject.getAllRecommendationsWithReason();
|
||||
assert.ok(recommendations['ms-python.python']);
|
||||
|
||||
assert.ok(!recommendations['mockpublisher2.mockextension2']);
|
||||
assert.ok(!recommendations['ms-vscode.csharp']);
|
||||
assert.ok(!recommendations['ms-dotnettools.csharp']);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('ExtensionTipsService: Able to dynamically ignore/unignore global recommendations', () => {
|
||||
test('ExtensionRecommendationsService: Able to dynamically ignore/unignore global recommendations', () => {
|
||||
const storageGetterStub = (a: string, _: StorageScope, c?: string) => {
|
||||
const storedRecommendations = '["ms-vscode.csharp", "ms-python.python"]';
|
||||
const storedRecommendations = '["ms-dotnettools.csharp", "ms-python.python"]';
|
||||
const globallyIgnoredRecommendations = '["mockpublisher2.mockextension2"]'; // ignore a workspace recommendation.
|
||||
if (a === 'extensionsAssistant/recommendations') { return storedRecommendations; }
|
||||
if (a === 'extensionsAssistant/ignored_recommendations') { return globallyIgnoredRecommendations; }
|
||||
@@ -470,7 +474,7 @@ suite.skip('ExtensionsTipsService Test', () => { // {{SQL CARBON EDIT}} skip sui
|
||||
});
|
||||
|
||||
return setUpFolderWorkspace('myFolder', mockTestData.validRecommendedExtensions).then(() => {
|
||||
testObject = instantiationService.createInstance(ExtensionTipsService);
|
||||
testObject = instantiationService.createInstance(ExtensionRecommendationsService);
|
||||
return testObject.loadWorkspaceConfigPromise.then(() => {
|
||||
const recommendations = testObject.getAllRecommendationsWithReason();
|
||||
assert.ok(recommendations['ms-python.python']);
|
||||
@@ -510,7 +514,7 @@ suite.skip('ExtensionsTipsService Test', () => { // {{SQL CARBON EDIT}} skip sui
|
||||
});
|
||||
|
||||
await setUpFolderWorkspace('myFolder', []);
|
||||
testObject = instantiationService.createInstance(ExtensionTipsService);
|
||||
testObject = instantiationService.createInstance(ExtensionRecommendationsService);
|
||||
testObject.onRecommendationChange(changeHandlerTarget);
|
||||
testObject.toggleIgnoredRecommendation(ignoredExtensionId, true);
|
||||
await testObject.loadWorkspaceConfigPromise;
|
||||
@@ -520,35 +524,35 @@ suite.skip('ExtensionsTipsService Test', () => { // {{SQL CARBON EDIT}} skip sui
|
||||
assert.ok(storageSetterTarget.calledWithExactly('extensionsAssistant/ignored_recommendations', `["ms-vscode.vscode","${ignoredExtensionId.toLowerCase()}"]`, StorageScope.GLOBAL));
|
||||
});
|
||||
|
||||
test('ExtensionTipsService: Get file based recommendations from storage (old format)', () => {
|
||||
const storedRecommendations = '["ms-vscode.csharp", "ms-python.python", "ms-vscode.vscode-typescript-tslint-plugin"]';
|
||||
test('ExtensionRecommendationsService: Get file based recommendations from storage (old format)', () => {
|
||||
const storedRecommendations = '["ms-dotnettools.csharp", "ms-python.python", "ms-vscode.vscode-typescript-tslint-plugin"]';
|
||||
instantiationService.stub(IStorageService, <Partial<IStorageService>>{ get: (a: string, b: StorageScope, c?: string) => a === 'extensionsAssistant/recommendations' ? storedRecommendations : c, getBoolean: (a: string, b: StorageScope, c: boolean) => c });
|
||||
|
||||
return setUpFolderWorkspace('myFolder', []).then(() => {
|
||||
testObject = instantiationService.createInstance(ExtensionTipsService);
|
||||
testObject = instantiationService.createInstance(ExtensionRecommendationsService);
|
||||
return testObject.loadWorkspaceConfigPromise.then(() => {
|
||||
const recommendations = testObject.getFileBasedRecommendations();
|
||||
assert.equal(recommendations.length, 2);
|
||||
assert.ok(recommendations.some(({ extensionId }) => extensionId === 'ms-vscode.csharp')); // stored recommendation that exists in product.extensionTips
|
||||
assert.ok(recommendations.some(({ extensionId }) => extensionId === 'ms-dotnettools.csharp')); // stored recommendation that exists in product.extensionTips
|
||||
assert.ok(recommendations.some(({ extensionId }) => extensionId === 'ms-python.python')); // stored recommendation that exists in product.extensionImportantTips
|
||||
assert.ok(recommendations.every(({ extensionId }) => extensionId !== 'ms-vscode.vscode-typescript-tslint-plugin')); // stored recommendation that is no longer in neither product.extensionTips nor product.extensionImportantTips
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('ExtensionTipsService: Get file based recommendations from storage (new format)', () => {
|
||||
test('ExtensionRecommendationsService: Get file based recommendations from storage (new format)', () => {
|
||||
const milliSecondsInADay = 1000 * 60 * 60 * 24;
|
||||
const now = Date.now();
|
||||
const tenDaysOld = 10 * milliSecondsInADay;
|
||||
const storedRecommendations = `{"ms-vscode.csharp": ${now}, "ms-python.python": ${now}, "ms-vscode.vscode-typescript-tslint-plugin": ${now}, "lukehoban.Go": ${tenDaysOld}}`;
|
||||
const storedRecommendations = `{"ms-dotnettools.csharp": ${now}, "ms-python.python": ${now}, "ms-vscode.vscode-typescript-tslint-plugin": ${now}, "lukehoban.Go": ${tenDaysOld}}`;
|
||||
instantiationService.stub(IStorageService, <Partial<IStorageService>>{ get: (a: string, b: StorageScope, c?: string) => a === 'extensionsAssistant/recommendations' ? storedRecommendations : c, getBoolean: (a: string, b: StorageScope, c: boolean) => c });
|
||||
|
||||
return setUpFolderWorkspace('myFolder', []).then(() => {
|
||||
testObject = instantiationService.createInstance(ExtensionTipsService);
|
||||
testObject = instantiationService.createInstance(ExtensionRecommendationsService);
|
||||
return testObject.loadWorkspaceConfigPromise.then(() => {
|
||||
const recommendations = testObject.getFileBasedRecommendations();
|
||||
assert.equal(recommendations.length, 2);
|
||||
assert.ok(recommendations.some(({ extensionId }) => extensionId === 'ms-vscode.csharp')); // stored recommendation that exists in product.extensionTips
|
||||
assert.ok(recommendations.some(({ extensionId }) => extensionId === 'ms-dotnettools.csharp')); // stored recommendation that exists in product.extensionTips
|
||||
assert.ok(recommendations.some(({ extensionId }) => extensionId === 'ms-python.python')); // stored recommendation that exists in product.extensionImportantTips
|
||||
assert.ok(recommendations.every(({ extensionId }) => extensionId !== 'ms-vscode.vscode-typescript-tslint-plugin')); // stored recommendation that is no longer in neither product.extensionTips nor product.extensionImportantTips
|
||||
assert.ok(recommendations.every(({ extensionId }) => extensionId !== 'lukehoban.Go')); //stored recommendation that is older than a week
|
||||
@@ -13,10 +13,10 @@ import {
|
||||
IExtensionManagementService, IExtensionGalleryService, ILocalExtension, IGalleryExtension,
|
||||
DidInstallExtensionEvent, DidUninstallExtensionEvent, InstallExtensionEvent, IExtensionIdentifier, InstallOperation
|
||||
} from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { IWorkbenchExtensionEnablementService, EnablementState, IExtensionManagementServerService, IExtensionManagementServer, IExtensionTipsService } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
|
||||
import { IWorkbenchExtensionEnablementService, EnablementState, IExtensionManagementServerService, IExtensionManagementServer, IExtensionRecommendationsService } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
|
||||
import { getGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
||||
import { ExtensionManagementService } from 'vs/platform/extensionManagement/node/extensionManagementService';
|
||||
import { ExtensionTipsService } from 'vs/workbench/contrib/extensions/browser/extensionTipsService';
|
||||
import { ExtensionRecommendationsService } from 'vs/workbench/contrib/extensions/browser/extensionRecommendationsService';
|
||||
import { TestExtensionEnablementService } from 'vs/workbench/services/extensionManagement/test/browser/extensionEnablementService.test';
|
||||
import { ExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionGalleryService';
|
||||
import { IURLService } from 'vs/platform/url/common/url';
|
||||
@@ -94,7 +94,7 @@ suite('ExtensionsActions Test', () => {
|
||||
instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
||||
instantiationService.stub(ILabelService, { onDidChangeFormatters: new Emitter<IFormatterChangeEvent>().event });
|
||||
|
||||
instantiationService.set(IExtensionTipsService, instantiationService.createInstance(ExtensionTipsService));
|
||||
instantiationService.set(IExtensionRecommendationsService, instantiationService.createInstance(ExtensionRecommendationsService));
|
||||
instantiationService.stub(IURLService, URLService);
|
||||
|
||||
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', []);
|
||||
|
||||
@@ -14,10 +14,10 @@ import {
|
||||
IExtensionManagementService, IExtensionGalleryService, ILocalExtension, IGalleryExtension, IQueryOptions,
|
||||
DidInstallExtensionEvent, DidUninstallExtensionEvent, InstallExtensionEvent, IExtensionIdentifier, SortBy
|
||||
} from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { IWorkbenchExtensionEnablementService, EnablementState, IExtensionManagementServerService, IExtensionManagementServer, IExtensionTipsService, ExtensionRecommendationReason } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
|
||||
import { IWorkbenchExtensionEnablementService, EnablementState, IExtensionManagementServerService, IExtensionManagementServer, IExtensionRecommendationsService, ExtensionRecommendationReason } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
|
||||
import { getGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
||||
import { ExtensionManagementService } from 'vs/platform/extensionManagement/node/extensionManagementService';
|
||||
import { ExtensionTipsService } from 'vs/workbench/contrib/extensions/browser/extensionTipsService';
|
||||
import { ExtensionRecommendationsService } from 'vs/workbench/contrib/extensions/browser/extensionRecommendationsService';
|
||||
import { TestExtensionEnablementService } from 'vs/workbench/services/extensionManagement/test/browser/extensionEnablementService.test';
|
||||
import { ExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionGalleryService';
|
||||
import { IURLService } from 'vs/platform/url/common/url';
|
||||
@@ -110,16 +110,16 @@ suite('ExtensionsListView Tests', () => {
|
||||
|
||||
instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
||||
|
||||
instantiationService.stub(IExtensionTipsService, ExtensionTipsService);
|
||||
instantiationService.stub(IExtensionRecommendationsService, ExtensionRecommendationsService);
|
||||
instantiationService.stub(IURLService, URLService);
|
||||
|
||||
instantiationService.stubPromise(IExtensionTipsService, 'getWorkspaceRecommendations', [
|
||||
instantiationService.stubPromise(IExtensionRecommendationsService, 'getWorkspaceRecommendations', [
|
||||
{ extensionId: workspaceRecommendationA.identifier.id },
|
||||
{ extensionId: workspaceRecommendationB.identifier.id }]);
|
||||
instantiationService.stub(IExtensionTipsService, 'getFileBasedRecommendations', [
|
||||
instantiationService.stub(IExtensionRecommendationsService, 'getFileBasedRecommendations', [
|
||||
{ extensionId: fileBasedRecommendationA.identifier.id },
|
||||
{ extensionId: fileBasedRecommendationB.identifier.id }]);
|
||||
instantiationService.stubPromise(IExtensionTipsService, 'getOtherRecommendations', [
|
||||
instantiationService.stubPromise(IExtensionRecommendationsService, 'getOtherRecommendations', [
|
||||
{ extensionId: otherRecommendationA.identifier.id }
|
||||
]);
|
||||
const reasons: { [key: string]: any } = {};
|
||||
@@ -129,7 +129,7 @@ suite('ExtensionsListView Tests', () => {
|
||||
reasons[fileBasedRecommendationB.identifier.id] = { reasonId: ExtensionRecommendationReason.File };
|
||||
reasons[otherRecommendationA.identifier.id] = { reasonId: ExtensionRecommendationReason.Executable };
|
||||
|
||||
instantiationService.stub(IExtensionTipsService, 'getAllRecommendationsWithReason', reasons);
|
||||
instantiationService.stub(IExtensionRecommendationsService, 'getAllRecommendationsWithReason', reasons);
|
||||
|
||||
});
|
||||
|
||||
|
||||
@@ -14,10 +14,10 @@ import {
|
||||
IExtensionManagementService, IExtensionGalleryService, ILocalExtension, IGalleryExtension,
|
||||
DidInstallExtensionEvent, DidUninstallExtensionEvent, InstallExtensionEvent, IGalleryExtensionAssets, IExtensionIdentifier, InstallOperation
|
||||
} from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { IWorkbenchExtensionEnablementService, EnablementState, IExtensionManagementServerService, IExtensionTipsService } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
|
||||
import { IWorkbenchExtensionEnablementService, EnablementState, IExtensionManagementServerService, IExtensionRecommendationsService } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
|
||||
import { getGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
||||
import { ExtensionManagementService } from 'vs/platform/extensionManagement/node/extensionManagementService';
|
||||
import { ExtensionTipsService } from 'vs/workbench/contrib/extensions/browser/extensionTipsService';
|
||||
import { ExtensionRecommendationsService } from 'vs/workbench/contrib/extensions/browser/extensionRecommendationsService';
|
||||
import { TestExtensionEnablementService } from 'vs/workbench/services/extensionManagement/test/browser/extensionEnablementService.test';
|
||||
import { ExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionGalleryService';
|
||||
import { IURLService } from 'vs/platform/url/common/url';
|
||||
@@ -91,7 +91,7 @@ suite('ExtensionsWorkbenchServiceTest', () => {
|
||||
|
||||
instantiationService.stub(IWorkbenchExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
||||
|
||||
instantiationService.set(IExtensionTipsService, instantiationService.createInstance(ExtensionTipsService));
|
||||
instantiationService.set(IExtensionRecommendationsService, instantiationService.createInstance(ExtensionRecommendationsService));
|
||||
|
||||
instantiationService.stub(INotificationService, { prompt: () => null! });
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user