| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- package jsoniter
- import (
- "bytes"
- "encoding/json"
- "testing"
- "github.com/stretchr/testify/require"
- )
- func Test_true(t *testing.T) {
- should := require.New(t)
- iter := ParseString(ConfigDefault, `true`)
- should.True(iter.ReadBool())
- iter = ParseString(ConfigDefault, `true`)
- should.Equal(true, iter.Read())
- }
- func Test_false(t *testing.T) {
- should := require.New(t)
- iter := ParseString(ConfigDefault, `false`)
- should.False(iter.ReadBool())
- }
- func Test_write_true_false(t *testing.T) {
- should := require.New(t)
- buf := &bytes.Buffer{}
- stream := NewStream(ConfigDefault, buf, 4096)
- stream.WriteTrue()
- stream.WriteFalse()
- stream.WriteBool(false)
- stream.Flush()
- should.Nil(stream.Error)
- should.Equal("truefalsefalse", buf.String())
- }
- func Test_write_val_bool(t *testing.T) {
- should := require.New(t)
- buf := &bytes.Buffer{}
- stream := NewStream(ConfigDefault, buf, 4096)
- stream.WriteVal(true)
- should.Equal(stream.Buffered(), 4)
- stream.Flush()
- should.Equal(stream.Buffered(), 0)
- should.Nil(stream.Error)
- should.Equal("true", buf.String())
- }
- func Test_encode_string_bool(t *testing.T) {
- type TestObject struct {
- Field bool `json:",omitempty,string"`
- }
- should := require.New(t)
- output, err := json.Marshal(TestObject{true})
- should.Nil(err)
- should.Equal(`{"Field":"true"}`, string(output))
- output, err = Marshal(TestObject{true})
- should.Nil(err)
- should.Equal(`{"Field":"true"}`, string(output))
- }
- func Test_decode_string_bool(t *testing.T) {
- type TestObject struct {
- Field bool `json:",omitempty,string"`
- }
- should := require.New(t)
- obj := TestObject{}
- err := json.Unmarshal([]byte(`{"Field":"true"}`), &obj)
- should.Nil(err)
- should.True(obj.Field)
- obj = TestObject{}
- err = json.Unmarshal([]byte(`{"Field":true}`), &obj)
- should.NotNil(err)
- obj = TestObject{}
- err = Unmarshal([]byte(`{"Field":"true"}`), &obj)
- should.Nil(err)
- should.True(obj.Field)
- obj = TestObject{}
- err = Unmarshal([]byte(`{"Field":true}`), &obj)
- should.NotNil(err)
- }
- func Test_bool_can_be_null(t *testing.T) {
- type TestData struct {
- Field bool `json:"field"`
- }
- should := require.New(t)
- obj := TestData{}
- data1 := []byte(`{"field": true}`)
- err := Unmarshal(data1, &obj)
- should.NoError(err)
- should.Equal(true, obj.Field)
- data2 := []byte(`{"field": null}`)
- err = Unmarshal(data2, &obj)
- should.NoError(err)
- // Same behavior as stdlib, not touching the existing value.
- should.Equal(true, obj.Field)
- // Checking stdlib behavior as well
- obj2 := TestData{}
- err = json.Unmarshal(data1, &obj2)
- should.NoError(err)
- should.Equal(true, obj2.Field)
- err = json.Unmarshal(data2, &obj2)
- should.NoError(err)
- should.Equal(true, obj2.Field)
- }
|