Skip to content

Commit 8ff3703

Browse files
committed
Add getStorageUri to API (to fix tests)
1 parent 4f2fe1e commit 8ff3703

File tree

5 files changed

+37
-28
lines changed

5 files changed

+37
-28
lines changed

src/features/ExternalApi.ts

+5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export interface IPowerShellExtensionClient {
1919
unregisterExternalExtension(uuid: string): boolean;
2020
getPowerShellVersionDetails(uuid: string): Promise<IExternalPowerShellDetails>;
2121
waitUntilStarted(uuid: string): Promise<void>;
22+
getStorageUri(): vscode.Uri;
2223
}
2324

2425
/*
@@ -166,6 +167,10 @@ export class ExternalApiFeature extends LanguageClientConsumer implements IPower
166167
return this.sessionManager.waitUntilStarted();
167168
}
168169

170+
public getStorageUri(): vscode.Uri {
171+
return this.extensionContext.storageUri;
172+
}
173+
169174
public dispose() {
170175
// Nothing to dispose.
171176
}

src/main.ts

+1
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<IPower
180180
unregisterExternalExtension: uuid => externalApi.unregisterExternalExtension(uuid),
181181
getPowerShellVersionDetails: uuid => externalApi.getPowerShellVersionDetails(uuid),
182182
waitUntilStarted: uuid => externalApi.waitUntilStarted(uuid),
183+
getStorageUri: () => externalApi.getStorageUri(),
183184
};
184185
}
185186

test/core/paths.test.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,15 @@ import * as assert from "assert";
55
import * as fs from "fs";
66
import * as path from "path";
77
import * as vscode from "vscode";
8+
import { IPowerShellExtensionClient } from "../../src/features/ExternalApi";
89
import utils = require("../utils");
910

1011
describe("Path assumptions", function () {
11-
before(utils.ensureEditorServicesIsConnected);
12+
let storageUri: vscode.Uri;
13+
before(async () => {
14+
const extension: IPowerShellExtensionClient = await utils.ensureEditorServicesIsConnected();
15+
storageUri = extension.getStorageUri();
16+
});
1217

1318
// TODO: This is skipped because it interferes with other tests. Either
1419
// need to find a way to close the opened folder via a Code API, or find
@@ -22,6 +27,6 @@ describe("Path assumptions", function () {
2227
});
2328

2429
it("Creates the log folder at the correct path", function () {
25-
assert(fs.existsSync(path.resolve(utils.rootPath, "logs")));
30+
assert(fs.existsSync(vscode.Uri.joinPath(storageUri, "logs").fsPath));
2631
});
2732
});

test/features/ExternalApi.test.ts

+16-18
Original file line numberDiff line numberDiff line change
@@ -7,51 +7,50 @@ import { IExternalPowerShellDetails, IPowerShellExtensionClient } from "../../sr
77

88
describe("ExternalApi feature", function () {
99
describe("External extension registration", function () {
10-
let powerShellExtensionClient: IPowerShellExtensionClient;
10+
let extension: IPowerShellExtensionClient;
1111
before(async function () {
12-
const powershellExtension = await utils.ensureExtensionIsActivated();
13-
powerShellExtensionClient = powershellExtension!.exports as IPowerShellExtensionClient;
12+
extension = await utils.ensureExtensionIsActivated();
1413
});
1514

1615
it("Registers and unregisters an extension", function () {
17-
const sessionId: string = powerShellExtensionClient.registerExternalExtension(utils.extensionId);
16+
const sessionId: string = extension.registerExternalExtension(utils.extensionId);
1817
assert.notStrictEqual(sessionId, "");
1918
assert.notStrictEqual(sessionId, null);
2019
assert.strictEqual(
21-
powerShellExtensionClient.unregisterExternalExtension(sessionId),
20+
extension.unregisterExternalExtension(sessionId),
2221
true);
2322
});
2423

2524
it("Registers and unregisters an extension with a version", function () {
26-
const sessionId: string = powerShellExtensionClient.registerExternalExtension(utils.extensionId, "v2");
25+
const sessionId: string = extension.registerExternalExtension(utils.extensionId, "v2");
2726
assert.notStrictEqual(sessionId, "");
2827
assert.notStrictEqual(sessionId, null);
2928
assert.strictEqual(
30-
powerShellExtensionClient.unregisterExternalExtension(sessionId),
29+
extension.unregisterExternalExtension(sessionId),
3130
true);
3231
});
3332

3433
it("Rejects if not registered", async function () {
3534
assert.rejects(
36-
async () => await powerShellExtensionClient.getPowerShellVersionDetails(""))
35+
async () => await extension.getPowerShellVersionDetails(""))
3736
});
3837

3938
it("Throws if attempting to register an extension more than once", async function () {
40-
const sessionId: string = powerShellExtensionClient.registerExternalExtension(utils.extensionId);
39+
const sessionId: string = extension.registerExternalExtension(utils.extensionId);
4140
try {
4241
assert.throws(
43-
() => powerShellExtensionClient.registerExternalExtension(utils.extensionId),
42+
() => extension.registerExternalExtension(utils.extensionId),
4443
{
4544
message: `The extension '${utils.extensionId}' is already registered.`
4645
});
4746
} finally {
48-
powerShellExtensionClient.unregisterExternalExtension(sessionId);
47+
extension.unregisterExternalExtension(sessionId);
4948
}
5049
});
5150

5251
it("Throws when unregistering an extension that isn't registered", async function () {
5352
assert.throws(
54-
() => powerShellExtensionClient.unregisterExternalExtension("not-real"),
53+
() => extension.unregisterExternalExtension("not-real"),
5554
{
5655
message: `No extension registered with session UUID: not-real`
5756
});
@@ -60,18 +59,17 @@ describe("ExternalApi feature", function () {
6059

6160
describe("PowerShell version details", () => {
6261
let sessionId: string;
63-
let powerShellExtensionClient: IPowerShellExtensionClient;
62+
let extension: IPowerShellExtensionClient;
6463

6564
before(async function () {
66-
const powershellExtension = await utils.ensureExtensionIsActivated();
67-
powerShellExtensionClient = powershellExtension!.exports as IPowerShellExtensionClient;
68-
sessionId = powerShellExtensionClient.registerExternalExtension(utils.extensionId);
65+
extension = await utils.ensureExtensionIsActivated();
66+
sessionId = extension.registerExternalExtension(utils.extensionId);
6967
});
7068

71-
after(function () { powerShellExtensionClient.unregisterExternalExtension(sessionId); });
69+
after(function () { extension.unregisterExternalExtension(sessionId); });
7270

7371
it("Gets non-empty version details from the PowerShell Editor Services", async function () {
74-
const versionDetails: IExternalPowerShellDetails = await powerShellExtensionClient.getPowerShellVersionDetails(sessionId);
72+
const versionDetails: IExternalPowerShellDetails = await extension.getPowerShellVersionDetails(sessionId);
7573

7674
assert.notStrictEqual(versionDetails.architecture, "");
7775
assert.notStrictEqual(versionDetails.architecture, null);

test/utils.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@ export const rootPath = path.resolve(__dirname, "../../")
1414
const packageJSON: any = require(path.resolve(rootPath, "package.json"));
1515
export const extensionId = `${packageJSON.publisher}.${packageJSON.name}`;
1616

17-
export async function ensureExtensionIsActivated(): Promise<vscode.Extension<any>> {
17+
export async function ensureExtensionIsActivated(): Promise<IPowerShellExtensionClient> {
1818
const extension = vscode.extensions.getExtension(extensionId);
1919
if (!extension.isActive) { await extension.activate(); }
20-
return extension;
20+
return extension!.exports as IPowerShellExtensionClient;
2121
}
2222

23-
export async function ensureEditorServicesIsConnected(): Promise<void> {
24-
const powershellExtension = await ensureExtensionIsActivated();
25-
const client = powershellExtension!.exports as IPowerShellExtensionClient;
26-
const sessionId = client.registerExternalExtension(extensionId);
27-
await client.waitUntilStarted(sessionId);
28-
client.unregisterExternalExtension(sessionId);
23+
export async function ensureEditorServicesIsConnected(): Promise<IPowerShellExtensionClient> {
24+
const extension = await ensureExtensionIsActivated();
25+
const sessionId = extension.registerExternalExtension(extensionId);
26+
await extension.waitUntilStarted(sessionId);
27+
extension.unregisterExternalExtension(sessionId);
28+
return extension;
2929
}

0 commit comments

Comments
 (0)