github.com/DataDog/viper@v1.13.3/flags_test.go (about) 1 package viper 2 3 import ( 4 "testing" 5 6 "github.com/spf13/pflag" 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestBindFlagValueSet(t *testing.T) { 11 v := New() 12 13 flagSet := pflag.NewFlagSet("test", pflag.ContinueOnError) 14 15 var testValues = map[string]*string{ 16 "host": nil, 17 "port": nil, 18 "endpoint": nil, 19 } 20 21 var mutatedTestValues = map[string]string{ 22 "host": "localhost", 23 "port": "6060", 24 "endpoint": "/public", 25 } 26 27 for name := range testValues { 28 testValues[name] = flagSet.String(name, "", "test") 29 } 30 31 flagValueSet := pflagValueSet{flagSet} 32 33 err := v.BindFlagValues(flagValueSet) 34 if err != nil { 35 t.Fatalf("error binding flag set, %v", err) 36 } 37 38 flagSet.VisitAll(func(flag *pflag.Flag) { 39 flag.Value.Set(mutatedTestValues[flag.Name]) 40 flag.Changed = true 41 }) 42 43 for name, expected := range mutatedTestValues { 44 assert.Equal(t, v.Get(name), expected) 45 } 46 } 47 48 func TestBindFlagValue(t *testing.T) { 49 v := New() 50 51 var testString = "testing" 52 var testValue = newStringValue(testString, &testString) 53 54 flag := &pflag.Flag{ 55 Name: "testflag", 56 Value: testValue, 57 Changed: false, 58 } 59 60 flagValue := pflagValue{flag} 61 v.BindFlagValue("testvalue", flagValue) 62 63 assert.Equal(t, testString, v.Get("testvalue")) 64 65 flag.Value.Set("testing_mutate") 66 flag.Changed = true //hack for pflag usage 67 68 assert.Equal(t, "testing_mutate", v.Get("testvalue")) 69 }