package buildapk import ( "os" "path/filepath" "slices" "testing" ) func TestDefaultConfigGogioArgs(t *testing.T) { t.Parallel() cfg := DefaultConfig() want := []string{ "-target", "android", "-buildmode", "exe", "-appid", DefaultAppID, "-ldflags", DefaultLdflags, "-o", DefaultAPKOut, "-version", DefaultVersion, "-minsdk", DefaultMinSDK, "-targetsdk", DefaultTargetSDK, "-icon", DefaultIconPath, "./cmd/keepassgo", } if got := cfg.GogioArgs(); !slices.Equal(got, want) { t.Fatalf("GogioArgs() = %v, want %v", got, want) } } func TestValidateAcceptsCompleteAndroidToolchainLayout(t *testing.T) { t.Parallel() root := t.TempDir() sdkRoot := filepath.Join(root, "sdk") ndkRoot := filepath.Join(root, "ndk") javaHome := filepath.Join(root, "java") mkdirAll(t, filepath.Join(javaHome, "bin")) mkdirAll(t, filepath.Join(sdkRoot, "cmdline-tools", "latest", "bin")) mkdirAll(t, filepath.Join(sdkRoot, "platforms", "android-"+DefaultTargetSDK)) mkdirAll(t, filepath.Join(sdkRoot, "build-tools")) mkdirAll(t, ndkRoot) makeExecutable(t, filepath.Join(javaHome, "bin", "java")) makeExecutable(t, filepath.Join(sdkRoot, "cmdline-tools", "latest", "bin", "sdkmanager")) cfg := Config{ SDKRoot: sdkRoot, NDKRoot: ndkRoot, JavaHome: javaHome, AppID: DefaultAppID, APKOut: DefaultAPKOut, Version: DefaultVersion, Ldflags: DefaultLdflags, MinSDK: DefaultMinSDK, TargetSDK: DefaultTargetSDK, IconPath: filepath.Join(root, "icon.png"), } if err := os.WriteFile(cfg.IconPath, []byte("png"), 0o644); err != nil { t.Fatalf("WriteFile(%q) error = %v", cfg.IconPath, err) } if err := cfg.Validate(); err != nil { t.Fatalf("Validate() error = %v, want nil", err) } } func TestValidateRejectsMissingPrerequisites(t *testing.T) { t.Parallel() root := t.TempDir() cfg := Config{ SDKRoot: filepath.Join(root, "missing-sdk"), NDKRoot: filepath.Join(root, "missing-ndk"), JavaHome: filepath.Join(root, "missing-java"), AppID: DefaultAppID, APKOut: DefaultAPKOut, Version: DefaultVersion, Ldflags: DefaultLdflags, MinSDK: DefaultMinSDK, TargetSDK: DefaultTargetSDK, } if err := cfg.Validate(); err == nil { t.Fatal("Validate() error = nil, want missing prerequisite error") } } func mkdirAll(t *testing.T, path string) { t.Helper() if err := os.MkdirAll(path, 0o755); err != nil { t.Fatalf("MkdirAll(%q) error = %v", path, err) } } func makeExecutable(t *testing.T, path string) { t.Helper() if err := os.WriteFile(path, []byte("#!/bin/sh\n"), 0o755); err != nil { t.Fatalf("WriteFile(%q) error = %v", path, err) } }