github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/jsoni/api_tests/decoder_test.go (about) 1 package test 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "io/ioutil" 7 "testing" 8 9 "github.com/bingoohuang/gg/pkg/jsoni" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func Test_disallowUnknownFields(t *testing.T) { 14 should := require.New(t) 15 type TestObject struct{} 16 var obj TestObject 17 decoder := jsoni.NewDecoder(bytes.NewBufferString(`{"field1":100}`)) 18 decoder.DisallowUnknownFields() 19 should.Error(decoder.Decode(nil, &obj)) 20 } 21 22 func Test_new_decoder(t *testing.T) { 23 should := require.New(t) 24 decoder1 := json.NewDecoder(bytes.NewBufferString(`[1][2]`)) 25 decoder2 := jsoni.NewDecoder(bytes.NewBufferString(`[1][2]`)) 26 var arr1 []int 27 should.Nil(decoder1.Decode(&arr1)) 28 should.Equal([]int{1}, arr1) 29 var arr2 []int 30 should.True(decoder1.More()) 31 buffered, _ := ioutil.ReadAll(decoder1.Buffered()) 32 should.Equal("[2]", string(buffered)) 33 should.Nil(decoder2.Decode(nil, &arr2)) 34 should.Equal([]int{1}, arr2) 35 should.True(decoder2.More()) 36 buffered, _ = ioutil.ReadAll(decoder2.Buffered()) 37 should.Equal("[2]", string(buffered)) 38 39 should.Nil(decoder1.Decode(&arr1)) 40 should.Equal([]int{2}, arr1) 41 should.False(decoder1.More()) 42 should.Nil(decoder2.Decode(nil, &arr2)) 43 should.Equal([]int{2}, arr2) 44 should.False(decoder2.More()) 45 } 46 47 func Test_use_number(t *testing.T) { 48 should := require.New(t) 49 decoder1 := json.NewDecoder(bytes.NewBufferString(`123`)) 50 decoder1.UseNumber() 51 decoder2 := jsoni.NewDecoder(bytes.NewBufferString(`123`)) 52 decoder2.UseNumber() 53 var obj1 interface{} 54 should.Nil(decoder1.Decode(&obj1)) 55 should.Equal(json.Number("123"), obj1) 56 var obj2 interface{} 57 should.Nil(decoder2.Decode(nil, &obj2)) 58 should.Equal(json.Number("123"), obj2) 59 } 60 61 func Test_decoder_more(t *testing.T) { 62 should := require.New(t) 63 decoder := jsoni.NewDecoder(bytes.NewBufferString("abcde")) 64 should.True(decoder.More()) 65 }