v2 / vlib / x / json2 / tests / json2_test.v
164 lines · 141 sloc · 4.23 KB · 2d33a7f2819dd5fc1f4aa3b3ca0bcc660810d7af
Raw
1import x.json2 as json
2
3enum JobTitle {
4 manager
5 executive
6 worker
7}
8
9struct Employee {
10pub mut:
11 name string
12 age int
13 salary f32
14 title JobTitle
15}
16
17fn test_fast_raw_decode() {
18 s := '{"name":"Peter","age":28,"salary":95000.5,"title":2}'
19 o := json.decode[json.Any](s) or {
20 assert false
21 json.Any('')
22 }
23 str := o.str()
24 assert str == '{"name":"Peter","age":28,"salary":95000.5,"title":2}'
25}
26
27fn test_character_unescape() {
28 message := r'{
29 "newline": "new\nline",
30 "tab": "\ttab",
31 "backslash": "back\\slash",
32 "quotes": "\"quotes\"",
33 "slash":"\/dev\/null"
34}'
35 mut obj := json.decode[json.Any](message) or {
36 println(err)
37 assert false
38 return
39 }
40 lines := obj.as_map()
41 assert lines['newline'] or { 0 }.str() == 'new\nline'
42 assert lines['tab'] or { 0 }.str() == '\ttab'
43 assert lines['backslash'] or { 0 }.str() == 'back\\slash'
44 assert lines['quotes'] or { 0 }.str() == '"quotes"'
45 assert lines['slash'] or { 0 }.str() == '/dev/null'
46}
47
48struct StructType[T] {
49mut:
50 val T
51}
52
53fn test_struct_with_bool_to_map() {
54 array_of_struct := [StructType[bool]{
55 val: true
56 }, StructType[bool]{
57 val: false
58 }]
59
60 mut array_of_map := []json.Any{}
61
62 for variable in array_of_struct {
63 array_of_map << json.map_from(variable)
64 }
65
66 assert array_of_map.str() == '[{"val":true},{"val":false}]'
67}
68
69fn test_struct_with_string_to_map() {
70 array_of_struct := [StructType[string]{
71 val: 'true'
72 }, StructType[string]{
73 val: 'false'
74 }]
75
76 mut array_of_map := []json.Any{}
77
78 for variable in array_of_struct {
79 array_of_map << json.map_from(variable)
80 }
81
82 assert array_of_map.str() == '[{"val":"true"},{"val":"false"}]'
83}
84
85fn test_struct_with_array_to_map() {
86 array_of_struct := [StructType[[]bool]{
87 val: [false, true]
88 }, StructType[[]bool]{
89 val: [true, false]
90 }]
91
92 mut array_of_map := []json.Any{}
93
94 for variable in array_of_struct {
95 array_of_map << json.map_from(variable)
96 }
97
98 assert array_of_map.str() == '[{"val":[false,true]},{"val":[true,false]}]'
99}
100
101fn test_struct_with_array_of_arrays_to_map() {
102 array_of_struct := [
103 StructType[[][]bool]{
104 val: [[true, false], [true, false]]
105 },
106 StructType[[][]bool]{
107 val: [[false, true], [false, true]]
108 },
109 ]
110 mut array_of_map := []json.Any{}
111 for variable in array_of_struct {
112 array_of_map << json.map_from(variable)
113 }
114 assert array_of_map.str() == '[{"val":[[true,false],[true,false]]},{"val":[[false,true],[false,true]]}]'
115
116 array_of_struct_int := [
117 StructType[[][]int]{
118 val: [[1, 0], [1, 0]]
119 },
120 StructType[[][]int]{
121 val: [[0, 1], [0, 1]]
122 },
123 ]
124 mut array_of_map_int := []json.Any{}
125 for variable in array_of_struct_int {
126 array_of_map_int << json.map_from(variable)
127 }
128 assert array_of_map_int.str() == '[{"val":[[1,0],[1,0]]},{"val":[[0,1],[0,1]]}]'
129}
130
131fn test_struct_with_number_to_map() {
132 assert json.map_from(StructType[string]{'3'}).str() == '{"val":"3"}'
133 assert json.map_from(StructType[bool]{true}).str() == '{"val":true}'
134 assert json.map_from(StructType[i8]{3}).str() == '{"val":3}'
135 assert json.map_from(StructType[i16]{3}).str() == '{"val":3}'
136 assert json.map_from(StructType[int]{3}).str() == '{"val":3}'
137 assert json.map_from(StructType[i64]{3}).str() == '{"val":3}'
138 assert json.map_from(StructType[i8]{-3}).str() == '{"val":-3}'
139 assert json.map_from(StructType[i16]{i16(-3)}).str() == '{"val":-3}'
140 assert json.map_from(StructType[int]{-3}).str() == '{"val":-3}'
141 assert json.map_from(StructType[i64]{-3}).str() == '{"val":-3}'
142 assert json.map_from(StructType[f32]{3.0}).str() == '{"val":3}'
143 assert json.map_from(StructType[f64]{3.0}).str() == '{"val":3}'
144 assert json.map_from(StructType[u8]{3}).str() == '{"val":3}'
145 assert json.map_from(StructType[u16]{3}).str() == '{"val":3}'
146 assert json.map_from(StructType[u32]{3}).str() == '{"val":3}'
147 assert json.map_from(StructType[u64]{3}).str() == '{"val":3}'
148}
149
150fn test_struct_with_struct_to_map() {
151 assert json.map_from(StructType[StructType[string]]{StructType[string]{'3'}}).str() == '{"val":{"val":"3"}}'
152 assert json.map_from(StructType[StructType[int]]{StructType[int]{3}}).str() == '{"val":{"val":3}}'
153}
154
155fn test_maps() {
156 assert json.decode[map[string]string]('{"test":"abc"}')! == {
157 'test': 'abc'
158 }
159
160 // assert json.decode[map[string]StructType[bool]]('{"test":{"val":true}}') or {
161 // dump(err)
162 // assert false
163 // } == {"test":StructType[bool]{true}}
164}
165