v2 / vlib / x / json2 / tests / checker_test.v
184 lines · 167 sloc · 4.1 KB · 2d33a7f2819dd5fc1f4aa3b3ca0bcc660810d7af
Raw
1import x.json2 as json
2
3fn test_check_if_json_match() {
4 // /* Test wrong string values */
5 mut has_error := false
6
7 json.decode[string]('{"key": "value"}') or {
8 if err is json.JsonDecodeError {
9 assert err.line == 1
10 assert err.character == 1
11 assert err.message == 'Data: Expected string, but got object'
12 }
13 has_error = true
14 }
15 assert has_error, 'Expected error'
16 has_error = false
17
18 json.decode[map[string]string]('"value"') or {
19 if err is json.JsonDecodeError {
20 assert err.line == 1
21 assert err.character == 1
22 assert err.message == 'Data: Expected object, but got string'
23 }
24 has_error = true
25 }
26 assert has_error, 'Expected error'
27 has_error = false
28
29 json.decode[[]int]('{"key": "value"}') or {
30 if err is json.JsonDecodeError {
31 assert err.line == 1
32 assert err.character == 1
33 assert err.message == 'Data: Expected array, but got object'
34 }
35 has_error = true
36 }
37 assert has_error, 'Expected error'
38 has_error = false
39
40 json.decode[string]('[1, 2, 3]') or {
41 if err is json.JsonDecodeError {
42 assert err.line == 1
43 assert err.character == 1
44 assert err.message == 'Data: Expected string, but got array'
45 }
46 has_error = true
47 }
48 assert has_error, 'Expected error'
49 has_error = false
50
51 json.decode[int]('{"key": "value"}') or {
52 if err is json.JsonDecodeError {
53 assert err.line == 1
54 assert err.character == 1
55 assert err.message == 'Data: Expected number, but got object'
56 }
57 has_error = true
58 }
59 assert has_error, 'Expected error'
60 has_error = false
61
62 json.decode[bool]('{"key": "value"}') or {
63 if err is json.JsonDecodeError {
64 assert err.line == 1
65 assert err.character == 1
66 assert err.message == 'Data: Expected boolean, but got object'
67 }
68 has_error = true
69 }
70 assert has_error, 'Expected error'
71 has_error = false
72
73 // /* Right string values */
74 json.decode[string]('"value"') or { assert false }
75
76 json.decode[map[string]string]('{"key": "value"}') or { assert false }
77
78 json.decode[[]int]('[1, 2, 3]') or { assert false }
79
80 json.decode[string]('"string"') or { assert false }
81
82 json.decode[int]('123') or { assert false }
83
84 json.decode[bool]('true') or { assert false }
85
86 json.decode[bool]('false') or { assert false }
87}
88
89fn test_check_json_format() {
90 json_and_error_message := [
91 {
92 'json': ']'
93 'error': 'Syntax: unknown value kind'
94 },
95 {
96 'json': '}'
97 'error': 'Syntax: unknown value kind'
98 },
99 {
100 'json': 'truely'
101 'error': 'Syntax: invalid value. Unexpected character after boolean end'
102 },
103 {
104 'json': '0[1]'
105 'error': 'Syntax: invalid value. Unexpected character after number end'
106 },
107 {
108 'json': '[1, 2, g3]'
109 'error': 'Syntax: unknown value kind'
110 },
111 {
112 'json': '[1, 2,, 3]'
113 'error': 'Syntax: unknown value kind'
114 },
115 {
116 'json': '{"key": 123'
117 'error': 'Syntax: Expecting object key' // improve message
118 },
119 {
120 'json': '{"key": 123,'
121 'error': 'Syntax: EOF: expected object key'
122 },
123 {
124 'json': '{"key": 123, "key2": 456,}'
125 'error': 'Syntax: Cannot use `,`, before `}`'
126 },
127 {
128 'json': '[[1, 2, 3], [4, 5, 6],]'
129 'error': 'Syntax: Cannot use `,`, before `]`'
130 },
131 {
132 'json': ' '
133 'error': 'Syntax: EOF: empty json'
134 },
135 {
136 'json': '"'
137 'error': 'Syntax: EOF: string not closed'
138 },
139 {
140 'json': '"not closed'
141 'error': 'Syntax: EOF: string not closed'
142 },
143 {
144 'json': '"\\"'
145 'error': 'Syntax: EOF: string not closed'
146 },
147 {
148 'json': '"\\u8"'
149 'error': 'Syntax: short unicode escape sequence \\u8'
150 },
151 {
152 'json': '['
153 'error': 'Syntax: EOF: expected array end'
154 },
155 {
156 'json': '[ '
157 'error': 'Syntax: EOF: expected array end'
158 },
159 {
160 'json': '{'
161 'error': 'Syntax: EOF: expected object end'
162 },
163 {
164 'json': '{ '
165 'error': 'Syntax: EOF: expected object end'
166 },
167 {
168 'json': '{"key": "value" '
169 'error': 'Syntax: EOF: expected object end'
170 },
171 ]
172
173 for json_and_error in json_and_error_message {
174 mut has_error := false
175
176 json.decode[json.Any](json_and_error['json']) or {
177 if err is json.JsonDecodeError {
178 assert err.message == json_and_error['error']
179 }
180 has_error = true
181 }
182 assert has_error, 'Expected error ${json_and_error['error']}'
183 }
184}
185