소스 검색

add tests for decoding nil interfaces

Jason Toffaletti 8 년 전
부모
커밋
8324374402
1개의 변경된 파일28개의 추가작업 그리고 0개의 파일을 삭제
  1. 28 0
      jsoniter_interface_test.go

+ 28 - 0
jsoniter_interface_test.go

@@ -371,6 +371,29 @@ func Test_omitempty_nil_interface(t *testing.T) {
 	should.Equal(string(js), str)
 }
 
+func Test_omitempty_nil_nonempty_interface(t *testing.T) {
+	type TestData struct {
+		Field MyInterface `json:"field,omitempty"`
+	}
+	should := require.New(t)
+
+	obj := TestData{
+		Field: nil,
+	}
+
+	js, err := json.Marshal(obj)
+	should.Equal(nil, err)
+	should.Equal("{}", string(js))
+
+	str, err := MarshalToString(obj)
+	should.Equal(nil, err)
+	should.Equal(string(js), str)
+
+	err = Unmarshal(js, &obj)
+	should.Equal(nil, err)
+	should.Equal(nil, obj.Field)
+}
+
 func Test_marshal_nil_marshaler_interface(t *testing.T) {
 	type TestData struct {
 		Field json.Marshaler `json:"field"`
@@ -407,4 +430,9 @@ func Test_marshal_nil_nonempty_interface(t *testing.T) {
 	str, err := MarshalToString(obj)
 	should.Equal(nil, err)
 	should.Equal(string(js), str)
+
+	obj.Field = MyString("hello")
+	err = Unmarshal(js, &obj)
+	should.Equal(nil, err)
+	should.Equal(nil, obj.Field)
 }