v2 / vlib / x / json2 / tests / encode_struct_todo_test.vv
216 lines · 176 sloc · 10.03 KB · a11de7263f27b9f4e67646a614d162ad2d3084f6
Raw
1import x.json2 as json
2import time
3
4const fixed_time = time.new(
5 year: 2022
6 month: 3
7 day: 11
8 hour: 13
9 minute: 54
10 second: 25
11)
12
13type StringAlias = string
14type BoolAlias = bool
15type IntAlias = int
16type TimeAlias = time.Time
17type StructAlias = StructType[int]
18type EnumAlias = Enumerates
19
20type SumTypes = bool | int | string
21
22enum Enumerates {
23 a
24 b
25 c
26 d
27 e = 99
28 f
29}
30
31struct StructType[T] {
32mut:
33 val T
34}
35
36struct StructTypeOption[T] {
37mut:
38 val ?T
39}
40
41struct StructTypePointer[T] {
42mut:
43 val &T
44}
45
46fn test_option_types() {
47 assert json.encode(StructTypeOption[Enumerates]{ val: Enumerates.a }) == '{"val":0}'
48 assert json.encode(StructTypeOption[Enumerates]{ val: Enumerates.d }) == '{"val":3}'
49 assert json.encode(StructTypeOption[Enumerates]{ val: Enumerates.e }) == '{"val":99}'
50 assert json.encode(StructTypeOption[Enumerates]{ val: Enumerates.f }) == '{"val":100}'
51}
52
53fn test_option_alias() {
54 assert json.encode(StructTypeOption[BoolAlias]{ val: none }) == '{}'
55 assert json.encode(StructTypeOption[BoolAlias]{}) == '{"val":false}'
56 assert json.encode(StructTypeOption[BoolAlias]{ val: false }) == '{"val":false}'
57 assert json.encode(StructTypeOption[BoolAlias]{ val: true }) == '{"val":true}'
58
59 assert json.encode(StructTypeOption[IntAlias]{ val: none }) == '{}'
60 assert json.encode(StructTypeOption[IntAlias]{}) == '{"val":0}'
61 assert json.encode(StructTypeOption[IntAlias]{ val: 0 }) == '{"val":0}'
62 assert json.encode(StructTypeOption[IntAlias]{ val: 1 }) == '{"val":1}'
63
64 assert json.encode(StructTypeOption[EnumAlias]{}) == '{"val":0}'
65 assert json.encode(StructTypeOption[EnumAlias]{ val: Enumerates.a }) == '{"val":0}'
66 assert json.encode(StructTypeOption[EnumAlias]{ val: Enumerates.d }) == '{"val":3}'
67 assert json.encode(StructTypeOption[EnumAlias]{ val: Enumerates.e }) == '{"val":99}'
68 assert json.encode(StructTypeOption[EnumAlias]{ val: Enumerates.f }) == '{"val":100}'
69}
70
71fn test_alias() {
72 assert json.encode(StructType[EnumAlias]{}) == '{"val":0}'
73 assert json.encode(StructType[EnumAlias]{ val: Enumerates.a }) == '{"val":0}'
74 assert json.encode(StructType[EnumAlias]{ val: Enumerates.d }) == '{"val":3}'
75 assert json.encode(StructType[EnumAlias]{ val: Enumerates.e }) == '{"val":99}'
76 assert json.encode(StructType[EnumAlias]{ val: Enumerates.f }) == '{"val":100}'
77}
78
79fn test_sumtypes() {
80 assert json.encode(StructType[SumTypes]{}) == '{}'
81 assert json.encode(StructType[SumTypes]{ val: '' }) == '{"val":""}'
82 assert json.encode(StructType[SumTypes]{ val: 'a' }) == '{"val":"a"}'
83
84 assert json.encode(StructType[SumTypes]{ val: false }) == '{"val":false}'
85 assert json.encode(StructType[SumTypes]{ val: true }) == '{"val":true}'
86
87 assert json.encode(StructType[SumTypes]{ val: 0 }) == '{"val":0}'
88 assert json.encode(StructType[SumTypes]{ val: 1 }) == '{"val":1}'
89
90 assert json.encode(StructType[StructType[SumTypes]]{
91 val: StructType[SumTypes]{
92 val: 1
93 }
94 }) == '{"val":{"val":1}}'
95}
96
97fn test_option_sumtypes() {
98 assert json.encode(StructTypeOption[SumTypes]{}) == '{}' // REVIEW
99
100 assert json.encode(StructTypeOption[SumTypes]{ val: '' }) == '{"val":""}'
101 assert json.encode(StructTypeOption[SumTypes]{ val: 'a' }) == '{"val":"a"}'
102
103 assert json.encode(StructTypeOption[SumTypes]{ val: false }) == '{"val":false}'
104 assert json.encode(StructTypeOption[SumTypes]{ val: true }) == '{"val":true}'
105
106 assert json.encode(StructTypeOption[SumTypes]{ val: 0 }) == '{"val":0}'
107 assert json.encode(StructTypeOption[SumTypes]{ val: 1 }) == '{"val":1}'
108}
109
110fn test_caos() {
111 typed_string_struct := StructType[string]{
112 val: 'a'
113 }
114
115 // StructType
116 assert json.encode(StructType[StructType]{}) == 'TODO'
117 assert json.encode(StructType[StructType[string]]{ val: typed_string_struct }) == 'TODO'
118 assert json.encode(StructType[StructType[StringAlias]]{ val: typed_string_struct }) == 'TODO'
119 assert json.encode(StructType[StructType[SumTypes]]{ val: typed_string_struct }) == 'TODO'
120
121 assert json.encode(StructType[StructTypeOption]{typed_string_struct}) == 'TODO'
122 assert json.encode(StructType[StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO'
123 assert json.encode(StructType[StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO'
124 assert json.encode(StructType[StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO'
125
126 assert json.encode(StructType[StructTypePointer]{typed_string_struct}) == 'TODO'
127 assert json.encode(StructType[StructTypePointer[string]]{typed_string_struct}) == 'TODO'
128 assert json.encode(StructType[StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO'
129 assert json.encode(StructType[StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO'
130
131 // StructTypeOptional
132 assert json.encode(StructTypeOption[StructType]{}) == 'TODO'
133 assert json.encode(StructTypeOption[StructType[string]]{ val: '' }) == 'TODO'
134 assert json.encode(StructTypeOption[StructType[StringAlias]]{ val: '' }) == 'TODO'
135 assert json.encode(StructTypeOption[StructType[SumTypes]]{ val: '' }) == 'TODO'
136
137 assert json.encode(StructTypeOption[StructTypeOption]{typed_string_struct}) == 'TODO'
138 assert json.encode(StructTypeOption[StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO'
139 assert json.encode(StructTypeOption[StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO'
140 assert json.encode(StructTypeOption[StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO'
141
142 assert json.encode(StructTypeOption[StructTypePointer]{typed_string_struct}) == 'TODO'
143 assert json.encode(StructTypeOption[StructTypePointer[string]]{typed_string_struct}) == 'TODO'
144 assert json.encode(StructTypeOption[StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO'
145 assert json.encode(StructTypeOption[StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO'
146
147 // StructTypePointer
148 assert json.encode(StructTypePointer[StructType]{}) == 'TODO'
149 assert json.encode(StructTypePointer[StructType[string]]{ val: '' }) == 'TODO'
150 assert json.encode(StructTypePointer[StructType[StringAlias]]{ val: '' }) == 'TODO'
151 assert json.encode(StructTypePointer[StructType[SumTypes]]{ val: '' }) == 'TODO'
152
153 assert json.encode(StructTypePointer[StructTypeOption]{typed_string_struct}) == 'TODO'
154 assert json.encode(StructTypePointer[StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO'
155 assert json.encode(StructTypePointer[StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO'
156 assert json.encode(StructTypePointer[StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO'
157
158 assert json.encode(StructTypePointer[StructTypePointer]{typed_string_struct}) == 'TODO'
159 assert json.encode(StructTypePointer[StructTypePointer[string]]{typed_string_struct}) == 'TODO'
160 assert json.encode(StructTypePointer[StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO'
161 assert json.encode(StructTypePointer[StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO'
162}
163
164fn test_caos_array() {
165 typed_string_struct := [StructType[string]{
166 val: 'a'
167 }]
168
169 // StructType
170 assert json.encode(StructType[[]StructType]{}) == 'TODO'
171 assert json.encode(StructType[[]StructType[string]]{ val: typed_string_struct }) == 'TODO'
172 assert json.encode(StructType[[]StructType[StringAlias]]{ val: typed_string_struct }) == 'TODO'
173 assert json.encode(StructType[[]StructType[SumTypes]]{ val: typed_string_struct }) == 'TODO'
174
175 assert json.encode(StructType[[]StructTypeOption]{typed_string_struct}) == 'TODO'
176 assert json.encode(StructType[[]StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO'
177 assert json.encode(StructType[[]StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO'
178 assert json.encode(StructType[[]StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO'
179
180 assert json.encode(StructType[[]StructTypePointer]{typed_string_struct}) == 'TODO'
181 assert json.encode(StructType[[]StructTypePointer[string]]{typed_string_struct}) == 'TODO'
182 assert json.encode(StructType[[]StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO'
183 assert json.encode(StructType[[]StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO'
184
185 // StructTypeOptional
186 assert json.encode(StructTypeOption[[]StructType]{}) == 'TODO'
187 assert json.encode(StructTypeOption[[]StructType[string]]{ val: '' }) == 'TODO'
188 assert json.encode(StructTypeOption[[]StructType[StringAlias]]{ val: '' }) == 'TODO'
189 assert json.encode(StructTypeOption[[]StructType[SumTypes]]{ val: '' }) == 'TODO'
190
191 assert json.encode(StructTypeOption[[]StructTypeOption]{typed_string_struct}) == 'TODO'
192 assert json.encode(StructTypeOption[[]StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO'
193 assert json.encode(StructTypeOption[[]StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO'
194 assert json.encode(StructTypeOption[[]StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO'
195
196 assert json.encode(StructTypeOption[[]StructTypePointer]{typed_string_struct}) == 'TODO'
197 assert json.encode(StructTypeOption[[]StructTypePointer[string]]{typed_string_struct}) == 'TODO'
198 assert json.encode(StructTypeOption[[]StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO'
199 assert json.encode(StructTypeOption[[]StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO'
200
201 // StructTypePointer
202 assert json.encode(StructTypePointer[[]StructType]{}) == 'TODO'
203 assert json.encode(StructTypePointer[[]StructType[string]]{ val: '' }) == 'TODO'
204 assert json.encode(StructTypePointer[[]StructType[StringAlias]]{ val: '' }) == 'TODO'
205 assert json.encode(StructTypePointer[[]StructType[SumTypes]]{ val: '' }) == 'TODO'
206
207 assert json.encode(StructTypePointer[[]StructTypeOption]{typed_string_struct}) == 'TODO'
208 assert json.encode(StructTypePointer[[]StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO'
209 assert json.encode(StructTypePointer[[]StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO'
210 assert json.encode(StructTypePointer[[]StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO'
211
212 assert json.encode(StructTypePointer[[]StructTypePointer]{typed_string_struct}) == 'TODO'
213 assert json.encode(StructTypePointer[[]StructTypePointer[string]]{typed_string_struct}) == 'TODO'
214 assert json.encode(StructTypePointer[[]StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO'
215 assert json.encode(StructTypePointer[[]StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO'
216}
217