Skip to content

Commit

Permalink
Feature:(issue_1090): Add unwrap for ExitCoder (#1545)
Browse files Browse the repository at this point in the history
* Feature:(issue_1090): Add unwrap for ExitCoder

* Add simple test for error
  • Loading branch information
dearchap committed Oct 28, 2022
1 parent 63cb372 commit c344b46
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 3 deletions.
21 changes: 18 additions & 3 deletions errors.go
Expand Up @@ -83,7 +83,7 @@ type ExitCoder interface {

type exitError struct {
exitCode int
message interface{}
err error
}

// NewExitError calls Exit to create a new ExitCoder.
Expand All @@ -101,20 +101,35 @@ func NewExitError(message interface{}, exitCode int) ExitCoder {
// by overriding the ExitErrHandler function on an App or the package-global
// OsExiter function.
func Exit(message interface{}, exitCode int) ExitCoder {
var err error

switch e := message.(type) {
case ErrorFormatter:
err = fmt.Errorf("%+v", message)
case error:
err = e
default:
err = fmt.Errorf("%+v", message)
}

return &exitError{
message: message,
err: err,
exitCode: exitCode,
}
}

func (ee *exitError) Error() string {
return fmt.Sprintf("%v", ee.message)
return ee.err.Error()
}

func (ee *exitError) ExitCode() int {
return ee.exitCode
}

func (ee *exitError) Unwrap() error {
return ee.err
}

// HandleExitCoder handles errors implementing ExitCoder by printing their
// message and calling OsExiter with the given exit code.
//
Expand Down
19 changes: 19 additions & 0 deletions errors_test.go
Expand Up @@ -45,6 +45,25 @@ func TestHandleExitCoder_ExitCoder(t *testing.T) {
expect(t, called, true)
}

func TestHandleExitCoder_ErrorExitCoder(t *testing.T) {
exitCode := 0
called := false

OsExiter = func(rc int) {
if !called {
exitCode = rc
called = true
}
}

defer func() { OsExiter = fakeOsExiter }()

HandleExitCoder(Exit(errors.New("galactic perimeter breach"), 9))

expect(t, exitCode, 9)
expect(t, called, true)
}

func TestHandleExitCoder_MultiErrorWithExitCoder(t *testing.T) {
exitCode := 0
called := false
Expand Down

0 comments on commit c344b46

Please sign in to comment.