github.com/oinume/lekcije@v0.0.0-20231017100347-5b4c5eb6ab24/backend/internal/assertion/assertion.go (about) 1 package assertion 2 3 import ( 4 "testing" 5 6 "github.com/google/go-cmp/cmp" 7 "google.golang.org/protobuf/proto" 8 ) 9 10 var ( 11 // Default options for cmp.Diff when no options specified. 12 defaultCmpOptions = []cmp.Option{ //nolint 13 // compare if two protocol buffer messages are equal 14 cmp.Comparer(proto.Equal), 15 } 16 ) 17 18 // AssertEqual ensures that got and want are equal by cmp.Diff. 19 // If they are not equal, it reports failure by t.Errorf with given `message`. 20 func AssertEqual(t *testing.T, want, got interface{}, message string, options ...cmp.Option) { 21 t.Helper() 22 23 if len(options) == 0 { 24 options = append(options, defaultCmpOptions...) 25 } 26 27 if diff := cmp.Diff(want, got, options...); diff != "" { 28 if message == "" { 29 t.Errorf("AssertEqual failed (-want +got):\n%s", diff) 30 } else { 31 t.Errorf("AssertEqual failed: %q: (-want +got):\n%s", message, diff) 32 } 33 } 34 } 35 36 // RequireEqual ensures that got and want are equal by cmp.Diff. 37 // If they are not equal, it reports failure by t.Fatalf with given `message`. 38 func RequireEqual(t *testing.T, want, got interface{}, message string, options ...cmp.Option) { 39 t.Helper() 40 41 if len(options) == 0 { 42 options = append(options, defaultCmpOptions...) 43 } 44 45 if diff := cmp.Diff(want, got, options...); diff != "" { 46 if message == "" { 47 t.Fatalf("RequireEqual failed (-want +got):\n%s", diff) 48 } else { 49 t.Fatalf("RequireEqual failed: %q: (-want +got):\n%s", message, diff) 50 } 51 } 52 }