v
Зеркало из https://github.com/vlang/v
1import x.json2 as json
2import time
3
4const fixed_time = time.new(
5year: 2022
6month: 3
7day: 11
8hour: 13
9minute: 54
10second: 25
11)
12
13type StringAlias = string
14type BoolAlias = bool
15type IntAlias = int
16
17type SumTypes = bool | int | string
18
19enum Enumerates {
20a
21b
22c
23d
24e = 99
25f
26}
27
28struct StructType[T] {
29mut:
30val T
31}
32
33struct StructTypeSub {
34test string
35}
36
37struct StructTypeOption[T] {
38mut:
39val ?T
40}
41
42struct StructTypePointer[T] {
43mut:
44val &T
45}
46
47struct StructTypeSkippedFields[T] {
48mut:
49val T @[json: '-']
50val1 T
51val2 T @[json: '-']
52val3 T
53}
54
55struct StructTypeSkippedFields2[T] {
56mut:
57val T
58val1 T @[json: '-']
59val2 T
60val3 T @[json: '-']
61}
62
63struct StructTypeSkippedFields3[T] {
64mut:
65val T @[json: '-']
66val1 T @[json: '-']
67val2 T @[json: '-']
68val3 T @[json: '-']
69}
70
71struct StructTypeSkippedField4 {
72mut:
73val map[string]string @[json: '-']
74}
75
76struct StructTypeSkippedFields5[T] {
77mut:
78val T @[skip]
79val1 T @[skip]
80val2 T @[skip]
81val3 T @[skip]
82}
83
84struct StructTypeSkippedFields6[T] {
85mut:
86val T
87val1 T @[skip]
88val2 T
89val3 T @[skip]
90}
91
92fn test_types() {
93assert json.decode[StructType[string]]('{"val": ""}')!.val == ''
94assert json.decode[StructType[string]]('{"val": "0"}')!.val == '0'
95assert json.decode[StructType[string]]('{"val": "1"}')!.val == '1'
96assert json.decode[StructType[string]]('{"val": "2"}')!.val == '2'
97assert json.decode[StructType[string]]('{"val": 0}')!.val == '0'
98assert json.decode[StructType[string]]('{"val": 1}')!.val == '1'
99assert json.decode[StructType[string]]('{"val": 2}')!.val == '2'
100assert json.decode[StructType[string]]('{"val": "true"}')!.val == 'true'
101assert json.decode[StructType[string]]('{"val": "false"}')!.val == 'false'
102assert json.decode[StructType[string]]('{"val": true}')!.val == 'true'
103assert json.decode[StructType[string]]('{"val": false}')!.val == 'false'
104
105assert json.decode[StructType[bool]]('{"val": ""}')!.val == false
106assert json.decode[StructType[bool]]('{"val": "0"}')!.val == false
107assert json.decode[StructType[bool]]('{"val": "1"}')!.val == true
108assert json.decode[StructType[bool]]('{"val": "2"}')!.val == true
109assert json.decode[StructType[bool]]('{"val": 0}')!.val == false
110assert json.decode[StructType[bool]]('{"val": 1}')!.val == true
111assert json.decode[StructType[bool]]('{"val": 2}')!.val == true
112assert json.decode[StructType[bool]]('{"val": "true"}')!.val == true
113assert json.decode[StructType[bool]]('{"val": "false"}')!.val == false
114assert json.decode[StructType[bool]]('{"val": true}')!.val == true
115assert json.decode[StructType[bool]]('{"val": false}')!.val == false
116
117assert json.decode[StructType[int]]('{"val": ""}')!.val == 0
118assert json.decode[StructType[int]]('{"val": "0"}')!.val == 0
119assert json.decode[StructType[int]]('{"val": "1"}')!.val == 1
120assert json.decode[StructType[int]]('{"val": "2"}')!.val == 2
121assert json.decode[StructType[int]]('{"val": 0}')!.val == 0
122assert json.decode[StructType[int]]('{"val": 1}')!.val == 1
123assert json.decode[StructType[int]]('{"val": 2}')!.val == 2
124assert json.decode[StructType[int]]('{"val": "true"}')!.val == 0
125assert json.decode[StructType[int]]('{"val": "false"}')!.val == 0
126assert json.decode[StructType[int]]('{"val": true}')!.val == 1
127assert json.decode[StructType[int]]('{"val": false}')!.val == 0
128
129assert json.decode[StructType[time.Time]]('{"val": "2022-03-11T13:54:25.000Z"}')!.val == fixed_time
130assert json.decode[StructType[time.Time]]('{"val": "2001-01-05"}')!.val.year == 2001
131assert json.decode[StructType[time.Time]]('{"val": "2001-01-05"}')!.val.month == 1
132assert json.decode[StructType[time.Time]]('{"val": "2001-01-05"}')!.val.day == 5
133assert json.decode[StructType[time.Time]]('{"val": "2001-01-05"}')!.val.hour == 0
134assert json.decode[StructType[time.Time]]('{"val": "2001-01-05"}')!.val.minute == 0
135assert json.decode[StructType[time.Time]]('{"val": "2001-01-05"}')!.val.second == 0
136assert json.decode[StructType[time.Time]]('{"val": "2022-03-11 13:54:25.000"}')!.val == fixed_time
137assert json.decode[StructType[time.Time]]('{"val": 1647006865}')!.val == fixed_time
138assert json.decode[StructType[time.Time]]('{"val": "1647006865"}')!.val == fixed_time
139if x := json.decode[StructType[time.Time]]('{"val": "invalid time"}') {
140assert false
141} else {
142// dump(err)
143assert true
144}
145
146assert json.decode[StructType[StructTypeSub]]('{"val": {"test": "test"}}')!.val.test == 'test'
147if x := json.decode[StructType[StructTypeSub]]('{"val": {"invalid_field": "test"}}') {
148assert false
149} else {
150assert true
151}
152
153assert json.decode[StructType[Enumerates]]('{"val": 0}')!.val == .a
154assert json.decode[StructType[Enumerates]]('{"val": 1}')!.val == .b
155assert json.decode[StructType[Enumerates]]('{"val": 99}')!.val == .e
156assert json.decode[StructType[Enumerates]]('{}')!.val == .a
157
158if x := json.decode[StructTypeOption[Enumerates]]('{"val": 0}')!.val {
159assert x == .a
160}
161if x := json.decode[StructTypeOption[Enumerates]]('{"val": 1}')!.val {
162assert x == .b
163}
164if x := json.decode[StructTypeOption[Enumerates]]('{"val": 99}')!.val {
165assert x == .e
166}
167if x := json.decode[StructTypeOption[Enumerates]]('{}')!.val {
168assert false
169} else {
170assert true
171}
172}
173
174fn test_skipped_fields() {
175if x := json.decode[StructTypeSkippedFields[int]]('{"val":10,"val1":10,"val2":10,"val3":10}') {
176assert x.val == 0
177assert x.val1 == 10
178assert x.val2 == 0
179assert x.val3 == 10
180} else {
181assert false
182}
183
184if x := json.decode[StructTypeSkippedFields2[int]]('{"val":10,"val1":10,"val2":10,"val3":10}') {
185assert x.val == 10
186assert x.val1 == 0
187assert x.val2 == 10
188assert x.val3 == 0
189} else {
190assert false
191}
192
193if x := json.decode[StructTypeSkippedFields3[int]]('{"val":10,"val1":10,"val2":10,"val3":10}') {
194assert x.val == 0
195assert x.val1 == 0
196assert x.val2 == 0
197assert x.val3 == 0
198} else {
199assert false
200}
201
202if x := json.decode[StructTypeSkippedField4]('{"val":{"a":"b"}}') {
203assert x.val.len == 0
204} else {
205assert false
206}
207
208if x := json.decode[StructTypeSkippedFields5[int]]('{"val":10,"val1":10,"val2":10,"val3":10}') {
209assert x.val == 0
210assert x.val1 == 0
211assert x.val2 == 0
212assert x.val3 == 0
213} else {
214assert false
215}
216
217if x := json.decode[StructTypeSkippedFields6[int]]('{"val":10,"val1":10,"val2":10,"val3":10}') {
218assert x.val == 10
219assert x.val1 == 0
220assert x.val2 == 10
221assert x.val3 == 0
222} else {
223assert false
224}
225}
226