jsoniter_map_test.go 2.1 KB

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