golang.org/x/build@v0.0.0-20240506185731-218518f32b70/internal/releasetargets/releasetargets_test.go (about) 1 // Copyright 2022 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package releasetargets 6 7 import ( 8 "bytes" 9 "flag" 10 "fmt" 11 "io" 12 "os" 13 "sort" 14 "strings" 15 "testing" 16 ) 17 18 var update = flag.Bool("update", false, "controls whether to update releases.txt") 19 20 func TestReleaseTargets(t *testing.T) { 21 out := &bytes.Buffer{} 22 for _, release := range sortedReleases() { 23 printRelease(out, release, TargetsForGo1Point(release)) 24 } 25 if *update { 26 if err := os.WriteFile("releases.txt", out.Bytes(), 0); err != nil { 27 t.Fatalf("updating golden: %v", err) 28 } 29 return 30 } 31 32 golden, err := os.ReadFile("releases.txt") 33 if err != nil { 34 t.Fatalf("reading golden: %v", err) 35 } 36 if !bytes.Equal(golden, out.Bytes()) { 37 t.Error("Goldens need updating. Rerun with -update.") 38 } 39 } 40 41 func printRelease(w io.Writer, release int, targets ReleaseTargets) { 42 fmt.Fprintf(w, "Targets for release 1.%v\n%s\n", release, strings.Repeat("=", 80)) 43 var targetNames []string 44 for name := range targets { 45 targetNames = append(targetNames, name) 46 } 47 sort.Strings(targetNames) 48 for _, name := range targetNames { 49 const builder = "(cross-compiled via distpack)" 50 target := targets[name] 51 var flags []string 52 if !target.SecondClass { 53 flags = append(flags, "First class port") 54 } 55 if target.MinMacOSVersion != "" { 56 flags = append(flags, "Minimum macOS version is "+target.MinMacOSVersion) 57 } 58 fmt.Fprintf(w, "%-15v %-10v %-10v %v\n", name, target.GOOS, target.GOARCH, builder) 59 if len(flags) != 0 { 60 fmt.Fprintf(w, "\t%v\n", strings.Join(flags, ", ")) 61 } 62 if len(target.ExtraEnv) != 0 { 63 fmt.Fprintf(w, "\tExtra env: %q\n", target.ExtraEnv) 64 } 65 66 fmt.Fprintf(w, "\n") 67 } 68 fmt.Fprintf(w, "\n\n") 69 }