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())
|
return cast.ToBool(flag.ValueString())
|
||||||
case "stringSlice":
|
case "stringSlice":
|
||||||
s := strings.TrimPrefix(flag.ValueString(), "[")
|
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||||
return strings.TrimSuffix(s, "]")
|
return strings.Split(strings.TrimSuffix(s, "]"), ",")
|
||||||
default:
|
default:
|
||||||
return flag.ValueString()
|
return flag.ValueString()
|
||||||
}
|
}
|
||||||
|
@ -947,7 +947,7 @@ func (v *Viper) find(lcaseKey string) interface{} {
|
||||||
return cast.ToBool(flag.ValueString())
|
return cast.ToBool(flag.ValueString())
|
||||||
case "stringSlice":
|
case "stringSlice":
|
||||||
s := strings.TrimPrefix(flag.ValueString(), "[")
|
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||||
return strings.TrimSuffix(s, "]")
|
return strings.Split(strings.TrimSuffix(s, "]"), ",")
|
||||||
default:
|
default:
|
||||||
return flag.ValueString()
|
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) {
|
func TestBindPFlag(t *testing.T) {
|
||||||
var testString = "testing"
|
var testString = "testing"
|
||||||
var testValue = newStringValue(testString, &testString)
|
var testValue = newStringValue(testString, &testString)
|
||||||
|
|
Loading…
Add table
Reference in a new issue