129 lines
3.2 KiB
Go
129 lines
3.2 KiB
Go
package cmd
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"path/filepath"
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
|
|
"zsvo/pkg/debian"
|
|
)
|
|
|
|
func TestIsInstallFileTarget_File(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tmpDir := t.TempDir()
|
|
pkgPath := filepath.Join(tmpDir, "demo.pkg.tar.zst")
|
|
if err := os.WriteFile(pkgPath, []byte("x"), 0o644); err != nil {
|
|
t.Fatalf("failed to write temp package: %v", err)
|
|
}
|
|
|
|
isFile, err := isInstallFileTarget(pkgPath)
|
|
if err != nil {
|
|
t.Fatalf("isInstallFileTarget() error = %v", err)
|
|
}
|
|
if !isFile {
|
|
t.Fatalf("expected file target")
|
|
}
|
|
}
|
|
|
|
func TestIsInstallFileTarget_Name(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
isFile, err := isInstallFileTarget("neofetch")
|
|
if err != nil {
|
|
t.Fatalf("isInstallFileTarget() error = %v", err)
|
|
}
|
|
if isFile {
|
|
t.Fatalf("expected package-name target")
|
|
}
|
|
}
|
|
|
|
func TestIsInstallFileTarget_MissingPath(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
_, err := isInstallFileTarget("./missing.pkg.tar.zst")
|
|
if err == nil {
|
|
t.Fatalf("expected error for missing file path")
|
|
}
|
|
}
|
|
|
|
func TestAutoRecipeFromDebian(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
r := autoRecipeFromDebian(&debian.SourceInfo{
|
|
RequestedPackage: "neofetch",
|
|
SourcePackage: "neofetch",
|
|
DSCURL: "https://deb.debian.org/debian/pool/main/n/neofetch/neofetch_7.1.0-4.dsc",
|
|
DSCSHA256: "deadbeef",
|
|
DebianVersion: "7.1.0-4",
|
|
UpstreamVersion: "7.1.0",
|
|
})
|
|
|
|
if r.Name != "neofetch" || r.Version != "7.1.0" {
|
|
t.Fatalf("unexpected recipe identity: %s %s", r.Name, r.Version)
|
|
}
|
|
if r.Source.DebianDSC == "" {
|
|
t.Fatalf("expected debian dsc source")
|
|
}
|
|
if len(r.Build) == 0 || len(r.Install) == 0 {
|
|
t.Fatalf("expected auto recipe build/install commands")
|
|
}
|
|
if !strings.Contains(r.Build[0], "autogen.sh --no-check") {
|
|
t.Fatalf("expected auto recipe to support autogen fallback, got: %s", r.Build[0])
|
|
}
|
|
}
|
|
|
|
func TestBuildFailureHintForLua(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
msg := buildFailureHint("neovim", errors.New("Failed to find a Lua 5.1-compatible interpreter"))
|
|
if !strings.Contains(strings.ToLower(msg), "lua") {
|
|
t.Fatalf("expected lua hint, got: %q", msg)
|
|
}
|
|
}
|
|
|
|
func TestInferMissingBuildDeps_FromCommandNotFound(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
err := errors.New("sh: cmake: command not found\n/bin/sh: 1: pkg-config: not found")
|
|
got := inferMissingBuildDeps(err)
|
|
want := []string{"cmake", "pkgconf"}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("inferMissingBuildDeps() mismatch:\nwant: %#v\ngot: %#v", want, got)
|
|
}
|
|
}
|
|
|
|
func TestInferMissingBuildDeps_FromLuaError(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
err := errors.New("CMake Error: Failed to find a Lua 5.1-compatible interpreter")
|
|
got := inferMissingBuildDeps(err)
|
|
want := []string{"lua5.1"}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("inferMissingBuildDeps() mismatch:\nwant: %#v\ngot: %#v", want, got)
|
|
}
|
|
}
|
|
|
|
func TestMapToolToSourcePackage(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
cases := map[string]string{
|
|
"pkg-config": "pkgconf",
|
|
"ninja": "ninja-build",
|
|
"python": "python3",
|
|
"lua": "lua5.1",
|
|
"cmake": "cmake",
|
|
"bash": "",
|
|
"1": "",
|
|
"": "",
|
|
}
|
|
|
|
for input, want := range cases {
|
|
if got := mapToolToSourcePackage(input); got != want {
|
|
t.Fatalf("mapToolToSourcePackage(%q): want %q, got %q", input, want, got)
|
|
}
|
|
}
|
|
}
|