v2 / vlib / x / json2 / tests / decode_string_test.v
64 lines · 53 sloc · 1.88 KB · 2d33a7f2819dd5fc1f4aa3b3ca0bcc660810d7af
Raw
1import x.json2 as json
2
3fn test_json_escape_low_chars() {
4 assert json.decode[string](r'"\u001b"')! == '\u001b'
5 assert json.decode[string](r'"\u000f"')! == '\u000f'
6 assert json.decode[string](r'" "')! == '\u0020'
7 assert json.decode[string](r'"\u0000"')! == '\u0000'
8}
9
10fn test_json_string() {
11 assert json.decode[string](r'"te\u2714st"')! == 'te✔st'
12 assert json.decode[string](r'"te✔st"')! == 'te✔st'
13 assert json.decode[string]('""')! == ''
14}
15
16fn test_json_string_emoji() {
17 assert json.decode[string](r'"🐈"')! == '🐈'
18 assert json.decode[string](r'"💀"')! == '💀'
19 assert json.decode[string](r'"🐈💀"')! == '🐈💀'
20}
21
22fn test_json_string_non_ascii() {
23 assert json.decode[string](r'"\u3072\u3089\u304c\u306a"')! == 'ひらがな'
24 assert json.decode[string]('"a\\u3072b\\u3089c\\u304cd\\u306ae fgh"')! == 'aひbらcがdなe fgh'
25 assert json.decode[string]('"\\u3072\\u3089\\u304c\\u306a"')! == 'ひらがな'
26}
27
28fn test_utf8_strings_are_not_modified() {
29 assert json.decode[string]('"ü"')! == 'ü'
30 assert json.decode[string]('"Schilddrüsenerkrankungen"')! == 'Schilddrüsenerkrankungen'
31}
32
33fn test_json_string_invalid_escapes() {
34 mut has_error := false
35
36 json.decode[string](r'"\x"') or {
37 if err is json.JsonDecodeError {
38 assert err.line == 1
39 assert err.character == 3
40 assert err.message == 'Syntax: unknown escape sequence'
41 }
42 has_error = true
43 } // Invalid escape
44
45 assert has_error, 'Expected error'
46 has_error = false
47
48 json.decode[string](r'"\u123"') or {
49 if err is json.JsonDecodeError {
50 assert err.line == 1
51 assert err.character == 3
52 assert err.message == 'Syntax: short unicode escape sequence \\u123'
53 }
54 has_error = true
55 } // Incomplete Unicode
56
57 assert has_error, 'Expected error'
58}
59
60fn test_json_string_whitespace() {
61 // Test strings with whitespace
62 assert json.decode[string]('" "')! == ' '
63 assert json.decode[string]('"\t\n\r"')! == '\t\n\r'
64}
65