...

Source file src/cdr.dev/slog/sloggers/slogtest/assert/assert.go

Documentation: cdr.dev/slog/sloggers/slogtest/assert

     1  // Package assert is a helper package for test assertions.
     2  //
     3  // On failure, every assertion will fatal the test.
     4  //
     5  // The name parameter is available in each assertion for easier debugging.
     6  package assert // import "cdr.dev/slog/sloggers/slogtest/assert"
     7  
     8  import (
     9  	"strings"
    10  	"testing"
    11  
    12  	"github.com/google/go-cmp/cmp"
    13  
    14  	"cdr.dev/slog"
    15  	"cdr.dev/slog/internal/assert"
    16  	"cdr.dev/slog/sloggers/slogtest"
    17  )
    18  
    19  // Equal asserts exp == act.
    20  //
    21  // If they are not equal, it will fatal the test with a diff of the
    22  // two objects.
    23  //
    24  // Errors will be compared with errors.Is.
    25  func Equal(t testing.TB, name string, exp, act interface{}, opts ...cmp.Option) {
    26  	slog.Helper()
    27  
    28  	if diff := assert.Diff(exp, act, opts...); diff != "" {
    29  		slogtest.Fatal(t, "unexpected value",
    30  			slog.F("name", name),
    31  			slog.F("diff", diff),
    32  		)
    33  	}
    34  }
    35  
    36  // Success asserts err == nil.
    37  func Success(t testing.TB, name string, err error) {
    38  	slog.Helper()
    39  	if err != nil {
    40  		slogtest.Fatal(t, "unexpected error",
    41  			slog.F("name", name),
    42  			slog.Error(err),
    43  		)
    44  	}
    45  }
    46  
    47  // True asserts act == true.
    48  func True(t testing.TB, name string, act bool) {
    49  	slog.Helper()
    50  	Equal(t, name, true, act)
    51  }
    52  
    53  // False asserts act == false.
    54  func False(t testing.TB, name string, act bool) {
    55  	slog.Helper()
    56  	Equal(t, name, false, act)
    57  }
    58  
    59  // Error asserts err != nil.
    60  func Error(t testing.TB, name string, err error) {
    61  	slog.Helper()
    62  	if err == nil {
    63  		slogtest.Fatal(t, "expected error",
    64  			slog.F("name", name),
    65  		)
    66  	}
    67  }
    68  
    69  // ErrorContains asserts err != nil and err.Error() contains sub.
    70  //
    71  // The match will be case insensitive.
    72  func ErrorContains(t testing.TB, name string, err error, sub string) {
    73  	slog.Helper()
    74  
    75  	Error(t, name, err)
    76  
    77  	errs := err.Error()
    78  	if !stringContainsFold(errs, sub) {
    79  		slogtest.Fatal(t, "unexpected error string",
    80  			slog.F("name", name),
    81  			slog.F("error_string", errs),
    82  			slog.F("expected_contains", sub),
    83  		)
    84  	}
    85  }
    86  
    87  func stringContainsFold(errs, sub string) bool {
    88  	errs = strings.ToLower(errs)
    89  	sub = strings.ToLower(sub)
    90  
    91  	return strings.Contains(errs, sub)
    92  
    93  }
    94  

View as plain text