...

Source file src/github.com/urfave/cli/v2/errors_test.go

Documentation: github.com/urfave/cli/v2

     1  package cli
     2  
     3  import (
     4  	"bytes"
     5  	"errors"
     6  	"fmt"
     7  	"testing"
     8  )
     9  
    10  func TestHandleExitCoder_nil(t *testing.T) {
    11  	exitCode := 0
    12  	called := false
    13  
    14  	OsExiter = func(rc int) {
    15  		if !called {
    16  			exitCode = rc
    17  			called = true
    18  		}
    19  	}
    20  
    21  	defer func() { OsExiter = fakeOsExiter }()
    22  
    23  	HandleExitCoder(nil)
    24  
    25  	expect(t, exitCode, 0)
    26  	expect(t, called, false)
    27  }
    28  
    29  func TestHandleExitCoder_ExitCoder(t *testing.T) {
    30  	exitCode := 0
    31  	called := false
    32  
    33  	OsExiter = func(rc int) {
    34  		if !called {
    35  			exitCode = rc
    36  			called = true
    37  		}
    38  	}
    39  
    40  	defer func() { OsExiter = fakeOsExiter }()
    41  
    42  	HandleExitCoder(Exit("galactic perimeter breach", 9))
    43  
    44  	expect(t, exitCode, 9)
    45  	expect(t, called, true)
    46  }
    47  
    48  func TestHandleExitCoder_ErrorExitCoder(t *testing.T) {
    49  	exitCode := 0
    50  	called := false
    51  
    52  	OsExiter = func(rc int) {
    53  		if !called {
    54  			exitCode = rc
    55  			called = true
    56  		}
    57  	}
    58  
    59  	defer func() { OsExiter = fakeOsExiter }()
    60  
    61  	HandleExitCoder(Exit(errors.New("galactic perimeter breach"), 9))
    62  
    63  	expect(t, exitCode, 9)
    64  	expect(t, called, true)
    65  }
    66  
    67  func TestHandleExitCoder_MultiErrorWithExitCoder(t *testing.T) {
    68  	exitCode := 0
    69  	called := false
    70  
    71  	OsExiter = func(rc int) {
    72  		if !called {
    73  			exitCode = rc
    74  			called = true
    75  		}
    76  	}
    77  
    78  	defer func() { OsExiter = fakeOsExiter }()
    79  
    80  	exitErr := Exit("galactic perimeter breach", 9)
    81  	exitErr2 := Exit("last ExitCoder", 11)
    82  	err := newMultiError(errors.New("wowsa"), errors.New("egad"), exitErr, exitErr2)
    83  	HandleExitCoder(err)
    84  
    85  	expect(t, exitCode, 11)
    86  	expect(t, called, true)
    87  }
    88  
    89  func TestHandleExitCoder_MultiErrorWithoutExitCoder(t *testing.T) {
    90  	exitCode := 0
    91  	called := false
    92  
    93  	OsExiter = func(rc int) {
    94  		if !called {
    95  			exitCode = rc
    96  			called = true
    97  		}
    98  	}
    99  
   100  	defer func() { OsExiter = fakeOsExiter }()
   101  
   102  	err := newMultiError(errors.New("wowsa"), errors.New("egad"))
   103  	HandleExitCoder(err)
   104  
   105  	expect(t, exitCode, 1)
   106  	expect(t, called, true)
   107  }
   108  
   109  // make a stub to not import pkg/errors
   110  type ErrorWithFormat struct {
   111  	error
   112  }
   113  
   114  func NewErrorWithFormat(m string) *ErrorWithFormat {
   115  	return &ErrorWithFormat{error: errors.New(m)}
   116  }
   117  
   118  func (f *ErrorWithFormat) Format(s fmt.State, verb rune) {
   119  	fmt.Fprintf(s, "This the format: %v", f.error)
   120  }
   121  
   122  func TestHandleExitCoder_ErrorWithFormat(t *testing.T) {
   123  	called := false
   124  
   125  	OsExiter = func(rc int) {
   126  		if !called {
   127  			called = true
   128  		}
   129  	}
   130  	ErrWriter = &bytes.Buffer{}
   131  
   132  	defer func() {
   133  		OsExiter = fakeOsExiter
   134  		ErrWriter = fakeErrWriter
   135  	}()
   136  
   137  	err := Exit(NewErrorWithFormat("I am formatted"), 1)
   138  	HandleExitCoder(err)
   139  
   140  	expect(t, called, true)
   141  	expect(t, ErrWriter.(*bytes.Buffer).String(), "This the format: I am formatted\n")
   142  }
   143  
   144  func TestHandleExitCoder_MultiErrorWithFormat(t *testing.T) {
   145  	called := false
   146  
   147  	OsExiter = func(rc int) {
   148  		if !called {
   149  			called = true
   150  		}
   151  	}
   152  	ErrWriter = &bytes.Buffer{}
   153  
   154  	defer func() { OsExiter = fakeOsExiter }()
   155  
   156  	err := newMultiError(NewErrorWithFormat("err1"), NewErrorWithFormat("err2"))
   157  	HandleExitCoder(err)
   158  
   159  	expect(t, called, true)
   160  	expect(t, ErrWriter.(*bytes.Buffer).String(), "This the format: err1\nThis the format: err2\n")
   161  }
   162  

View as plain text