diff --git a/aconfig_test.go b/aconfig_test.go index e9a350d..e86a04f 100644 --- a/aconfig_test.go +++ b/aconfig_test.go @@ -2,6 +2,7 @@ package aconfig import ( "io/ioutil" + "net/url" "os" "reflect" "strings" @@ -1389,3 +1390,31 @@ func TestMapOfMap(t *testing.T) { t.Fatalf("want %v, got %v", want, got) } } + +func TestBad(t *testing.T) { + type TestConfig struct { + Params url.Values + } + var cfg TestConfig + os.Setenv("PARAMS", "foo:bar") + defer os.Unsetenv("PARAMS") + + loader := LoaderFor(&cfg, Config{ + SkipFlags: true, + }) + if err := loader.Load(); err != nil { + t.Fatal(err) + } + + p, err := url.ParseQuery("foo=bar") + if err != nil { + t.Fatal(err) + } + var want = TestConfig{ + Params: p, + } + + if got := cfg; !reflect.DeepEqual(want, got) { + t.Fatalf("want %v, got %v", want, got) + } +} diff --git a/reflection.go b/reflection.go index 653ccf8..891a207 100644 --- a/reflection.go +++ b/reflection.go @@ -320,6 +320,7 @@ func (l *Loader) setMap(field *fieldData, value string) error { } fdv := l.newSimpleFieldData(reflect.New(field.field.Type.Elem()).Elem()) + fdv.field.Type = field.field.Type.Elem() if err := l.setFieldData(fdv, val); err != nil { return fmt.Errorf("incorrect map value %q: %w", val, err) }