func handleError(v interface{}) { if err, ok := v.(exitError); ok { life.Exit(int(err)) return } cause := errors.GetPanicCausedBy(v) if cause == errors.NoError { return } errors.Handle(nil, v) switch cause { case errors.ByBug, errors.ByRuntime: fmt.Fprintln(os.Stderr, v) buf := make([]byte, 16*1024) buf = buf[0:runtime.Stack(buf, true)] fmt.Fprintln(os.Stderr, string(buf)) case errors.ByInput, errors.ByExternal: fmt.Println(v) default: panic("Unknown CausedBy") } life.Exit(int(cause) + 1) }
}) Context("GetCausedBy", func() { It("Default to ByBug", func() { Ω(errors.GetCausedBy(syserr.New("foo"))).Should(Equal(errors.ByBug)) }) It("Error object", func() { Ω(errors.GetCausedBy(errors.External("foo"))).Should(Equal(errors.ByExternal)) }) }) Context("GetPanicCausedBy", func() { It("nil", func() { Ω(errors.GetPanicCausedBy(nil)).Should(Equal(errors.NoError)) }) It("error", func() { Ω(errors.GetPanicCausedBy(errors.Input("foo"))).Should(Equal(errors.ByInput)) }) It("Other value", func() { Ω(errors.GetPanicCausedBy(0)).Should(Equal(errors.ByBug)) }) }) })