github.com/goreleaser/goreleaser@v1.25.1/internal/golden/golden.go (about)

     1  // Package golden asserts golden files contents.
     2  package golden
     3  
     4  import (
     5  	"flag"
     6  	"os"
     7  	"path/filepath"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  var update = flag.Bool("update", false, "update .golden files")
    14  
    15  const golden = ".golden"
    16  
    17  func RequireEqual(tb testing.TB, out []byte) {
    18  	tb.Helper()
    19  	RequireEqualExt(tb, out, "")
    20  }
    21  
    22  func RequireEqualExt(tb testing.TB, out []byte, ext string) {
    23  	tb.Helper()
    24  	doRequireEqual(tb, out, ext, golden, false)
    25  }
    26  
    27  func RequireEqualExtSubfolder(tb testing.TB, out []byte, ext string) {
    28  	tb.Helper()
    29  	doRequireEqual(tb, out, ext, golden, true)
    30  }
    31  
    32  func RequireEqualTxt(tb testing.TB, out []byte) {
    33  	tb.Helper()
    34  	doRequireEqual(tb, out, ".txt", golden, false)
    35  }
    36  
    37  func RequireEqualJSON(tb testing.TB, out []byte) {
    38  	tb.Helper()
    39  	doRequireEqual(tb, out, ".json", golden, false)
    40  }
    41  
    42  func RequireEqualRb(tb testing.TB, out []byte) {
    43  	tb.Helper()
    44  	doRequireEqual(tb, out, ".rb", golden, false)
    45  }
    46  
    47  func RequireEqualYaml(tb testing.TB, out []byte) {
    48  	tb.Helper()
    49  	doRequireEqual(tb, out, ".yaml", "", false)
    50  }
    51  
    52  func RequireReadFile(tb testing.TB, path string) []byte {
    53  	tb.Helper()
    54  	bts, err := os.ReadFile(path)
    55  	require.NoError(tb, err)
    56  	return bts
    57  }
    58  
    59  func doRequireEqual(tb testing.TB, out []byte, ext, suffix string, folder bool) {
    60  	tb.Helper()
    61  
    62  	golden := filepath.Join("testdata", tb.Name()+ext+suffix)
    63  	if folder {
    64  		golden = filepath.Join("testdata", tb.Name(), filepath.Base(tb.Name())+ext+suffix)
    65  	}
    66  	if *update {
    67  		require.NoError(tb, os.MkdirAll(filepath.Dir(golden), 0o755))
    68  		require.NoError(tb, os.WriteFile(golden, out, 0o655))
    69  	}
    70  
    71  	gbts, err := os.ReadFile(golden)
    72  	require.NoError(tb, err)
    73  
    74  	require.Equal(tb, string(gbts), string(out))
    75  }