v2 / vlib / json / tests / json_encode_primite_test.v
54 lines · 45 sloc · 1.15 KB · 8c0528cdad40ff465b6a1dd3535de9564338f677
Raw
1import json
2
3struct Test {
4 field MySumType
5}
6
7type MyInt = int
8type MyString = string
9type MySumType = MyString | int | string
10
11struct UnicodeString {
12 emoji string
13}
14
15fn test_alias_to_primitive() {
16 mut test := Test{
17 field: MyString('foo')
18 }
19 mut encoded := json.encode(test)
20 assert dump(encoded) == '{"field":"foo"}'
21 assert json.decode(Test, '{"field": "foo"}')!.field == MySumType('foo')
22
23 test = Test{
24 field: 'foo'
25 }
26 encoded = json.encode(test)
27 assert dump(encoded) == '{"field":"foo"}'
28 assert json.decode(Test, '{"field":"foo"}')! == test
29
30 test = Test{
31 field: 1
32 }
33 encoded = json.encode(test)
34 assert dump(encoded) == '{"field":1}'
35 assert json.decode(Test, '{"field":1}')! == test
36
37 mut test2 := MyString('foo')
38 encoded = json.encode(test2)
39 assert dump(encoded) == '"foo"'
40
41 mut test3 := MyInt(1000)
42 encoded = json.encode(test3)
43 assert dump(encoded) == '1000'
44}
45
46fn test_encode_unicode_as_ascii_escape_sequences() {
47 valid_json := r'{"emoji":"\u3007"}'
48 decoded := json.decode(UnicodeString, valid_json)!
49 assert decoded.emoji == '〇'
50 assert json.encode(UnicodeString{
51 emoji: '〇'
52 }) == valid_json
53 assert json.encode('😀') == r'"\uD83D\ude00"'
54}
55