github.com/franklinkim/viper@v1.1.1/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  	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  
    46  func 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  }