forked from pressly/goose
/
check.go
86 lines (75 loc) · 1.72 KB
/
check.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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)
}