From 2ac85f0f3a692816b363b5a7399b4cf5aaf0b8bb Mon Sep 17 00:00:00 2001 From: tgodzik Date: Sun, 21 Apr 2024 16:29:05 +0200 Subject: [PATCH] tests: Add real tests for detecting Java --- .github/workflows/ci.yml | 2 ++ .../src/__tests__/getJavaHome.test.ts | 32 +++++++++++++++++++ packages/metals-languageclient/src/util.ts | 2 +- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2b777f514..c88094bac 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,8 @@ jobs: steps: - uses: actions/checkout@v2 - uses: coursier/setup-action@v1 + with: + jvm: temurin:17 - uses: actions/setup-node@v2 with: node-version: "16" diff --git a/packages/metals-languageclient/src/__tests__/getJavaHome.test.ts b/packages/metals-languageclient/src/__tests__/getJavaHome.test.ts index 4e3b5e6d6..d3d35930b 100644 --- a/packages/metals-languageclient/src/__tests__/getJavaHome.test.ts +++ b/packages/metals-languageclient/src/__tests__/getJavaHome.test.ts @@ -1,4 +1,14 @@ import path from "path"; +import { OutputChannel } from "../interfaces/OutputChannel"; + +class MockOutput implements OutputChannel { + append(value: string): void { + console.log(value); + } + appendLine(value: string): void { + console.log(value); + } +} const exampleJavaVersionString = `openjdk "17.0.1" 2021-10-19 OpenJDK Runtime Environment (build 17.0.1+12-39) @@ -26,6 +36,28 @@ describe("getJavaHome", () => { const javaHome = await require("../getJavaHome").getJavaHome("17"); expect(javaHome).toBe(JAVA_HOME); }); + + // needs to run on a machine with an actual JAVA_HOME set up + it("reads from real JAVA_HOME", async () => { + process.env = { ...originalEnv }; + delete process.env.PATH; + const javaHome = await require("../getJavaHome").getJavaHome( + "17", + new MockOutput() + ); + expect(javaHome).toBeDefined(); + }); + + // needs to run on a machine with an actual java on PATH set up + it("reads from real PATH", async () => { + process.env = { ...originalEnv }; + delete process.env.JAVA_HOME; + const javaHome = await require("../getJavaHome").getJavaHome( + "17", + new MockOutput() + ); + expect(javaHome).toBeDefined(); + }); }); function mockExistsFs(javaLinks: { binPath: String }[]): void { diff --git a/packages/metals-languageclient/src/util.ts b/packages/metals-languageclient/src/util.ts index f53248dbc..d7e8d02c6 100644 --- a/packages/metals-languageclient/src/util.ts +++ b/packages/metals-languageclient/src/util.ts @@ -12,7 +12,7 @@ export function toPromise(te: TaskEither): Promise { } export function findOnPath(names: string[]) { - const envPath = process.env["PATH"]; + const envPath = process.env["PATH"] || process.env["Path"]; const isWindows = process.platform === "win32"; if (envPath) {