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  }