...
1 package xdefer_test
2
3 import (
4 "fmt"
5 "runtime"
6 "testing"
7
8 "golang.org/x/xerrors"
9
10 "oss.terrastruct.com/util-go/assert"
11 "oss.terrastruct.com/util-go/xdefer"
12 )
13
14 func TestErrorf(t *testing.T) {
15 t.Parallel()
16
17 err := func() (err error) {
18 defer xdefer.Errorf(&err, "second wrap %#v", []int{99, 3})
19
20 err = xerrors.New("ola amigo")
21 if err != nil {
22
23 return xerrors.Errorf("first wrap: %w", err)
24 }
25
26 return nil
27 }()
28
29 _, fp, _, ok := runtime.Caller(0)
30 if !ok {
31 t.Fatal("runtime.Caller failed")
32 }
33 exp := fmt.Sprintf(`second wrap []int{99, 3}:
34 - first wrap:
35 oss.terrastruct.com/util-go/xdefer_test.TestErrorf.func1
36 %v:23
37 - ola amigo:
38 oss.terrastruct.com/util-go/xdefer_test.TestErrorf.func1
39 %[1]v:20`,
40 fp,
41 )
42
43 got := fmt.Sprintf("%+v", err)
44 assert.String(t, exp, got)
45 }
46
47 func TestEmptyErrorf(t *testing.T) {
48 t.Parallel()
49
50 err := func() (err error) {
51 defer xdefer.Errorf(&err, "")
52
53 err = xerrors.New("ola amigo")
54 if err != nil {
55 return err
56 }
57
58 return nil
59 }()
60
61 _, fp, _, ok := runtime.Caller(0)
62 if !ok {
63 t.Fatal("runtime.Caller failed")
64 }
65 exp := fmt.Sprintf(`oss.terrastruct.com/util-go/xdefer_test.TestEmptyErrorf.func1
66 %v:55
67 - ola amigo:
68 oss.terrastruct.com/util-go/xdefer_test.TestEmptyErrorf.func1
69 %[1]v:53`,
70 fp,
71 )
72
73 got := fmt.Sprintf("%+v", err)
74 assert.String(t, exp, got)
75
76 exp = err.Error()
77 got = "oss.terrastruct.com/util-go/xdefer_test.TestEmptyErrorf.func1: ola amigo"
78 assert.String(t, exp, got)
79 }
80
View as plain text