Skip to content

Commit 023053c

Browse files
committed
[e] fix creation of error from empty error
Change-Id: Idccb59a1364ed49f36948a0b2c3f37519e02d6aa
1 parent 9467550 commit 023053c

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

e/err.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ func NewFrom(reason string, wrapped error, f ...fields.Field) *Err {
3434
// will not return origin error. Passing nil to this function will result with
3535
// empty error.
3636
func From(origin error, f ...fields.Field) *Err {
37+
if origin == nil {
38+
origin = errors.New("error(nil)") //nolint:err113
39+
}
40+
3741
return &Err{
3842
errs: []error{origin},
3943
fields: f,
@@ -46,6 +50,10 @@ func From(origin error, f ...fields.Field) *Err {
4650
//
4751
// e.New("e1").Wrap(errors.New("e2")) // e1: e2
4852
func (e *Err) Wrap(err error, f ...fields.Field) *Err {
53+
if err == nil {
54+
err = errors.New("error(nil)") //nolint:err113
55+
}
56+
4957
return &Err{
5058
errs: []error{e, err},
5159
fields: f,

e/err_test.go

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ func TestErr(t *testing.T) {
7171
in: nil,
7272
expected: "(*e.Err)(nil)",
7373
},
74+
{
75+
name: "nil wrapping fields",
76+
in: (*e.Err)(nil).WithField("foo", "bar"),
77+
expected: "(*e.Err)(nil) (foo=bar)",
78+
},
7479
{
7580
name: "empty",
7681
in: &e.Err{},
@@ -107,6 +112,16 @@ func TestErr(t *testing.T) {
107112
in: e.From(errors.New("error"), fields.F("key", "value")), //nolint:err113
108113
expected: "error (key=value)",
109114
},
115+
{
116+
name: "from nil error",
117+
in: e.From(nil),
118+
expected: "error(nil)",
119+
},
120+
{
121+
name: "from nil with fields",
122+
in: e.From(nil, fields.F("key", "value")),
123+
expected: "error(nil) (key=value)",
124+
},
110125
{
111126
name: "empty with fields",
112127
in: (&e.Err{}).WithField("foo", "bar"),
@@ -127,9 +142,11 @@ func TestErr(t *testing.T) {
127142

128143
assert.NotSame(t, e1, e1.Wrap(e2))
129144
assert.NotSame(t, e2, e1.Wrap(e2))
130-
assert.NoError (t, errors.Unwrap(e1.Wrap(e2)), "errors unwrap returns nil")
145+
assert.NoError(t, errors.Unwrap(e1.Wrap(e2)), "errors unwrap returns nil")
131146
assert.Equal(t, "e1 (f1=v1): e2 (f2=v2)", e1.Wrap(e2).Error())
132147
assert.Equal(t, "e1 (f1=v1) (f3=v3): e2 (f2=v2)", e1.Wrap(e2, fields.F("f3", "v3")).Error())
148+
149+
assert.Equal(t, "e1 (f1=v1): error(nil)", e1.Wrap(nil).Error())
133150
})
134151

135152
t.Run(".Is()", func(t *testing.T) {

0 commit comments

Comments
 (0)