|
@@ -2660,6 +2660,86 @@ func TestUnmarshalJsonWithoutKey(t *testing.T) {
|
|
|
assert.Equal(t, "2", res.B)
|
|
|
}
|
|
|
|
|
|
+func TestUnmarshalJsonUintNegative(t *testing.T) {
|
|
|
+ payload := `{"a": -1}`
|
|
|
+ var res struct {
|
|
|
+ A uint `json:"a"`
|
|
|
+ }
|
|
|
+ reader := strings.NewReader(payload)
|
|
|
+ err := UnmarshalJsonReader(reader, &res)
|
|
|
+ assert.NotNil(t, err)
|
|
|
+}
|
|
|
+
|
|
|
+func TestUnmarshalJsonDefinedInt(t *testing.T) {
|
|
|
+ type Int int
|
|
|
+ var res struct {
|
|
|
+ A Int `json:"a"`
|
|
|
+ }
|
|
|
+ payload := `{"a": -1}`
|
|
|
+ reader := strings.NewReader(payload)
|
|
|
+ err := UnmarshalJsonReader(reader, &res)
|
|
|
+ assert.Nil(t, err)
|
|
|
+ assert.Equal(t, Int(-1), res.A)
|
|
|
+}
|
|
|
+
|
|
|
+func TestUnmarshalJsonDefinedString(t *testing.T) {
|
|
|
+ type String string
|
|
|
+ var res struct {
|
|
|
+ A String `json:"a"`
|
|
|
+ }
|
|
|
+ payload := `{"a": "foo"}`
|
|
|
+ reader := strings.NewReader(payload)
|
|
|
+ err := UnmarshalJsonReader(reader, &res)
|
|
|
+ assert.Nil(t, err)
|
|
|
+ assert.Equal(t, String("foo"), res.A)
|
|
|
+}
|
|
|
+
|
|
|
+func TestUnmarshalJsonDefinedStringPtr(t *testing.T) {
|
|
|
+ type String string
|
|
|
+ var res struct {
|
|
|
+ A *String `json:"a"`
|
|
|
+ }
|
|
|
+ payload := `{"a": "foo"}`
|
|
|
+ reader := strings.NewReader(payload)
|
|
|
+ err := UnmarshalJsonReader(reader, &res)
|
|
|
+ assert.Nil(t, err)
|
|
|
+ assert.Equal(t, String("foo"), *res.A)
|
|
|
+}
|
|
|
+
|
|
|
+func TestUnmarshalJsonReaderComplex(t *testing.T) {
|
|
|
+ type (
|
|
|
+ MyInt int
|
|
|
+ MyTxt string
|
|
|
+ MyTxtArray []string
|
|
|
+
|
|
|
+ Req struct {
|
|
|
+ MyInt MyInt `json:"my_int"` // int.. ok
|
|
|
+ MyTxtArray MyTxtArray `json:"my_txt_array"`
|
|
|
+ MyTxt MyTxt `json:"my_txt"` // but string is not assignable
|
|
|
+ Int int `json:"int"`
|
|
|
+ Txt string `json:"txt"`
|
|
|
+ }
|
|
|
+ )
|
|
|
+ body := `{
|
|
|
+ "my_int": 100,
|
|
|
+ "my_txt_array": [
|
|
|
+ "a",
|
|
|
+ "b"
|
|
|
+ ],
|
|
|
+ "my_txt": "my_txt",
|
|
|
+ "int": 200,
|
|
|
+ "txt": "txt"
|
|
|
+}`
|
|
|
+ var req Req
|
|
|
+ err := UnmarshalJsonReader(strings.NewReader(body), &req)
|
|
|
+ assert.Nil(t, err)
|
|
|
+ assert.Equal(t, MyInt(100), req.MyInt)
|
|
|
+ assert.Equal(t, MyTxt("my_txt"), req.MyTxt)
|
|
|
+ assert.EqualValues(t, MyTxtArray([]string{"a", "b"}), req.MyTxtArray)
|
|
|
+ assert.Equal(t, 200, req.Int)
|
|
|
+ assert.Equal(t, "txt", req.Txt)
|
|
|
+}
|
|
|
+
|
|
|
func BenchmarkDefaultValue(b *testing.B) {
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
var a struct {
|