goose/internal/check/check.go

95 lines
1.9 KiB
Go

package check
import (
"errors"
"fmt"
"reflect"
"strings"
"testing"
)
func NoError(t *testing.T, err error) {
t.Helper()
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
}
func HasError(t *testing.T, err error) {
t.Helper()
if err == nil {
t.Fatal("expecting an error: got nil")
}
}
func IsError(t *testing.T, err, target error) {
t.Helper()
if !errors.Is(err, target) {
t.Fatalf("expecting specific error:\ngot: %v\nwant: %v", err, target)
}
}
func Number(t *testing.T, got, want interface{}) {
t.Helper()
gotNumber, err := reflectToInt64(got)
if err != nil {
t.Fatal(err)
}
wantNumber, err := reflectToInt64(want)
if err != nil {
t.Fatal(err)
}
if gotNumber != wantNumber {
t.Fatalf("unexpected number value: got:%d want:%d ", gotNumber, wantNumber)
}
}
func Equal(t *testing.T, got, want interface{}) {
t.Helper()
if !reflect.DeepEqual(got, want) {
t.Fatalf("failed deep equal:\ngot:\t%v\nwant:\t%v\v", got, want)
}
}
func NumberNotZero(t *testing.T, got interface{}) {
t.Helper()
gotNumber, err := reflectToInt64(got)
if err != nil {
t.Fatal(err)
}
if gotNumber == 0 {
t.Fatalf("unexpected number value: got:%d want non-zero ", gotNumber)
}
}
func Bool(t *testing.T, got, want bool) {
t.Helper()
if got != want {
t.Fatalf("unexpected boolean value: got:%t want:%t", got, want)
}
}
func Contains(t *testing.T, got, want string) {
t.Helper()
if !strings.Contains(got, want) {
t.Errorf("failed to find substring %q in string value %q", got, want)
}
}
func reflectToInt64(v interface{}) (int64, error) {
switch typ := v.(type) {
case int, int8, int16, int32, int64:
return reflect.ValueOf(typ).Int(), nil
}
return 0, fmt.Errorf("invalid number: must be int64 type: got:%T", v)
}
func reflectToStr(v interface{}) (string, error) {
switch typ := v.(type) {
case string:
return reflect.ValueOf(typ).String(), nil
}
return "", fmt.Errorf("invalid string: got:%T", v)
}