mirror of
https://github.com/spf13/viper
synced 2025-05-06 12:17:18 +00:00
Add proper handling of flag.StringSlice
This commit is contained in:
parent
5ed0fc31f7
commit
5d9cb36f40
2 changed files with 30 additions and 2 deletions
4
viper.go
4
viper.go
|
@ -880,7 +880,7 @@ func (v *Viper) find(lcaseKey string) interface{} {
|
|||
return cast.ToBool(flag.ValueString())
|
||||
case "stringSlice":
|
||||
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||
return strings.TrimSuffix(s, "]")
|
||||
return strings.Split(strings.TrimSuffix(s, "]"), ",")
|
||||
default:
|
||||
return flag.ValueString()
|
||||
}
|
||||
|
@ -947,7 +947,7 @@ func (v *Viper) find(lcaseKey string) interface{} {
|
|||
return cast.ToBool(flag.ValueString())
|
||||
case "stringSlice":
|
||||
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||
return strings.TrimSuffix(s, "]")
|
||||
return strings.Split(strings.TrimSuffix(s, "]"), ",")
|
||||
default:
|
||||
return flag.ValueString()
|
||||
}
|
||||
|
|
|
@ -538,6 +538,34 @@ func TestBindPFlags(t *testing.T) {
|
|||
|
||||
}
|
||||
|
||||
func TestBindPFlagsStringSlice(t *testing.T) {
|
||||
for _, testValue := range [][]string{nil, []string{}, []string{"jeden"}, []string{"dwa", "trzy"}} {
|
||||
v := New() // create independent Viper object
|
||||
flagSet := pflag.NewFlagSet("test", pflag.ContinueOnError)
|
||||
flagSet.StringSlice("stringslice", testValue, "test")
|
||||
flagSet.Visit(func(f *pflag.Flag) {
|
||||
if len(testValue) > 0 {
|
||||
f.Value.Set(strings.Join(testValue, ","))
|
||||
f.Changed = true
|
||||
}
|
||||
})
|
||||
|
||||
err := v.BindPFlags(flagSet)
|
||||
if err != nil {
|
||||
t.Fatalf("error binding flag set, %v", err)
|
||||
}
|
||||
|
||||
type TestStr struct {
|
||||
StringSlice []string
|
||||
}
|
||||
val := &TestStr{}
|
||||
if err := v.Unmarshal(val); err != nil {
|
||||
t.Fatalf("%+#v cannot unmarshal: %s", testValue, err)
|
||||
assert.Equal(t, val.StringSlice, testValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestBindPFlag(t *testing.T) {
|
||||
var testString = "testing"
|
||||
var testValue = newStringValue(testString, &testString)
|
||||
|
|
Loading…
Add table
Reference in a new issue