| 1 | import x.json2 as json |
| 2 | |
| 3 | fn 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 | |
| 10 | fn 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 | |
| 16 | fn test_json_string_emoji() { |
| 17 | assert json.decode[string](r'"🐈"')! == '🐈' |
| 18 | assert json.decode[string](r'"💀"')! == '💀' |
| 19 | assert json.decode[string](r'"🐈💀"')! == '🐈💀' |
| 20 | } |
| 21 | |
| 22 | fn 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 | |
| 28 | fn test_utf8_strings_are_not_modified() { |
| 29 | assert json.decode[string]('"ü"')! == 'ü' |
| 30 | assert json.decode[string]('"Schilddrüsenerkrankungen"')! == 'Schilddrüsenerkrankungen' |
| 31 | } |
| 32 | |
| 33 | fn 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 | |
| 60 | fn 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 | |