package main
import (
"path/filepath"
"runtime"
"strings"
"testing"
)
func TestParseInstallArgs(t *testing.T) {
packageDir := t.TempDir()
installDir := t.TempDir()
args, err := newArgumentParser([]string{"install", packageDir, installDir}).parse()
if err != nil {
t.Fatalf("parse install arguments: %v", err)
}
if !args.install {
t.Fatal("install command was not recorded")
}
if !args.release {
t.Fatal("install command did not select release mode")
}
if args.outputType != OutputExecutable {
t.Fatalf("output type: got %v, want executable", args.outputType)
}
wantName := filepath.Base(packageDir)
if runtime.GOOS == "windows" {
wantName += ".exe"
}
wantOutput := filepath.Join(installDir, wantName)
if args.output != wantOutput {
t.Fatalf("output: got %q, want %q", args.output, wantOutput)
}
}
func TestParseInstallArgsRequiresDestination(t *testing.T) {
_, err := newArgumentParser([]string{"install", t.TempDir()}).parse()
if err == nil || !strings.Contains(err.Error(), "install directory") {
t.Fatalf("error: got %v, want missing install directory", err)
}
}
func TestParseInstallArgsRequiresDirectoryDestination(t *testing.T) {
packageDir := t.TempDir()
destination := filepath.Join(t.TempDir(), "missing")
_, err := newArgumentParser([]string{"install", packageDir, destination}).parse()
if err == nil || !strings.Contains(err.Error(), "install path is not a directory") {
t.Fatalf("error: got %v, want invalid install directory", err)
}
}
func TestParseInstallArgsRejectsOutputOverride(t *testing.T) {
_, err := newArgumentParser([]string{
"install", "-o", "custom", t.TempDir(), t.TempDir(),
}).parse()
if err == nil || !strings.Contains(err.Error(), "-o cannot be used with install") {
t.Fatalf("error: got %v, want output override rejection", err)
}
}