-
Notifications
You must be signed in to change notification settings - Fork 0
/
wrap_test.go
99 lines (78 loc) · 1.85 KB
/
wrap_test.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
87
88
89
90
91
92
93
94
95
96
97
98
99
package tortilla
import (
"errors"
"testing"
"github.com/stretchr/testify/suite"
)
type tortillaTestSuite struct {
suite.Suite
}
func (s *tortillaTestSuite) TestItCreatesATortillaFromAnError() {
err := errors.New("initial error")
got := New(err)
s.ErrorIs(got, err)
}
func (s *tortillaTestSuite) TestItWrapsAnError() {
err := errors.New("initial error")
t := New(err)
wrappedWith := errors.New("wrapping error")
got := t.Wrap(wrappedWith)
s.ErrorIs(got, wrappedWith)
s.EqualError(got, "wrapping error. initial error.")
}
func (s *tortillaTestSuite) TestItAddsErrorsWithoutWrapping() {
err := errors.New("initial error")
t := New(err)
second := errors.New("second")
got := t.Add(second).Add(errors.New("third"))
s.ErrorIs(got, err)
s.NotErrorIs(got, second)
s.EqualError(got, "initial error: third, second.")
}
func (s *tortillaTestSuite) TestItCreatesATortillaFromATortilla() {
lastWrap := errors.New("second")
t1 := New(errors.New("first")).Wrap(lastWrap)
got := New(t1)
s.ErrorIs(got, lastWrap)
s.EqualError(got, "second. first.")
}
func (s *tortillaTestSuite) TestItCanBeRolledOut() {
t := New(newError("first")).
Wrap(newError("second")).
Add(newError("third")).
Add(newError("fourth")).
Wrap(newError("fifth")).
Wrap(newError("sixth")).
Add(newError("seventh"))
s.EqualError(t, "sixth: seventh. fifth. second: fourth, third. first.")
got := t.RollOut()
expected := Stack{
{
"sixth": []string{"seventh"},
},
{
"fifth": []string{},
},
{
"second": []string{"fourth", "third"},
},
{
"first": []string{},
},
}
s.Equal(expected, got)
expectedPrettyPrint := `sixth:
....seventh
fifth:
second:
....fourth
....third
first:`
s.Equal(expectedPrettyPrint, got.PrettyPrint())
}
func TestTortilla(t *testing.T) {
suite.Run(t, new(tortillaTestSuite))
}
func newError(msg string) error {
return errors.New(msg)
}