jsoniter_bool_test.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package jsoniter
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "testing"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func Test_true(t *testing.T) {
  9. should := require.New(t)
  10. iter := ParseString(ConfigDefault, `true`)
  11. should.True(iter.ReadBool())
  12. iter = ParseString(ConfigDefault, `true`)
  13. should.Equal(true, iter.Read())
  14. }
  15. func Test_false(t *testing.T) {
  16. should := require.New(t)
  17. iter := ParseString(ConfigDefault, `false`)
  18. should.False(iter.ReadBool())
  19. }
  20. func Test_write_true_false(t *testing.T) {
  21. should := require.New(t)
  22. buf := &bytes.Buffer{}
  23. stream := NewStream(ConfigDefault, buf, 4096)
  24. stream.WriteTrue()
  25. stream.WriteFalse()
  26. stream.WriteBool(false)
  27. stream.Flush()
  28. should.Nil(stream.Error)
  29. should.Equal("truefalsefalse", buf.String())
  30. }
  31. func Test_write_val_bool(t *testing.T) {
  32. should := require.New(t)
  33. buf := &bytes.Buffer{}
  34. stream := NewStream(ConfigDefault, buf, 4096)
  35. stream.WriteVal(true)
  36. should.Equal(stream.Buffered(), 4)
  37. stream.Flush()
  38. should.Equal(stream.Buffered(), 0)
  39. should.Nil(stream.Error)
  40. should.Equal("true", buf.String())
  41. }
  42. func Test_encode_string_bool(t *testing.T) {
  43. type TestObject struct {
  44. Field bool `json:",omitempty,string"`
  45. }
  46. should := require.New(t)
  47. output, err := json.Marshal(TestObject{true})
  48. should.Nil(err)
  49. should.Equal(`{"Field":"true"}`, string(output))
  50. output, err = Marshal(TestObject{true})
  51. should.Nil(err)
  52. should.Equal(`{"Field":"true"}`, string(output))
  53. }
  54. func Test_decode_string_bool(t *testing.T) {
  55. type TestObject struct {
  56. Field bool `json:",omitempty,string"`
  57. }
  58. should := require.New(t)
  59. obj := TestObject{}
  60. err := json.Unmarshal([]byte(`{"Field":"true"}`), &obj)
  61. should.Nil(err)
  62. should.True(obj.Field)
  63. obj = TestObject{}
  64. err = json.Unmarshal([]byte(`{"Field":true}`), &obj)
  65. should.NotNil(err)
  66. obj = TestObject{}
  67. err = Unmarshal([]byte(`{"Field":"true"}`), &obj)
  68. should.Nil(err)
  69. should.True(obj.Field)
  70. obj = TestObject{}
  71. err = Unmarshal([]byte(`{"Field":true}`), &obj)
  72. should.NotNil(err)
  73. }
  74. func Test_bool_can_be_null(t *testing.T) {
  75. type TestData struct {
  76. Field bool `json:"field"`
  77. }
  78. should := require.New(t)
  79. obj := TestData{}
  80. data1 := []byte(`{"field": true}`)
  81. err := Unmarshal(data1, &obj)
  82. should.NoError(err)
  83. should.Equal(true, obj.Field)
  84. data2 := []byte(`{"field": null}`)
  85. err = Unmarshal(data2, &obj)
  86. should.NoError(err)
  87. // Same behavior as stdlib, not touching the existing value.
  88. should.Equal(true, obj.Field)
  89. // Checking stdlib behavior as well
  90. obj2 := TestData{}
  91. err = json.Unmarshal(data1, &obj2)
  92. should.NoError(err)
  93. should.Equal(true, obj2.Field)
  94. err = json.Unmarshal(data2, &obj2)
  95. should.NoError(err)
  96. should.Equal(true, obj2.Field)
  97. }