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