@@ -2930,6 +2930,70 @@ func TestProcessWith(t *testing.T) {
29302930 "FIELD" : "foo bar,zip:zap zoo:zil" ,
29312931 }),
29322932 },
2933+ // LookuperFunc
2934+ {
2935+ name : "lookuperfunc/static" ,
2936+ target : & struct {
2937+ Field1 string `env:"FIELD1"`
2938+ Field2 string `env:"FIELD2"`
2939+ }{},
2940+ lookuper : LookuperFunc (func (key string ) (string , bool ) {
2941+ return "foo" , true
2942+ }),
2943+ exp : & struct {
2944+ Field1 string `env:"FIELD1"`
2945+ Field2 string `env:"FIELD2"`
2946+ }{
2947+ Field1 : "foo" ,
2948+ Field2 : "foo" ,
2949+ },
2950+ },
2951+ {
2952+ name : "lookuperfunc/branching" ,
2953+ target : & struct {
2954+ Field1 string `env:"FIELD1"`
2955+ Field2 string `env:"FIELD2"`
2956+ }{},
2957+ lookuper : LookuperFunc (func (key string ) (string , bool ) {
2958+ if key == "FIELD1" {
2959+ return "foo" , true
2960+ }
2961+ return "" , false
2962+ }),
2963+ exp : & struct {
2964+ Field1 string `env:"FIELD1"`
2965+ Field2 string `env:"FIELD2"`
2966+ }{
2967+ Field1 : "foo" ,
2968+ Field2 : "" ,
2969+ },
2970+ },
2971+ {
2972+ name : "lookuperfunc/switching" ,
2973+ target : & struct {
2974+ Field1 string `env:"FIELD1"`
2975+ Field2 string `env:"FIELD2"`
2976+ Field3 string `env:"FIELD3"`
2977+ }{},
2978+ lookuper : LookuperFunc (func (key string ) (string , bool ) {
2979+ switch key {
2980+ case "FIELD1" :
2981+ return "foo" , true
2982+ case "FIELD2" :
2983+ return "bar" , true
2984+ }
2985+ return "" , false
2986+ }),
2987+ exp : & struct {
2988+ Field1 string `env:"FIELD1"`
2989+ Field2 string `env:"FIELD2"`
2990+ Field3 string `env:"FIELD3"`
2991+ }{
2992+ Field1 : "foo" ,
2993+ Field2 : "bar" ,
2994+ Field3 : "" ,
2995+ },
2996+ },
29332997 }
29342998
29352999 for _ , tc := range cases {
0 commit comments