v

Зеркало из https://github.com/vlang/v
Форк
0
/x
/
decode_struct_test.v 
225 строк · 6.2 Кб
1
import x.json2 as json
2
import time
3

4
const fixed_time = time.new(
5
	year:   2022
6
	month:  3
7
	day:    11
8
	hour:   13
9
	minute: 54
10
	second: 25
11
)
12

13
type StringAlias = string
14
type BoolAlias = bool
15
type IntAlias = int
16

17
type SumTypes = bool | int | string
18

19
enum Enumerates {
20
	a
21
	b
22
	c
23
	d
24
	e = 99
25
	f
26
}
27

28
struct StructType[T] {
29
mut:
30
	val T
31
}
32

33
struct StructTypeSub {
34
	test string
35
}
36

37
struct StructTypeOption[T] {
38
mut:
39
	val ?T
40
}
41

42
struct StructTypePointer[T] {
43
mut:
44
	val &T
45
}
46

47
struct StructTypeSkippedFields[T] {
48
mut:
49
	val  T @[json: '-']
50
	val1 T
51
	val2 T @[json: '-']
52
	val3 T
53
}
54

55
struct StructTypeSkippedFields2[T] {
56
mut:
57
	val  T
58
	val1 T @[json: '-']
59
	val2 T
60
	val3 T @[json: '-']
61
}
62

63
struct StructTypeSkippedFields3[T] {
64
mut:
65
	val  T @[json: '-']
66
	val1 T @[json: '-']
67
	val2 T @[json: '-']
68
	val3 T @[json: '-']
69
}
70

71
struct StructTypeSkippedField4 {
72
mut:
73
	val map[string]string @[json: '-']
74
}
75

76
struct StructTypeSkippedFields5[T] {
77
mut:
78
	val  T @[skip]
79
	val1 T @[skip]
80
	val2 T @[skip]
81
	val3 T @[skip]
82
}
83

84
struct StructTypeSkippedFields6[T] {
85
mut:
86
	val  T
87
	val1 T @[skip]
88
	val2 T
89
	val3 T @[skip]
90
}
91

92
fn test_types() {
93
	assert json.decode[StructType[string]]('{"val": ""}')!.val == ''
94
	assert json.decode[StructType[string]]('{"val": "0"}')!.val == '0'
95
	assert json.decode[StructType[string]]('{"val": "1"}')!.val == '1'
96
	assert json.decode[StructType[string]]('{"val": "2"}')!.val == '2'
97
	assert json.decode[StructType[string]]('{"val": 0}')!.val == '0'
98
	assert json.decode[StructType[string]]('{"val": 1}')!.val == '1'
99
	assert json.decode[StructType[string]]('{"val": 2}')!.val == '2'
100
	assert json.decode[StructType[string]]('{"val": "true"}')!.val == 'true'
101
	assert json.decode[StructType[string]]('{"val": "false"}')!.val == 'false'
102
	assert json.decode[StructType[string]]('{"val": true}')!.val == 'true'
103
	assert json.decode[StructType[string]]('{"val": false}')!.val == 'false'
104

105
	assert json.decode[StructType[bool]]('{"val": ""}')!.val == false
106
	assert json.decode[StructType[bool]]('{"val": "0"}')!.val == false
107
	assert json.decode[StructType[bool]]('{"val": "1"}')!.val == true
108
	assert json.decode[StructType[bool]]('{"val": "2"}')!.val == true
109
	assert json.decode[StructType[bool]]('{"val": 0}')!.val == false
110
	assert json.decode[StructType[bool]]('{"val": 1}')!.val == true
111
	assert json.decode[StructType[bool]]('{"val": 2}')!.val == true
112
	assert json.decode[StructType[bool]]('{"val": "true"}')!.val == true
113
	assert json.decode[StructType[bool]]('{"val": "false"}')!.val == false
114
	assert json.decode[StructType[bool]]('{"val": true}')!.val == true
115
	assert json.decode[StructType[bool]]('{"val": false}')!.val == false
116

117
	assert json.decode[StructType[int]]('{"val": ""}')!.val == 0
118
	assert json.decode[StructType[int]]('{"val": "0"}')!.val == 0
119
	assert json.decode[StructType[int]]('{"val": "1"}')!.val == 1
120
	assert json.decode[StructType[int]]('{"val": "2"}')!.val == 2
121
	assert json.decode[StructType[int]]('{"val": 0}')!.val == 0
122
	assert json.decode[StructType[int]]('{"val": 1}')!.val == 1
123
	assert json.decode[StructType[int]]('{"val": 2}')!.val == 2
124
	assert json.decode[StructType[int]]('{"val": "true"}')!.val == 0
125
	assert json.decode[StructType[int]]('{"val": "false"}')!.val == 0
126
	assert json.decode[StructType[int]]('{"val": true}')!.val == 1
127
	assert json.decode[StructType[int]]('{"val": false}')!.val == 0
128

129
	assert json.decode[StructType[time.Time]]('{"val": "2022-03-11T13:54:25.000Z"}')!.val == fixed_time
130
	assert json.decode[StructType[time.Time]]('{"val": "2001-01-05"}')!.val.year == 2001
131
	assert json.decode[StructType[time.Time]]('{"val": "2001-01-05"}')!.val.month == 1
132
	assert json.decode[StructType[time.Time]]('{"val": "2001-01-05"}')!.val.day == 5
133
	assert json.decode[StructType[time.Time]]('{"val": "2001-01-05"}')!.val.hour == 0
134
	assert json.decode[StructType[time.Time]]('{"val": "2001-01-05"}')!.val.minute == 0
135
	assert json.decode[StructType[time.Time]]('{"val": "2001-01-05"}')!.val.second == 0
136
	assert json.decode[StructType[time.Time]]('{"val": "2022-03-11 13:54:25.000"}')!.val == fixed_time
137
	assert json.decode[StructType[time.Time]]('{"val": 1647006865}')!.val == fixed_time
138
	assert json.decode[StructType[time.Time]]('{"val": "1647006865"}')!.val == fixed_time
139
	if x := json.decode[StructType[time.Time]]('{"val": "invalid time"}') {
140
		assert false
141
	} else {
142
		// dump(err)
143
		assert true
144
	}
145

146
	assert json.decode[StructType[StructTypeSub]]('{"val": {"test": "test"}}')!.val.test == 'test'
147
	if x := json.decode[StructType[StructTypeSub]]('{"val": {"invalid_field": "test"}}') {
148
		assert false
149
	} else {
150
		assert true
151
	}
152

153
	assert json.decode[StructType[Enumerates]]('{"val": 0}')!.val == .a
154
	assert json.decode[StructType[Enumerates]]('{"val": 1}')!.val == .b
155
	assert json.decode[StructType[Enumerates]]('{"val": 99}')!.val == .e
156
	assert json.decode[StructType[Enumerates]]('{}')!.val == .a
157

158
	if x := json.decode[StructTypeOption[Enumerates]]('{"val": 0}')!.val {
159
		assert x == .a
160
	}
161
	if x := json.decode[StructTypeOption[Enumerates]]('{"val": 1}')!.val {
162
		assert x == .b
163
	}
164
	if x := json.decode[StructTypeOption[Enumerates]]('{"val": 99}')!.val {
165
		assert x == .e
166
	}
167
	if x := json.decode[StructTypeOption[Enumerates]]('{}')!.val {
168
		assert false
169
	} else {
170
		assert true
171
	}
172
}
173

174
fn test_skipped_fields() {
175
	if x := json.decode[StructTypeSkippedFields[int]]('{"val":10,"val1":10,"val2":10,"val3":10}') {
176
		assert x.val == 0
177
		assert x.val1 == 10
178
		assert x.val2 == 0
179
		assert x.val3 == 10
180
	} else {
181
		assert false
182
	}
183

184
	if x := json.decode[StructTypeSkippedFields2[int]]('{"val":10,"val1":10,"val2":10,"val3":10}') {
185
		assert x.val == 10
186
		assert x.val1 == 0
187
		assert x.val2 == 10
188
		assert x.val3 == 0
189
	} else {
190
		assert false
191
	}
192

193
	if x := json.decode[StructTypeSkippedFields3[int]]('{"val":10,"val1":10,"val2":10,"val3":10}') {
194
		assert x.val == 0
195
		assert x.val1 == 0
196
		assert x.val2 == 0
197
		assert x.val3 == 0
198
	} else {
199
		assert false
200
	}
201

202
	if x := json.decode[StructTypeSkippedField4]('{"val":{"a":"b"}}') {
203
		assert x.val.len == 0
204
	} else {
205
		assert false
206
	}
207

208
	if x := json.decode[StructTypeSkippedFields5[int]]('{"val":10,"val1":10,"val2":10,"val3":10}') {
209
		assert x.val == 0
210
		assert x.val1 == 0
211
		assert x.val2 == 0
212
		assert x.val3 == 0
213
	} else {
214
		assert false
215
	}
216

217
	if x := json.decode[StructTypeSkippedFields6[int]]('{"val":10,"val1":10,"val2":10,"val3":10}') {
218
		assert x.val == 10
219
		assert x.val1 == 0
220
		assert x.val2 == 10
221
		assert x.val3 == 0
222
	} else {
223
		assert false
224
	}
225
}
226

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.