Quote enum values when displaying errors.
This commit is contained in:
+7
-1
@@ -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)
|
||||
|
||||
+3
-3
@@ -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\"")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user