func (*functionSuite) TestWrap(c *gc.C) { first := errors.New("first") //err wrapFirst detailed := errors.New("detailed") err := errors.Wrap(first, detailed) //err wrapTest c.Assert(err.Error(), gc.Equals, "detailed") c.Assert(errors.Cause(err), gc.Equals, detailed) c.Assert(errors.Details(err), jc.Contains, tagToLocation["wrapFirst"].String()) c.Assert(errors.Details(err), jc.Contains, tagToLocation["wrapTest"].String()) }
func (*functionSuite) TestWrapOfNil(c *gc.C) { detailed := errors.New("detailed") err := errors.Wrap(nil, detailed) //err nilWrapTest c.Assert(err.Error(), gc.Equals, "detailed") c.Assert(errors.Cause(err), gc.Equals, detailed) c.Assert(errors.Details(err), jc.Contains, tagToLocation["nilWrapTest"].String()) }
func (*functionSuite) TestAnnotatef(c *gc.C) { first := errors.New("first") err := errors.Annotatef(first, "annotation %d", 2) //err annotatefTest c.Assert(err.Error(), gc.Equals, "annotation 2: first") c.Assert(errors.Cause(err), gc.Equals, first) c.Assert(errors.Details(err), jc.Contains, tagToLocation["annotatefTest"].String()) c.Assert(errors.Annotatef(nil, "annotate"), gc.IsNil) }
func (*functionSuite) TestTrace(c *gc.C) { first := errors.New("first") err := errors.Trace(first) //err traceTest c.Assert(err.Error(), gc.Equals, "first") c.Assert(errors.Cause(err), gc.Equals, first) c.Assert(errors.Details(err), jc.Contains, tagToLocation["traceTest"].String()) c.Assert(errors.Trace(nil), gc.IsNil) }
func (*functionSuite) TestMaskf(c *gc.C) { first := errors.New("first") err := errors.Maskf(first, "masked %d", 42) //err maskfTest c.Assert(err.Error(), gc.Equals, "masked 42: first") c.Assert(errors.Cause(err), gc.Equals, err) c.Assert(errors.Details(err), jc.Contains, tagToLocation["maskfTest"].String()) c.Assert(errors.Maskf(nil, "mask"), gc.IsNil) }
func (*functionSuite) TestDeferredAnnotatef(c *gc.C) { // NOTE: this test fails with gccgo if runtime.Compiler == "gccgo" { c.Skip("gccgo can't determine the location") } first := errors.New("first") test := func() (err error) { defer errors.DeferredAnnotatef(&err, "deferred %s", "annotate") return first } //err deferredAnnotate err := test() c.Assert(err.Error(), gc.Equals, "deferred annotate: first") c.Assert(errors.Cause(err), gc.Equals, first) c.Assert(errors.Details(err), jc.Contains, tagToLocation["deferredAnnotate"].String()) err = nil errors.DeferredAnnotatef(&err, "deferred %s", "annotate") c.Assert(err, gc.IsNil) }
func (*functionSuite) TestNew(c *gc.C) { err := errors.New("testing") //err newTest c.Assert(err.Error(), gc.Equals, "testing") c.Assert(errors.Cause(err), gc.Equals, err) c.Assert(errors.Details(err), jc.Contains, tagToLocation["newTest"].String()) }
func (*errorsSuite) TestErrorString(c *gc.C) { for i, test := range []struct { message string generator func() error expected string }{ { message: "uncomparable errors", generator: func() error { err := errors.Annotatef(newNonComparableError("uncomparable"), "annotation") return errors.Annotatef(err, "another") }, expected: "another: annotation: uncomparable", }, { message: "Errorf", generator: func() error { return errors.Errorf("first error") }, expected: "first error", }, { message: "annotated error", generator: func() error { err := errors.Errorf("first error") return errors.Annotatef(err, "annotation") }, expected: "annotation: first error", }, { message: "test annotation format", generator: func() error { err := errors.Errorf("first %s", "error") return errors.Annotatef(err, "%s", "annotation") }, expected: "annotation: first error", }, { message: "wrapped error", generator: func() error { err := newError("first error") return errors.Wrap(err, newError("detailed error")) }, expected: "detailed error", }, { message: "wrapped annotated error", generator: func() error { err := errors.Errorf("first error") err = errors.Annotatef(err, "annotated") return errors.Wrap(err, fmt.Errorf("detailed error")) }, expected: "detailed error", }, { message: "annotated wrapped error", generator: func() error { err := errors.Errorf("first error") err = errors.Wrap(err, fmt.Errorf("detailed error")) return errors.Annotatef(err, "annotated") }, expected: "annotated: detailed error", }, { message: "traced, and annotated", generator: func() error { err := errors.New("first error") err = errors.Trace(err) err = errors.Annotate(err, "some context") err = errors.Trace(err) err = errors.Annotate(err, "more context") return errors.Trace(err) }, expected: "more context: some context: first error", }, { message: "traced, and annotated, masked and annotated", generator: func() error { err := errors.New("first error") err = errors.Trace(err) err = errors.Annotate(err, "some context") err = errors.Maskf(err, "masked") err = errors.Annotate(err, "more context") return errors.Trace(err) }, expected: "more context: masked: some context: first error", }, } { c.Logf("%v: %s", i, test.message) err := test.generator() ok := c.Check(err.Error(), gc.Equals, test.expected) if !ok { c.Logf("%#v", test.generator()) } } }
import ( "fmt" "runtime" jc "github.com/juju/testing/checkers" gc "gopkg.in/check.v1" "github.com/ruzz311/errors" ) type errorsSuite struct{} var _ = gc.Suite(&errorsSuite{}) var someErr = errors.New("some error") //err varSomeErr func (*errorsSuite) TestErrorString(c *gc.C) { for i, test := range []struct { message string generator func() error expected string }{ { message: "uncomparable errors", generator: func() error { err := errors.Annotatef(newNonComparableError("uncomparable"), "annotation") return errors.Annotatef(err, "another") }, expected: "another: annotation: uncomparable", }, {