1
2 package assert
3
4 import (
5 "io"
6 "os"
7 "path/filepath"
8 "testing"
9
10 "go.uber.org/multierr"
11
12 "oss.terrastruct.com/util-go/diff"
13 "oss.terrastruct.com/util-go/xjson"
14 )
15
16 func Success(tb testing.TB, err error) {
17 tb.Helper()
18 if err != nil {
19 tb.Fatalf("unexpected error: %v", err)
20 }
21 }
22
23 func Error(tb testing.TB, err error) {
24 tb.Helper()
25 if err == nil {
26 tb.Fatal("expected error")
27 }
28 }
29
30 func ErrorString(tb testing.TB, err error, msg string) {
31 tb.Helper()
32 if err == nil {
33 tb.Fatalf("expected error containing %q", msg)
34 }
35 String(tb, msg, err.Error())
36 }
37
38 func StringJSON(tb testing.TB, exp string, got interface{}) {
39 tb.Helper()
40 String(tb, exp, string(xjson.Marshal(got)))
41 }
42
43 func String(tb testing.TB, exp, got string) {
44 tb.Helper()
45 diff, err := diff.Strings(exp, got)
46 Success(tb, err)
47 if diff != "" {
48 tb.Fatalf("\n%s", diff)
49 }
50 }
51
52 func JSON(tb testing.TB, exp, got interface{}) {
53 tb.Helper()
54 diff, err := diff.JSON(exp, got)
55 Success(tb, err)
56 if diff != "" {
57 tb.Fatalf("\n%s", diff)
58 }
59 }
60
61 func Runes(tb testing.TB, exp, got string) {
62 tb.Helper()
63 err := diff.Runes(exp, got)
64 Success(tb, err)
65 }
66
67 func TestdataJSON(tb testing.TB, got interface{}) {
68 tb.Helper()
69 err := diff.TestdataJSON(filepath.Join("testdata", tb.Name()), got)
70 Success(tb, err)
71 }
72
73 func Testdata(tb testing.TB, ext string, got []byte) {
74 tb.Helper()
75 err := diff.Testdata(filepath.Join("testdata", tb.Name()), ext, got)
76 Success(tb, err)
77 }
78
79 func TestdataDir(tb testing.TB, dir string) {
80 tb.Helper()
81 err := diff.TestdataDir(filepath.Join("testdata", tb.Name()), dir)
82 if err != nil {
83 for _, err = range multierr.Errors(err) {
84 tb.Error(err)
85 }
86 }
87 if tb.Failed() {
88 tb.FailNow()
89 }
90 }
91
92 func Close(tb testing.TB, c io.Closer) {
93 tb.Helper()
94 err := c.Close()
95 if err != nil {
96 tb.Fatalf("failed to close %T: %v", c, err)
97 }
98 }
99
100 func Equal(tb testing.TB, exp, got interface{}) {
101 tb.Helper()
102 if exp == got {
103 return
104 }
105 exps, ok := exp.(string)
106 if ok {
107 gots, ok := got.(string)
108 if ok {
109 String(tb, exps, gots)
110 return
111 }
112 }
113 tb.Fatalf("expected %#v but got %#v", exp, got)
114 }
115
116 func NotEqual(tb testing.TB, v1, v2 interface{}) {
117 tb.Helper()
118 if v1 != v2 {
119 return
120 }
121 tb.Fatalf("did not expect %#v", v2)
122 }
123
124 func True(tb testing.TB, v bool) {
125 tb.Helper()
126 Equal(tb, true, v)
127 }
128
129 func False(tb testing.TB, v bool) {
130 tb.Helper()
131 Equal(tb, false, v)
132 }
133
134 func TempDir(tb testing.TB) (dir string, cleanup func()) {
135 tb.Helper()
136
137 dir, err := os.MkdirTemp("", "util-go.assert.TempDir")
138 Success(tb, err)
139 return dir, func() {
140 tb.Helper()
141 err = os.RemoveAll(dir)
142 Success(tb, err)
143 }
144 }
145
146 func WriteFile(tb testing.TB, fp string, data []byte, perms os.FileMode) {
147 tb.Helper()
148
149 err := os.WriteFile(fp, data, perms)
150 Success(tb, err)
151 }
152
153 func ReadFile(tb testing.TB, fp string) (data []byte) {
154 tb.Helper()
155
156 data, err := os.ReadFile(fp)
157 Success(tb, err)
158 return data
159 }
160
161 func Remove(tb testing.TB, fp string) {
162 tb.Helper()
163
164 err := os.Remove(fp)
165 Success(tb, err)
166 }
167
168 func RemoveAll(tb testing.TB, fp string) {
169 tb.Helper()
170
171 err := os.RemoveAll(fp)
172 Success(tb, err)
173 }
174
View as plain text