jsoniter_map_test.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package jsoniter
  2. import (
  3. "testing"
  4. "github.com/json-iterator/go/require"
  5. "math/big"
  6. )
  7. func Test_read_map(t *testing.T) {
  8. should := require.New(t)
  9. iter := ParseString(`{"hello": "world"}`)
  10. m := map[string]string{"1": "2"}
  11. iter.ReadVal(&m)
  12. copy(iter.buf, []byte{0, 0, 0, 0, 0, 0})
  13. should.Equal(map[string]string{"1": "2", "hello": "world"}, m)
  14. }
  15. func Test_read_map_of_interface(t *testing.T) {
  16. should := require.New(t)
  17. iter := ParseString(`{"hello": "world"}`)
  18. m := map[string]interface{}{"1": "2"}
  19. iter.ReadVal(&m)
  20. should.Equal(map[string]interface{}{"1": "2", "hello": "world"}, m)
  21. iter = ParseString(`{"hello": "world"}`)
  22. should.Equal(map[string]interface{}{"hello": "world"}, iter.Read())
  23. }
  24. func Test_wrap_map(t *testing.T) {
  25. should := require.New(t)
  26. any := Wrap(map[string]string{"Field1": "hello"})
  27. should.Equal("hello", any.Get("Field1").ToString())
  28. any = Wrap(map[string]string{"Field1": "hello"})
  29. should.Equal(1, any.Size())
  30. any = Wrap(map[string]string{"Field1": "hello"})
  31. vals := map[string]string{}
  32. var k string
  33. var v Any
  34. for next, hasNext := any.IterateObject(); hasNext; {
  35. k, v, hasNext = next()
  36. if v.ValueType() == String {
  37. vals[k] = v.ToString()
  38. }
  39. }
  40. should.Equal(map[string]string{"Field1":"hello"}, vals)
  41. }
  42. func Test_map_wrapper_any_get_all(t *testing.T) {
  43. should := require.New(t)
  44. any := Wrap(map[string][]int{"Field1": []int{1, 2}})
  45. should.Equal(`{"Field1":1}`, any.Get('*', 0).ToString())
  46. }
  47. func Test_write_val_map(t *testing.T) {
  48. should := require.New(t)
  49. val := map[string]string{"1": "2"}
  50. str, err := MarshalToString(val)
  51. should.Nil(err)
  52. should.Equal(`{"1":"2"}`, str)
  53. }
  54. func Test_slice_of_map(t *testing.T) {
  55. should := require.New(t)
  56. val := []map[string]string{{"1": "2"}}
  57. str, err := MarshalToString(val)
  58. should.Nil(err)
  59. should.Equal(`[{"1":"2"}]`, str)
  60. val = []map[string]string{}
  61. should.Nil(UnmarshalFromString(str, &val))
  62. should.Equal("2", val[0]["1"])
  63. }
  64. func Test_encode_int_key_map(t *testing.T) {
  65. should := require.New(t)
  66. val := map[int]string{1: "2"}
  67. str, err := MarshalToString(val)
  68. should.Nil(err)
  69. should.Equal(`{"1":"2"}`, str)
  70. }
  71. func Test_decode_int_key_map(t *testing.T) {
  72. should := require.New(t)
  73. var val map[int]string
  74. should.Nil(UnmarshalFromString(`{"1":"2"}`, &val))
  75. should.Equal(map[int]string{1: "2"}, val)
  76. }
  77. func Test_encode_TextMarshaler_key_map(t *testing.T) {
  78. should := require.New(t)
  79. f, _, _ := big.ParseFloat("1", 10, 64, big.ToZero)
  80. val := map[*big.Float]string{f: "2"}
  81. str, err := MarshalToString(val)
  82. should.Nil(err)
  83. should.Equal(`{"1":"2"}`, str)
  84. }
  85. func Test_decode_TextMarshaler_key_map(t *testing.T) {
  86. should := require.New(t)
  87. var val map[*big.Float]string
  88. should.Nil(UnmarshalFromString(`{"1":"2"}`, &val))
  89. str, err := MarshalToString(val)
  90. should.Nil(err)
  91. should.Equal(`{"1":"2"}`, str)
  92. }