summaryrefslogtreecommitdiff
path: root/extension/src
diff options
context:
space:
mode:
Diffstat (limited to 'extension/src')
-rw-r--r--extension/src/__mocks__/vscode.ts7
-rw-r--r--extension/src/activation/environmentSetup.ts17
-rw-r--r--extension/src/activation/test/environmentSetup.test.ts70
-rw-r--r--extension/src/test/suite/terminalEmulator.test.ts28
4 files changed, 79 insertions, 43 deletions
diff --git a/extension/src/__mocks__/vscode.ts b/extension/src/__mocks__/vscode.ts
new file mode 100644
index 00000000..d415b5a0
--- /dev/null
+++ b/extension/src/__mocks__/vscode.ts
@@ -0,0 +1,7 @@
+const vscode = {
+ window: {
+ onDidChangeVisibleTextEditors: jest.fn(),
+ },
+};
+
+module.exports = vscode;
diff --git a/extension/src/activation/environmentSetup.ts b/extension/src/activation/environmentSetup.ts
index 4e6be9b3..71b774d9 100644
--- a/extension/src/activation/environmentSetup.ts
+++ b/extension/src/activation/environmentSetup.ts
@@ -4,7 +4,6 @@ const exec = util.promisify(require("child_process").exec);
const { spawn } = require("child_process");
import * as path from "path";
import * as fs from "fs";
-import rebuild from "@electron/rebuild";
import { getContinueServerUrl } from "../bridge";
import fetch from "node-fetch";
import * as vscode from "vscode";
@@ -60,7 +59,7 @@ async function runCommand(cmd: string): Promise<[string, string | undefined]> {
return [stdout, stderr];
}
-async function getPythonPipCommands() {
+export async function getPythonPipCommands() {
var [stdout, stderr] = await runCommand("python3 --version");
let pythonCmd = "python3";
if (stderr) {
@@ -111,10 +110,8 @@ async function getPythonPipCommands() {
);
throw new Error("Python3.8 or greater is not installed.");
}
- } else {
- pythonCmd = `python${major}.${minor}`;
- pipCmd = `pip${major}.${minor}`;
}
+
return [pythonCmd, pipCmd];
}
@@ -368,16 +365,6 @@ export async function startContinuePythonServer() {
});
}
-async function installNodeModules() {
- console.log("Rebuilding node-pty for Continue extension...");
- await rebuild({
- buildPath: getExtensionUri().fsPath, // Folder containing node_modules
- electronVersion: "19.1.8",
- onlyModules: ["node-pty"],
- });
- console.log("Successfully rebuilt node-pty");
-}
-
export function isPythonEnvSetup(): boolean {
let pathToEnvCfg = getExtensionUri().fsPath + "/scripts/env/pyvenv.cfg";
return fs.existsSync(path.join(pathToEnvCfg));
diff --git a/extension/src/activation/test/environmentSetup.test.ts b/extension/src/activation/test/environmentSetup.test.ts
new file mode 100644
index 00000000..ca487416
--- /dev/null
+++ b/extension/src/activation/test/environmentSetup.test.ts
@@ -0,0 +1,70 @@
+const child_process = require("child_process");
+import { platform } from "os";
+import { getPythonPipCommands } from "../environmentSetup";
+
+jest.mock("os");
+jest.mock("child_process");
+
+function mockPythonVersionMappings(mappings: { [pythonCmd: string]: string }) {
+ (child_process.exec as jest.Mock).mockImplementation(
+ (command: string, options: any) => {
+ const pythonCmd = command.split(" ")[0];
+ if (pythonCmd in mappings) {
+ return Promise.resolve([mappings[pythonCmd], ""]);
+ } else {
+ return Promise.resolve(["", stubStderr]);
+ }
+ }
+ );
+}
+
+const stubStderr =
+ "This is a stub stderr, but will be checked only for existence.";
+describe("getPythonPipCommands", () => {
+ describe("on Windows", () => {
+ it("should return the correct Python and Pip commands", async () => {
+ (platform as jest.Mock).mockReturnValue("win32");
+ mockPythonVersionMappings({
+ python: "Python 3.8.0",
+ });
+
+ const [pythonCmd, pipCmd] = await getPythonPipCommands();
+
+ expect(pythonCmd).toBe("python");
+ expect(pipCmd).toBe("pip");
+
+ jest.restoreAllMocks();
+ });
+ describe("on MacOS", () => {
+ (platform as jest.Mock).mockReturnValue("darwin");
+ it("should check through all python versions after finding 3.7", async () => {
+ mockPythonVersionMappings({
+ python: "",
+ python3: "Python 3.7.0",
+ "python3.11": "Python 3.11.0",
+ });
+
+ const [pythonCmd, pipCmd] = await getPythonPipCommands();
+
+ expect(pythonCmd).toBe("python3.11");
+ expect(pipCmd).toBe("pip3.11");
+
+ jest.restoreAllMocks();
+ });
+
+ it("should use python3 if that maps to valid version", async () => {
+ mockPythonVersionMappings({
+ python: "",
+ python3: "Python 3.8.0",
+ });
+
+ const [pythonCmd, pipCmd] = await getPythonPipCommands();
+
+ expect(pythonCmd).toBe("python3");
+ expect(pipCmd).toBe("pip3");
+
+ jest.restoreAllMocks();
+ });
+ });
+ });
+});
diff --git a/extension/src/test/suite/terminalEmulator.test.ts b/extension/src/test/suite/terminalEmulator.test.ts
deleted file mode 100644
index c4c159a4..00000000
--- a/extension/src/test/suite/terminalEmulator.test.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { test, describe } from "mocha";
-import * as assert from "assert";
-import { PythonTracebackSnooper } from "../../terminal/snoopers";
-
-suite("Snoopers", () => {
- suite("PythonTracebackSnooper", () => {
- test("should detect traceback given all at once", async () => {
- let traceback = `Traceback (most recent call last):
- File "/Users/natesesti/Desktop/continue/extension/examples/python/main.py", line 10, in <module>
- sum(first, second)
- File "/Users/natesesti/Desktop/continue/extension/examples/python/sum.py", line 2, in sum
- return a + b
- TypeError: unsupported operand type(s) for +: 'int' and 'str'`;
- let returnedTraceback = await new Promise((resolve) => {
- let callback = (data: string) => {
- resolve(data);
- };
- let snooper = new PythonTracebackSnooper(callback);
- snooper.onData(traceback);
- });
- assert(
- returnedTraceback === traceback,
- "Detected \n" + returnedTraceback
- );
- });
- test("should detect traceback given in chunks", () => {});
- });
-});