v / vlib / json / tests / json_raw_test.v
52 lines · 46 sloc · 1.01 KB · e2e5cf8db56f3562c7baa735061690be936bdf3e
Raw
1import json
2
3struct TestOptionalRawString {
4 id int
5 data ?string @[raw]
6}
7
8struct TestRawStringifiedObject {
9 metadata string @[raw]
10}
11
12fn test_raw_opt() {
13 test := TestOptionalRawString{
14 id: 1
15 data: 't
16e
17s
18t'
19 }
20 encoded := json.encode(test)
21 assert json.decode(TestOptionalRawString, encoded)!.data? == r'"t\ne\ns\nt"'
22}
23
24fn test_raw_none() {
25 test := TestOptionalRawString{
26 id: 1
27 data: none
28 }
29 encoded := json.encode(test)
30 r := json.decode(TestOptionalRawString, encoded)!.data
31 assert r == none
32}
33
34fn test_raw_empty_string() {
35 test := TestOptionalRawString{
36 id: 1
37 data: ''
38 }
39 encoded := json.encode(test)
40 r := json.decode(TestOptionalRawString, encoded)!.data or { 'z' }
41 assert r == '""'
42}
43
44fn test_stringified_object_returns_error_for_raw_field() {
45 stringified_json :=
46 json.encode('{"metadata":{"topLevelProperty":{"nestedProperty1":"Value 1"}}}')
47 json.decode(TestRawStringifiedObject, stringified_json) or {
48 assert err.msg().starts_with('Json element is not an object:')
49 return
50 }
51 assert false
52}
53