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 checkErr(c *gc.C, err, cause error, msg string, details string) { c.Assert(err, gc.NotNil) c.Assert(err.Error(), gc.Equals, msg) c.Assert(errors.Cause(err), gc.Equals, cause) expectedDetails := replaceLocations(details) c.Assert(errors.Details(err), gc.Equals, expectedDetails) }
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) 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) 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) 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 (*errorsSuite) TestNewErr(c *gc.C) { if runtime.Compiler == "gccgo" { c.Skip("gccgo can't determine the location") } err := newEmbed("testing %d", 42) //err embedErr c.Assert(err.Error(), gc.Equals, "testing 42") c.Assert(errors.Cause(err), gc.Equals, err) c.Assert(errors.Details(err), jc.Contains, tagToLocation["embedErr"].String()) }
func (s *functionSuite) TestDetails(c *gc.C) { if runtime.Compiler == "gccgo" { c.Skip("gccgo can't determine the location") } c.Assert(errors.Details(nil), gc.Equals, "[]") otherErr := fmt.Errorf("other") checkDetails(c, otherErr, "[{other}]") err0 := newEmbed("foo") //err TestStack#0 checkDetails(c, err0, "[{$TestStack#0$: foo}]") err1 := errors.Annotate(err0, "bar") //err TestStack#1 checkDetails(c, err1, "[{$TestStack#1$: bar} {$TestStack#0$: foo}]") err2 := errors.Trace(err1) //err TestStack#2 checkDetails(c, err2, "[{$TestStack#2$: } {$TestStack#1$: bar} {$TestStack#0$: foo}]") }
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 checkDetails(c *gc.C, err error, details string) { c.Assert(err, gc.NotNil) expectedDetails := replaceLocations(details) c.Assert(errors.Details(err), gc.Equals, expectedDetails) }
func (*functionSuite) TestErrorf(c *gc.C) { err := errors.Errorf("testing %d", 42) //err errorfTest c.Assert(err.Error(), gc.Equals, "testing 42") c.Assert(errors.Cause(err), gc.Equals, err) c.Assert(errors.Details(err), jc.Contains, tagToLocation["errorfTest"].String()) }
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()) }