From 8b4382dcec5247cb302f51d7248ebfb63d4c883a Mon Sep 17 00:00:00 2001 From: Kevin Wan Date: Fri, 26 May 2023 22:30:03 +0800 Subject: [PATCH] chore: add more tests (#3286) --- core/mapping/unmarshaler.go | 7 ++++++- core/mapping/unmarshaler_test.go | 23 ++++++++++------------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/core/mapping/unmarshaler.go b/core/mapping/unmarshaler.go index 5d315085e..895f288f4 100644 --- a/core/mapping/unmarshaler.go +++ b/core/mapping/unmarshaler.go @@ -350,7 +350,12 @@ func (u *Unmarshaler) generateMap(keyType, elemType reflect.Type, mapValue any) return emptyValue, errTypeMismatch } - targetValue.SetMapIndex(key, reflect.ValueOf(v)) + val := reflect.ValueOf(v) + if !val.Type().AssignableTo(dereffedElemType) { + return emptyValue, errTypeMismatch + } + + targetValue.SetMapIndex(key, val) case json.Number: target := reflect.New(dereffedElemType) if err := setValueFromString(dereffedElemKind, target.Elem(), v.String()); err != nil { diff --git a/core/mapping/unmarshaler_test.go b/core/mapping/unmarshaler_test.go index 425dc80c9..399b2b4e5 100644 --- a/core/mapping/unmarshaler_test.go +++ b/core/mapping/unmarshaler_test.go @@ -4400,6 +4400,16 @@ func TestUnmarshalJsonReaderWithTypeString(t *testing.T) { body := `{"params":{"a":{"a":123}}}` assert.Equal(t, errTypeMismatch, UnmarshalJsonReader(strings.NewReader(body), &req)) }) + + t.Run("customized string type", func(t *testing.T) { + type myString string + + var req struct { + Params map[string]myString `json:"params"` + } + body := `{"params":{"a":"b"}}` + assert.Equal(t, errTypeMismatch, UnmarshalJsonReader(strings.NewReader(body), &req)) + }) } func TestUnmarshalJsonReaderWithMismatchType(t *testing.T) { @@ -4862,19 +4872,6 @@ func Test_UnmarshalMap(t *testing.T) { }) } -// func TestUnmarshalWithFillPrimitives(t *testing.T) { -// t.Run("fill primitives", func(t *testing.T) { -// type St struct { -// A int `key:"a,string,range=[5,10]"` -// } -// var st St -// err := UnmarshalKey(map[string]any{ -// "a": "1", -// }, &st) -// assert.ErrorIs(t, err, errNumberRange) -// }) -// } - func TestUnmarshaler_Unmarshal(t *testing.T) { t.Run("not struct", func(t *testing.T) { var i int