|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- package cli
-
- import (
- "bytes"
- "errors"
- "fmt"
- "testing"
- )
-
- func TestHandleExitCoder_nil(t *testing.T) {
- exitCode := 0
- called := false
-
- OsExiter = func(rc int) {
- if !called {
- exitCode = rc
- called = true
- }
- }
-
- defer func() { OsExiter = fakeOsExiter }()
-
- HandleExitCoder(nil)
-
- expect(t, exitCode, 0)
- expect(t, called, false)
- }
-
- func TestHandleExitCoder_ExitCoder(t *testing.T) {
- exitCode := 0
- called := false
-
- OsExiter = func(rc int) {
- if !called {
- exitCode = rc
- called = true
- }
- }
-
- defer func() { OsExiter = fakeOsExiter }()
-
- HandleExitCoder(NewExitError("galactic perimeter breach", 9))
-
- expect(t, exitCode, 9)
- expect(t, called, true)
- }
-
- func TestHandleExitCoder_MultiErrorWithExitCoder(t *testing.T) {
- exitCode := 0
- called := false
-
- OsExiter = func(rc int) {
- if !called {
- exitCode = rc
- called = true
- }
- }
-
- defer func() { OsExiter = fakeOsExiter }()
-
- exitErr := NewExitError("galactic perimeter breach", 9)
- exitErr2 := NewExitError("last ExitCoder", 11)
- err := NewMultiError(errors.New("wowsa"), errors.New("egad"), exitErr, exitErr2)
- HandleExitCoder(err)
-
- expect(t, exitCode, 11)
- expect(t, called, true)
- }
-
- func TestHandleExitCoder_ErrorWithMessage(t *testing.T) {
- exitCode := 0
- called := false
-
- OsExiter = func(rc int) {
- if !called {
- 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) {
- if !called {
- exitCode = rc
- called = true
- }
- }
- ErrWriter = &bytes.Buffer{}
-
- defer func() {
- OsExiter = fakeOsExiter
- ErrWriter = fakeErrWriter
- }()
-
- err := errors.New("")
- HandleExitCoder(err)
-
- expect(t, exitCode, 1)
- expect(t, called, true)
- expect(t, ErrWriter.(*bytes.Buffer).String(), "")
- }
-
- // make a stub to not import pkg/errors
- type ErrorWithFormat struct {
- error
- }
-
- func NewErrorWithFormat(m string) *ErrorWithFormat {
- return &ErrorWithFormat{error: errors.New(m)}
- }
-
- func (f *ErrorWithFormat) Format(s fmt.State, verb rune) {
- fmt.Fprintf(s, "This the format: %v", f.error)
- }
-
- func TestHandleExitCoder_ErrorWithFormat(t *testing.T) {
- called := false
-
- OsExiter = func(rc int) {
- if !called {
- called = true
- }
- }
- ErrWriter = &bytes.Buffer{}
-
- defer func() {
- OsExiter = fakeOsExiter
- ErrWriter = fakeErrWriter
- }()
-
- err := NewErrorWithFormat("I am formatted")
- HandleExitCoder(err)
-
- expect(t, called, true)
- expect(t, ErrWriter.(*bytes.Buffer).String(), "This the format: I am formatted\n")
- }
-
- func TestHandleExitCoder_MultiErrorWithFormat(t *testing.T) {
- called := false
-
- OsExiter = func(rc int) {
- if !called {
- called = true
- }
- }
- ErrWriter = &bytes.Buffer{}
-
- defer func() { OsExiter = fakeOsExiter }()
-
- err := NewMultiError(NewErrorWithFormat("err1"), NewErrorWithFormat("err2"))
- HandleExitCoder(err)
-
- expect(t, called, true)
- expect(t, ErrWriter.(*bytes.Buffer).String(), "This the format: err1\nThis the format: err2\n")
- }
|