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 }