in internal/testutil/golden.go [28:71]
func CompareWithFixture(t *testing.T, output interface{}, opts ...option) {
t.Helper()
options := &options{
Extension: ".yaml",
}
for _, opt := range opts {
opt(options)
}
var serializedOutput []byte
switch v := output.(type) {
case []byte:
serializedOutput = v
case string:
serializedOutput = []byte(v)
default:
serialized, err := yaml.Marshal(v)
if err != nil {
t.Fatalf("failed to yaml marshal output of type %T: %v", output, err)
}
serializedOutput = serialized
}
golden, err := golden(t, options)
if err != nil {
t.Fatalf("failed to get absolute path to testdata file: %v", err)
}
if os.Getenv("UPDATE") != "" {
if err := os.MkdirAll(filepath.Dir(golden), 0755); err != nil {
t.Fatalf("failed to create fixture directory: %v", err)
}
if err := os.WriteFile(golden, serializedOutput, 0644); err != nil {
t.Fatalf("failed to write updated fixture: %v", err)
}
}
expected, err := os.ReadFile(golden)
if err != nil {
t.Fatalf("failed to read testdata file: %v", err)
}
if diff := cmp.Diff(string(expected), string(serializedOutput)); diff != "" {
t.Errorf("got diff between expected and actual result:\nfile: %s\ndiff:\n%s\n\nIf this is expected, re-run the test with `UPDATE=true go test ./...` to update the fixtures.", golden, diff)
}
}