| package jsoniter |
| |
| import ( |
| "encoding/json" |
| "testing" |
| "time" |
| |
| "github.com/stretchr/testify/require" |
| ) |
| |
| func Test_encode_unexported_field(t *testing.T) { |
| type TestData struct { |
| a int |
| b <-chan int |
| C int |
| d *time.Timer |
| } |
| |
| should := require.New(t) |
| |
| testChan := make(<-chan int, 10) |
| testTimer := time.NewTimer(10 * time.Second) |
| |
| obj := &TestData{ |
| a: 42, |
| b: testChan, |
| C: 21, |
| d: testTimer, |
| } |
| |
| jb, err := json.Marshal(obj) |
| should.NoError(err) |
| should.Equal([]byte(`{"C":21}`), jb) |
| |
| err = json.Unmarshal([]byte(`{"a": 444, "b":"bad", "C":55, "d":{"not": "a timer"}}`), obj) |
| should.NoError(err) |
| should.Equal(42, obj.a) |
| should.Equal(testChan, obj.b) |
| should.Equal(55, obj.C) |
| should.Equal(testTimer, obj.d) |
| |
| jb, err = Marshal(obj) |
| should.NoError(err) |
| should.Equal(jb, []byte(`{"C":55}`)) |
| |
| err = Unmarshal([]byte(`{"a": 444, "b":"bad", "C":256, "d":{"not":"a timer"}}`), obj) |
| should.NoError(err) |
| should.Equal(42, obj.a) |
| should.Equal(testChan, obj.b) |
| should.Equal(256, obj.C) |
| should.Equal(testTimer, obj.d) |
| } |