Quote enum values when displaying errors.
This commit is contained in:
+7
-1
@@ -3,6 +3,7 @@ package kong
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@@ -135,7 +136,12 @@ func (c *Context) Validate() error {
|
|||||||
err := Visit(c.Model, func(node Visitable, next Next) error {
|
err := Visit(c.Model, func(node Visitable, next Next) error {
|
||||||
if value, ok := node.(*Value); ok {
|
if value, ok := node.(*Value); ok {
|
||||||
if value.Enum != "" && !value.EnumMap()[fmt.Sprintf("%v", value.Target.Interface())] {
|
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)
|
return next(nil)
|
||||||
|
|||||||
+3
-3
@@ -680,7 +680,7 @@ func TestEnum(t *testing.T) {
|
|||||||
Flag string `enum:"a,b,c"`
|
Flag string `enum:"a,b,c"`
|
||||||
}
|
}
|
||||||
_, err := mustNew(t, &cli).Parse([]string{"--flag", "d"})
|
_, 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 {
|
type commandWithHook struct {
|
||||||
@@ -734,7 +734,7 @@ func TestDefaultEnumValidated(t *testing.T) {
|
|||||||
}
|
}
|
||||||
p := mustNew(t, &cli)
|
p := mustNew(t, &cli)
|
||||||
_, err := p.Parse(nil)
|
_, 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) {
|
func TestEnvarEnumValidated(t *testing.T) {
|
||||||
@@ -747,5 +747,5 @@ func TestEnvarEnumValidated(t *testing.T) {
|
|||||||
}
|
}
|
||||||
p := mustNew(t, &cli)
|
p := mustNew(t, &cli)
|
||||||
_, err := p.Parse(nil)
|
_, 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