diff --git a/cobra.go b/cobra.go index a6b160ce..c62b52c2 100644 --- a/cobra.go +++ b/cobra.go @@ -20,7 +20,6 @@ package cobra import ( "fmt" "io" - "os" "reflect" "strconv" "strings" @@ -229,11 +228,10 @@ func stringInSlice(a string, list []string) bool { return false } -// CheckErr prints the msg with the prefix 'Error:' and exits with error code 1. If the msg is nil, it does nothing. +// CheckErr prints the msg with the prefix 'panic:' and exits with code != 0. If the msg is nil, it does nothing. func CheckErr(msg interface{}) { if msg != nil { - fmt.Fprintln(os.Stderr, "Error:", msg) - os.Exit(1) + panic(msg) } } diff --git a/cobra_test.go b/cobra_test.go index fbb07f9b..5112fed2 100644 --- a/cobra_test.go +++ b/cobra_test.go @@ -15,6 +15,7 @@ package cobra import ( + "errors" "testing" "text/template" ) @@ -40,3 +41,44 @@ func TestAddTemplateFunctions(t *testing.T) { t.Errorf("Expected UsageString: %v\nGot: %v", expected, got) } } + +func TestCheckErr(t *testing.T) { + tests := []struct { + name string + msg interface{} + panic bool + }{ + { + name: "no error", + msg: nil, + panic: false, + }, + { + name: "panic string", + msg: "test", + panic: true, + }, + { + name: "panic error", + msg: errors.New("test error"), + panic: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + defer func() { + r := recover() + if r != nil { + if !tt.panic { + t.Error("Didn't expect panic") + } + } else { + if tt.panic { + t.Error("Expected to panic") + } + } + }() + CheckErr(tt.msg) + }) + } +}