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  }