v2 / vlib / x / json2 / tests / json2_tests / json2_test.v
142 lines · 120 sloc · 3.65 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
27struct StructType[T] {
28mut:
29 val T
30}
31
32fn test_struct_with_bool_to_map() {
33 array_of_struct := [StructType[bool]{
34 val: true
35 }, StructType[bool]{
36 val: false
37 }]
38
39 mut array_of_map := []json.Any{}
40
41 for variable in array_of_struct {
42 array_of_map << json.map_from(variable)
43 }
44
45 assert array_of_map.str() == '[{"val":true},{"val":false}]'
46}
47
48fn test_struct_with_string_to_map() {
49 array_of_struct := [StructType[string]{
50 val: 'true'
51 }, StructType[string]{
52 val: 'false'
53 }]
54
55 mut array_of_map := []json.Any{}
56
57 for variable in array_of_struct {
58 array_of_map << json.map_from(variable)
59 }
60
61 assert array_of_map.str() == '[{"val":"true"},{"val":"false"}]'
62}
63
64fn test_struct_with_array_to_map() {
65 array_of_struct := [StructType[[]bool]{
66 val: [false, true]
67 }, StructType[[]bool]{
68 val: [true, false]
69 }]
70
71 mut array_of_map := []json.Any{}
72
73 for variable in array_of_struct {
74 array_of_map << json.map_from(variable)
75 }
76
77 assert array_of_map.str() == '[{"val":[false,true]},{"val":[true,false]}]'
78}
79
80fn test_struct_with_array_of_arrays_to_map() {
81 array_of_struct := [
82 StructType[[][]bool]{
83 val: [[true, false], [true, false]]
84 },
85 StructType[[][]bool]{
86 val: [[false, true], [false, true]]
87 },
88 ]
89 mut array_of_map := []json.Any{}
90 for variable in array_of_struct {
91 array_of_map << json.map_from(variable)
92 }
93 assert array_of_map.str() == '[{"val":[[true,false],[true,false]]},{"val":[[false,true],[false,true]]}]'
94
95 array_of_struct_int := [
96 StructType[[][]int]{
97 val: [[1, 0], [1, 0]]
98 },
99 StructType[[][]int]{
100 val: [[0, 1], [0, 1]]
101 },
102 ]
103 mut array_of_map_int := []json.Any{}
104 for variable in array_of_struct_int {
105 array_of_map_int << json.map_from(variable)
106 }
107 assert array_of_map_int.str() == '[{"val":[[1,0],[1,0]]},{"val":[[0,1],[0,1]]}]'
108}
109
110fn test_struct_with_number_to_map() {
111 assert json.map_from(StructType[string]{'3'}).str() == '{"val":"3"}'
112 assert json.map_from(StructType[bool]{true}).str() == '{"val":true}'
113 assert json.map_from(StructType[i8]{3}).str() == '{"val":3}'
114 assert json.map_from(StructType[i16]{3}).str() == '{"val":3}'
115 assert json.map_from(StructType[int]{3}).str() == '{"val":3}'
116 assert json.map_from(StructType[i64]{3}).str() == '{"val":3}'
117 assert json.map_from(StructType[i8]{-3}).str() == '{"val":-3}'
118 assert json.map_from(StructType[i16]{i16(-3)}).str() == '{"val":-3}'
119 assert json.map_from(StructType[int]{-3}).str() == '{"val":-3}'
120 assert json.map_from(StructType[i64]{-3}).str() == '{"val":-3}'
121 assert json.map_from(StructType[f32]{3.0}).str() == '{"val":3}'
122 assert json.map_from(StructType[f64]{3.0}).str() == '{"val":3}'
123 assert json.map_from(StructType[u8]{3}).str() == '{"val":3}'
124 assert json.map_from(StructType[u16]{3}).str() == '{"val":3}'
125 assert json.map_from(StructType[u32]{3}).str() == '{"val":3}'
126 assert json.map_from(StructType[u64]{3}).str() == '{"val":3}'
127}
128
129fn test_struct_with_struct_to_map() {
130 assert json.map_from(StructType[StructType[string]]{StructType[string]{'3'}}).str() == '{"val":{"val":"3"}}'
131 assert json.map_from(StructType[StructType[int]]{StructType[int]{3}}).str() == '{"val":{"val":3}}'
132}
133
134fn test_maps() {
135 assert json.decode[map[string]string]('{"test":"abc"}')! == {
136 'test': 'abc'
137 }
138
139 assert json.decode[map[string]StructType[bool]]('{"test":{"val":true}}')! == {
140 'test': StructType[bool]{true}
141 }
142}
143