mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-08 10:02:56 +08:00
94 lines
3.2 KiB
TypeScript
94 lines
3.2 KiB
TypeScript
import path from "node:path";
|
|
import { describe, expect, it } from "vitest";
|
|
import {
|
|
linuxArmAndroidGradleSkipMessage,
|
|
resolveAndroidSdkEnv,
|
|
shouldSkipLinuxArmAndroidGradle,
|
|
splitAndroidGradleArgs,
|
|
} from "../../scripts/run-android-gradle.mjs";
|
|
|
|
describe("run-android-gradle", () => {
|
|
it("splits Gradle args from an optional post command", () => {
|
|
expect(
|
|
splitAndroidGradleArgs([":app:installPlayDebug", "--", "adb", "shell", "am", "start"]),
|
|
).toEqual({
|
|
gradleArgs: [":app:installPlayDebug"],
|
|
postArgs: ["adb", "shell", "am", "start"],
|
|
});
|
|
});
|
|
|
|
it("skips Linux ARM hosts by default because AAPT2 is x86_64-only", () => {
|
|
expect(shouldSkipLinuxArmAndroidGradle({ arch: "arm64", platform: "linux" })).toBe(true);
|
|
expect(shouldSkipLinuxArmAndroidGradle({ arch: "arm", platform: "linux" })).toBe(true);
|
|
expect(shouldSkipLinuxArmAndroidGradle({ arch: "x64", platform: "linux" })).toBe(false);
|
|
expect(shouldSkipLinuxArmAndroidGradle({ arch: "arm64", platform: "darwin" })).toBe(false);
|
|
});
|
|
|
|
it("allows an explicit Linux ARM override", () => {
|
|
expect(
|
|
shouldSkipLinuxArmAndroidGradle({
|
|
arch: "arm64",
|
|
env: { OPENCLAW_ANDROID_GRADLE_ALLOW_LINUX_ARM: "1" },
|
|
platform: "linux",
|
|
}),
|
|
).toBe(false);
|
|
});
|
|
|
|
it("explains the skip with the override escape hatch", () => {
|
|
expect(linuxArmAndroidGradleSkipMessage("linux", "arm64")).toContain(
|
|
"OPENCLAW_ANDROID_GRADLE_ALLOW_LINUX_ARM=1",
|
|
);
|
|
});
|
|
|
|
describe("resolveAndroidSdkEnv", () => {
|
|
const macSdk = path.join("/Users/dev", "Library", "Android", "sdk");
|
|
const linuxSdk = path.join("/home/dev", "Android", "Sdk");
|
|
|
|
it("keeps env untouched when ANDROID_HOME or ANDROID_SDK_ROOT is set", () => {
|
|
const env = { ANDROID_HOME: "/opt/sdk" };
|
|
expect(resolveAndroidSdkEnv({ env, existsSync: () => true })).toBe(env);
|
|
const rootEnv = { ANDROID_SDK_ROOT: "/opt/sdk" };
|
|
expect(resolveAndroidSdkEnv({ env: rootEnv, existsSync: () => true })).toBe(rootEnv);
|
|
});
|
|
|
|
it("keeps env untouched when local.properties exists", () => {
|
|
const env = {};
|
|
const result = resolveAndroidSdkEnv({
|
|
env,
|
|
existsSync: (p: string) => p.endsWith("local.properties"),
|
|
homeDir: "/Users/dev",
|
|
platform: "darwin",
|
|
});
|
|
expect(result).toBe(env);
|
|
});
|
|
|
|
it("falls back to the Android Studio default SDK path per platform", () => {
|
|
const darwin = resolveAndroidSdkEnv({
|
|
env: {},
|
|
existsSync: (p: string) => p === macSdk,
|
|
homeDir: "/Users/dev",
|
|
platform: "darwin",
|
|
});
|
|
expect(darwin.ANDROID_HOME).toBe(macSdk);
|
|
const linux = resolveAndroidSdkEnv({
|
|
env: {},
|
|
existsSync: (p: string) => p === linuxSdk,
|
|
homeDir: "/home/dev",
|
|
platform: "linux",
|
|
});
|
|
expect(linux.ANDROID_HOME).toBe(linuxSdk);
|
|
});
|
|
|
|
it("keeps env untouched when no default SDK install exists", () => {
|
|
const env = {};
|
|
const result = resolveAndroidSdkEnv({
|
|
env,
|
|
existsSync: () => false,
|
|
homeDir: "/Users/dev",
|
|
platform: "darwin",
|
|
});
|
|
expect(result).toBe(env);
|
|
});
|
|
});
|
|
});
|