package errx import ( "errors" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" "testing" ) type DetailsSuite struct { suite.Suite } func (suite *DetailsSuite) TestUnwrap() { err := errors.New("test") tests := []struct { err error want error }{ { err: &detailedError{}, want: nil, }, { err: WithDetails(err), want: err, }, } for _, test := range tests { suite.Run("", func() { assert.Equal(suite.T(), test.want, errors.Unwrap(test.err)) }) } } func (suite *DetailsSuite) TestIs() { errSame := errors.New("test same") errWrong := errors.New("test wrong") tests := []struct { err error want bool }{ { err: WithDetails(errSame), want: true, }, { err: WithDetails(errWrong), want: false, }, } for _, test := range tests { suite.Run("", func() { assert.Equal(suite.T(), test.want, errors.Is(test.err, errSame)) }) } } func (suite *DetailsSuite) TestDetails() { err := errors.New("test") tests := []struct { err error want []any }{ { err: WithDetails(err), want: nil, }, { err: WithDetails(err, 1, 2, 3), want: []any{1, 2, 3}, }, { err: WithDetails(WithDetails(err, 4), 5, 6), want: []any{4, 5, 6}, }, } for _, test := range tests { suite.Run("", func() { assert.Equal(suite.T(), test.want, Details(test.err)) }) } } func (suite *DetailsSuite) TestLookupDetails() { err := WithDetails(errors.New("test"), true, 2, "3") assert.Equal(suite.T(), true, LookupDetails[bool](err)) assert.Equal(suite.T(), 2, LookupDetails[int](err)) assert.Equal(suite.T(), "3", LookupDetails[string](err)) } func TestDetails(t *testing.T) { suite.Run(t, new(DetailsSuite)) }