Skip to content

Commit 5830338

Browse files
committed
added test for the no install case
1 parent 103c360 commit 5830338

File tree

5 files changed

+121
-10
lines changed

5 files changed

+121
-10
lines changed

src/InstallRuntimeDependencies.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,19 @@
66
import { PlatformInformation } from './platform';
77
import { PackageInstallation, LogPlatformInfo, InstallationSuccess } from './omnisharp/loggingEvents';
88
import { EventStream } from './EventStream';
9-
import { downloadAndInstallPackages } from './packageManager/downloadAndInstallPackages';
10-
import { NetworkSettingsProvider } from './NetworkSettings';
119
import { getRuntimeDependenciesPackages } from './tools/RuntimeDependencyPackageUtils';
1210
import { getAbsolutePathPackagesToInstall } from './packageManager/getAbsolutePathPackagesToInstall';
11+
import IInstallDependencies from './packageManager/IInstallDependencies';
1312

14-
export async function installRuntimeDependencies(packageJSON: any, extensionPath: string, networkSettingsProvider: NetworkSettingsProvider, eventStream: EventStream, platformInfo: PlatformInformation): Promise<boolean>{
13+
export async function installRuntimeDependencies(packageJSON: any, extensionPath: string, installDependencies: IInstallDependencies, eventStream: EventStream, platformInfo: PlatformInformation): Promise<boolean>{
1514
let runTimeDependencies = getRuntimeDependenciesPackages(packageJSON);
1615
let packagesToInstall = await getAbsolutePathPackagesToInstall(runTimeDependencies, platformInfo, extensionPath);
1716
if (packagesToInstall && packagesToInstall.length > 0) {
1817
eventStream.post(new PackageInstallation("C# dependencies"));
1918
try {
2019
// Display platform information and RID
2120
eventStream.post(new LogPlatformInfo(platformInfo));
22-
await downloadAndInstallPackages(packagesToInstall, networkSettingsProvider, eventStream);
21+
await installDependencies(packagesToInstall);
2322
eventStream.post(new InstallationSuccess());
2423
return true;
2524
}

src/main.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import TelemetryReporter from 'vscode-extension-telemetry';
2727
import { addJSONProviders } from './features/json/jsonContributions';
2828
import { ProjectStatusBarObserver } from './observers/ProjectStatusBarObserver';
2929
import CSharpExtensionExports from './CSharpExtensionExports';
30-
import { vscodeNetworkSettingsProvider, NetworkSettingsProvider } from './NetworkSettings';
30+
import { vscodeNetworkSettingsProvider } from './NetworkSettings';
3131
import { ErrorMessageObserver } from './observers/ErrorMessageObserver';
3232
import OptionProvider from './observers/OptionProvider';
3333
import DotNetTestChannelObserver from './observers/DotnetTestChannelObserver';
@@ -38,6 +38,9 @@ import { CSharpExtensionId } from './constants/CSharpExtensionId';
3838
import { OpenURLObserver } from './observers/OpenURLObserver';
3939
import { activateRazorExtension } from './razor/razor';
4040
import { RazorLoggerObserver } from './observers/RazorLoggerObserver';
41+
import { AbsolutePathPackage } from './packageManager/AbsolutePathPackage';
42+
import { downloadAndInstallPackages } from './packageManager/downloadAndInstallPackages';
43+
import IInstallDependencies from './packageManager/IInstallDependencies';
4144
import { installRuntimeDependencies } from './InstallRuntimeDependencies';
4245

4346
export async function activate(context: vscode.ExtensionContext): Promise<CSharpExtensionExports> {
@@ -116,7 +119,8 @@ export async function activate(context: vscode.ExtensionContext): Promise<CSharp
116119
eventStream.subscribe(telemetryObserver.post);
117120

118121
let networkSettingsProvider = vscodeNetworkSettingsProvider(vscode);
119-
let runtimeDependenciesExist = await ensureRuntimeDependencies(extension, eventStream, platformInfo, networkSettingsProvider);
122+
let installDependencies: IInstallDependencies = (dependencies: AbsolutePathPackage[]) => downloadAndInstallPackages(dependencies, networkSettingsProvider, eventStream);
123+
let runtimeDependenciesExist = await ensureRuntimeDependencies(extension, eventStream, platformInfo, installDependencies);
120124

121125
// activate language services
122126
let langServicePromise = OmniSharp.activate(context, extension.packageJSON, platformInfo, networkSettingsProvider, eventStream, optionProvider, extension.extensionPath);
@@ -158,7 +162,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<CSharp
158162
};
159163
}
160164

161-
async function ensureRuntimeDependencies(extension: vscode.Extension<CSharpExtensionExports>, eventStream: EventStream, platformInfo: PlatformInformation, networkSettingsProvider: NetworkSettingsProvider): Promise<boolean> {
162-
return installRuntimeDependencies(extension.packageJSON, extension.extensionPath, networkSettingsProvider, eventStream, platformInfo);
165+
async function ensureRuntimeDependencies(extension: vscode.Extension<CSharpExtensionExports>, eventStream: EventStream, platformInfo: PlatformInformation, installDependencies: IInstallDependencies): Promise<boolean> {
166+
return installRuntimeDependencies(extension.packageJSON, extension.extensionPath, installDependencies, eventStream, platformInfo);
163167
}
164168

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { AbsolutePathPackage } from "./AbsolutePathPackage";
7+
8+
export default interface IInstallDependencies {
9+
(packages: AbsolutePathPackage[]): Promise<void>;
10+
}

src/packageManager/getAbsolutePathPackagesToInstall.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ import { getNotInstalledPackagesForPlatform } from "./PackageFilterer";
99
import { Package } from "./Package";
1010

1111
export async function getAbsolutePathPackagesToInstall(packages: Package[], platformInfo: PlatformInformation, extensionPath: string): Promise<AbsolutePathPackage[]> {
12-
let absolutePathPackages = packages.map(pkg => AbsolutePathPackage.getAbsolutePathPackage(pkg, extensionPath));
13-
return getNotInstalledPackagesForPlatform(absolutePathPackages, platformInfo);
12+
if (packages && packages.length>0)
13+
{
14+
let absolutePathPackages = packages.map(pkg => AbsolutePathPackage.getAbsolutePathPackage(pkg, extensionPath));
15+
return getNotInstalledPackagesForPlatform(absolutePathPackages, platformInfo);
16+
}
17+
18+
return [];
1419
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
7+
import { installRuntimeDependencies } from "../../src/InstallRuntimeDependencies";
8+
import IInstallDependencies from "../../src/packageManager/IInstallDependencies";
9+
import { EventStream } from "../../src/EventStream";
10+
import { PlatformInformation } from "../../src/platform";
11+
import * as chai from "chai";
12+
import TestEventBus from "./testAssets/TestEventBus";
13+
import { AbsolutePathPackage } from "../../src/packageManager/AbsolutePathPackage";
14+
import { Package } from "../../src/packageManager/Package";
15+
16+
const expect = chai.expect;
17+
18+
suite(`${installRuntimeDependencies.name}`, () => {
19+
let packageJSON = {
20+
runtimeDependencies: {}
21+
};
22+
23+
let extensionPath = "/ExtensionPath";
24+
let installDependencies: IInstallDependencies;
25+
let eventStream: EventStream;
26+
let eventBus: TestEventBus;
27+
let platformInfo = new PlatformInformation("platform1", "architecture1");
28+
29+
setup(() => {
30+
eventStream = new EventStream();
31+
eventBus = new TestEventBus(eventStream);
32+
installDependencies = () => Promise.resolve();
33+
});
34+
35+
suite("When all the dependencies already exist", () => {
36+
suiteSetup(() => {
37+
packageJSON = {
38+
runtimeDependencies: {}
39+
};
40+
});
41+
42+
test("True is returned", async () => {
43+
let installed = await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo);
44+
expect(installed).to.be.true;
45+
});
46+
47+
test("Doesn't log anything to the eventStream", async() => {
48+
let packageJSON = {
49+
runtimeDependencies: {}
50+
};
51+
52+
await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo);
53+
expect(eventBus.getEvents()).to.be.empty;
54+
});
55+
});
56+
57+
suite("When there is a dependency to install", () => {
58+
let packageToInstall : Package= {
59+
id:"myPackage",
60+
description: "somePackage",
61+
installPath: "installPath",
62+
binaries: [],
63+
url: "myUrl",
64+
platforms: [platformInfo.platform],
65+
architectures: [platformInfo.architecture]
66+
};
67+
68+
setup(() => {
69+
packageJSON = {
70+
runtimeDependencies: [packageToInstall]
71+
};
72+
});
73+
74+
test("Calls installDependencies with the absolute path package and returns true after successful installation", async () => {
75+
let inputPackage: AbsolutePathPackage[];
76+
installDependencies = (packages) => {
77+
inputPackage = packages;
78+
return Promise.resolve();
79+
};
80+
81+
let installed = await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo);
82+
expect(installed).to.be.true;
83+
expect(inputPackage).to.have.length(1);
84+
expect(inputPackage[0]).to.be.deep.equal(AbsolutePathPackage.getAbsolutePathPackage(packageToInstall, extensionPath));
85+
});
86+
87+
test("Returns false when installDependencies throws exception", async () => {
88+
installDependencies = () => Promise.reject("some reason");
89+
let installed = await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo);
90+
expect(installed).to.be.false;
91+
});
92+
});
93+
});

0 commit comments

Comments
 (0)