Skip to content

Commit

Permalink
Write err to stderr, exit 1 if err != ""
Browse files Browse the repository at this point in the history
Closes urfave#475
  • Loading branch information
meatballhat committed Jul 24, 2016
1 parent 492afb9 commit dd253d1
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 4 deletions.
13 changes: 13 additions & 0 deletions app_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,19 @@ import (
"testing"
)

var (
lastExitCode = 0
fakeOsExiter = func(rc int) {
lastExitCode = rc
}
fakeErrWriter = &bytes.Buffer{}
)

func init() {
OsExiter = fakeOsExiter
ErrWriter = fakeErrWriter
}

type opCounts struct {
Total, BashComplete, OnUsageError, Before, CommandNotFound, Action, After, SubCommand int
}
Expand Down
6 changes: 6 additions & 0 deletions errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,5 +88,11 @@ func HandleExitCoder(err error) {
for _, merr := range multiErr.Errors {
HandleExitCoder(merr)
}
return
}

if err.Error() != "" {
fmt.Fprintln(ErrWriter, err)
OsExiter(1)
}
}
54 changes: 50 additions & 4 deletions errors_test.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package cli

import (
"bytes"
"errors"
"os"
"testing"
)

Expand All @@ -15,7 +15,7 @@ func TestHandleExitCoder_nil(t *testing.T) {
called = true
}

defer func() { OsExiter = os.Exit }()
defer func() { OsExiter = fakeOsExiter }()

HandleExitCoder(nil)

Expand All @@ -32,7 +32,7 @@ func TestHandleExitCoder_ExitCoder(t *testing.T) {
called = true
}

defer func() { OsExiter = os.Exit }()
defer func() { OsExiter = fakeOsExiter }()

HandleExitCoder(NewExitError("galactic perimeter breach", 9))

Expand All @@ -49,7 +49,7 @@ func TestHandleExitCoder_MultiErrorWithExitCoder(t *testing.T) {
called = true
}

defer func() { OsExiter = os.Exit }()
defer func() { OsExiter = fakeOsExiter }()

exitErr := NewExitError("galactic perimeter breach", 9)
err := NewMultiError(errors.New("wowsa"), errors.New("egad"), exitErr)
Expand All @@ -58,3 +58,49 @@ func TestHandleExitCoder_MultiErrorWithExitCoder(t *testing.T) {
expect(t, exitCode, 9)
expect(t, called, true)
}

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

OsExiter = func(rc int) {
exitCode = rc
called = true
}
ErrWriter = &bytes.Buffer{}

defer func() {
OsExiter = fakeOsExiter
ErrWriter = fakeErrWriter
}()

err := errors.New("gourd havens")
HandleExitCoder(err)

expect(t, exitCode, 1)
expect(t, called, true)
expect(t, ErrWriter.(*bytes.Buffer).String(), "gourd havens\n")
}

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

OsExiter = func(rc int) {
exitCode = rc
called = true
}
ErrWriter = &bytes.Buffer{}

defer func() {
OsExiter = fakeOsExiter
ErrWriter = fakeErrWriter
}()

err := errors.New("")
HandleExitCoder(err)

expect(t, exitCode, 0)
expect(t, called, false)
expect(t, ErrWriter.(*bytes.Buffer).String(), "")
}

0 comments on commit dd253d1

Please sign in to comment.