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  }