diff --git a/cobra.go b/cobra.go index d6cbfd71..b61ca7d9 100644 --- a/cobra.go +++ b/cobra.go @@ -19,7 +19,6 @@ package cobra import ( "fmt" "io" - "os" "reflect" "strconv" "strings" @@ -207,11 +206,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 1219cc07..9b03de45 100644 --- a/cobra_test.go +++ b/cobra_test.go @@ -1,6 +1,7 @@ package cobra import ( + "errors" "testing" "text/template" ) @@ -26,3 +27,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) + }) + } +}