package artifact import ( "reflect" "testing" ) func TestNormalizeTargetsPreservesOrderAndFirstOccurrence(t *testing.T) { targets := []Target{ {OS: "linux", Arch: "amd64"}, {OS: "windows", Arch: "arm64"}, {OS: "linux", Arch: "amd64"}, } want := []Target{{OS: "linux", Arch: "amd64"}, {OS: "windows", Arch: "arm64"}} if got := NormalizeTargets(targets); !reflect.DeepEqual(got, want) { t.Fatalf("NormalizeTargets() = %#v, want %#v", got, want) } } func TestExpectedBuildUsesSharedNamesInTargetOrder(t *testing.T) { targets := []Target{{OS: "windows", Arch: "arm64"}, {OS: "linux", Arch: "amd64"}} want := []Declaration{ {Target: targets[0], Filename: "app-v1.2.3-windows-arm64.exe"}, {Target: targets[1], Filename: "app-v1.2.3-linux-amd64"}, } if got := ExpectedBuild("app", "v1.2.3", targets); !reflect.DeepEqual(got, want) { t.Fatalf("ExpectedBuild() = %#v, want %#v", got, want) } } func TestValidComponentPreservesBuildAndReceiptRules(t *testing.T) { for _, value := range []string{"", "path/name", `path\name`, "line\nbreak", "line\rbreak"} { if ValidComponent(value) { t.Errorf("ValidComponent(%q) = true, want false", value) } } for _, value := range []string{"app", "..", "nul\x00byte"} { if !ValidComponent(value) { t.Errorf("ValidComponent(%q) = false, want true", value) } } }