From 33b8d2b19cff931184e23eff38c3a371948f527d Mon Sep 17 00:00:00 2001 From: Alec Thomas Date: Fri, 21 Jun 2019 14:51:44 +1000 Subject: [PATCH] Quote enum values when displaying errors. --- context.go | 8 +++++++- kong_test.go | 6 +++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/context.go b/context.go index c63b1ab..c9dae24 100644 --- a/context.go +++ b/context.go @@ -3,6 +3,7 @@ package kong import ( "fmt" "reflect" + "sort" "strconv" "strings" @@ -135,7 +136,12 @@ func (c *Context) Validate() error { err := Visit(c.Model, func(node Visitable, next Next) error { if value, ok := node.(*Value); ok { if value.Enum != "" && !value.EnumMap()[fmt.Sprintf("%v", value.Target.Interface())] { - return fmt.Errorf("%s must be one of %s but got %q", value.ShortSummary(), value.Enum, value.Target.Interface()) + enums := []string{} + for enum := range value.EnumMap() { + enums = append(enums, fmt.Sprintf("%q", enum)) + } + sort.Strings(enums) + return fmt.Errorf("%s must be one of %s but got %q", value.ShortSummary(), strings.Join(enums, ","), value.Target.Interface()) } } return next(nil) diff --git a/kong_test.go b/kong_test.go index 11c3171..7f553a8 100644 --- a/kong_test.go +++ b/kong_test.go @@ -680,7 +680,7 @@ func TestEnum(t *testing.T) { Flag string `enum:"a,b,c"` } _, err := mustNew(t, &cli).Parse([]string{"--flag", "d"}) - require.EqualError(t, err, "--flag must be one of a,b,c but got \"d\"") + require.EqualError(t, err, "--flag must be one of \"a\",\"b\",\"c\" but got \"d\"") } type commandWithHook struct { @@ -734,7 +734,7 @@ func TestDefaultEnumValidated(t *testing.T) { } p := mustNew(t, &cli) _, err := p.Parse(nil) - require.EqualError(t, err, "--flag must be one of valid but got \"invalid\"") + require.EqualError(t, err, "--flag must be one of \"valid\" but got \"invalid\"") } func TestEnvarEnumValidated(t *testing.T) { @@ -747,5 +747,5 @@ func TestEnvarEnumValidated(t *testing.T) { } p := mustNew(t, &cli) _, err := p.Parse(nil) - require.EqualError(t, err, "--flag must be one of valid but got \"invalid\"") + require.EqualError(t, err, "--flag must be one of \"valid\" but got \"invalid\"") }