Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion errs.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,12 +141,18 @@ func (e *Error) Error() string {
if e == nil {
return nilAngleString
}
errMsg := e.Err.Error()
var errMsg string
if e.Err != nil {
errMsg = e.Err.Error()
}
var causeMsg string
if e.Cause != nil {
causeMsg = e.Cause.Error()
}
if len(causeMsg) == 0 {
if len(errMsg) == 0 {
return nilAngleString
}
return errMsg
}
if len(errMsg) == 0 {
Expand Down
20 changes: 20 additions & 0 deletions errs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -447,6 +447,26 @@ func TestUnwraps(t *testing.T) {
}
}

func TestErrorWithNilErr(t *testing.T) {
testCases := []struct {
name string
err *Error
want string
}{
{name: "empty", err: &Error{}, want: "<nil>"},
{name: "cause only", err: &Error{Cause: os.ErrInvalid}, want: "invalid argument"},
{name: "err and cause", err: &Error{Err: os.ErrNotExist, Cause: os.ErrInvalid}, want: "file does not exist: invalid argument"},
}

for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
if got := tc.err.Error(); got != tc.want {
t.Errorf("Error() = %q, want %q", got, tc.want)
}
})
}
}

/* Copyright 2019-2023 Spiegel
*
* Licensed under the Apache License, Version 2.0 (the "License");
Expand Down
4 changes: 3 additions & 1 deletion zapobject/zapobject.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,9 @@ func (e ErrObject) MarshalLogObject(enc zapcore.ObjectEncoder) error {
sort.Strings(keys)
enc.OpenNamespace("context")
for _, k := range keys {
_ = enc.AddReflected(k, ee.Context[k])
if err := enc.AddReflected(k, ee.Context[k]); err != nil {
return err
}
}
}
} else {
Expand Down
26 changes: 26 additions & 0 deletions zapobject/zapobject_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package zapobject

import (
"errors"
"testing"

"github.com/goark/errs"
"go.uber.org/zap/zapcore"
)

type addReflectedErrEncoder struct {
*zapcore.MapObjectEncoder
}

func (e *addReflectedErrEncoder) AddReflected(_ string, _ interface{}) error {
return errors.New("add reflected failed")
}

func TestMarshalLogObject_AddReflectedError(t *testing.T) {
err := errs.New("wrapped", errs.WithContext("bad", func() {}))
enc := &addReflectedErrEncoder{MapObjectEncoder: zapcore.NewMapObjectEncoder()}

if got := New(err).MarshalLogObject(enc); got == nil {
t.Fatal("MarshalLogObject() = nil, want non-nil error")
}
}
Loading