rea/tests/boundary/android/jadxConfiguration.test.ts

45 lines
1.6 KiB
TypeScript

import { chmod, mkdir, realpath, writeFile } from "node:fs/promises";
import { join } from "node:path";
import { expect, it as test } from "vitest";
import { resolveJadxConfiguration } from "../../../src/android/JadxConfiguration.js";
import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js";
const it = test.skipIf(process.platform === "win32");
it("rejects an explicit JAVA_HOME without an executable java binary", async () => {
const root = await createTestTempDirectory("rea-jadx-config-");
const jar = join(root, "jadx-headless-mcp.jar");
const javaHome = join(root, "missing-jdk");
await writeFile(jar, "fixture jar");
await expect(
resolveJadxConfiguration(
{ REA_JADX_MCP_JAR: jar, JAVA_HOME: javaHome },
"inspect_android_package",
),
).rejects.toMatchObject({
_tag: "AnalysisCapabilityUnavailableError",
reason: expect.stringContaining(join(javaHome, "bin", "java")),
});
});
it("accepts a verified explicit java binary and canonicalizes the JAR", async () => {
const root = await createTestTempDirectory("rea-jadx-config-");
const jar = join(root, "jadx-headless-mcp.jar");
const javaHome = join(root, "jdk");
const java = join(javaHome, "bin", "java");
await mkdir(join(javaHome, "bin"), { recursive: true });
await writeFile(jar, "fixture jar");
await writeFile(java, "#!/bin/sh\n");
await chmod(java, 0o700);
await expect(
resolveJadxConfiguration(
{ REA_JADX_MCP_JAR: jar, JAVA_HOME: javaHome },
"inspect_android_package",
),
).resolves.toEqual({ jar: await realpath(jar), java });
});