2021-03-01 10:22:36 +01:00
|
|
|
import x.json2
|
2022-03-04 12:39:23 +01:00
|
|
|
import strings
|
2021-03-01 10:22:36 +01:00
|
|
|
|
|
|
|
fn test_json_string_characters() {
|
|
|
|
text := json2.raw_decode(r'"\n\r\b\f\t\\\"\/"') or { '' }
|
2022-03-04 12:39:23 +01:00
|
|
|
assert text.json_str() == '"\\n\\r\\b\\f\\t\\\\\\"\\/"'
|
2021-03-01 10:22:36 +01:00
|
|
|
}
|
|
|
|
|
2021-11-18 06:34:00 +01:00
|
|
|
fn test_json_escape_low_chars() {
|
|
|
|
esc := '\u001b'
|
|
|
|
assert esc.len == 1
|
|
|
|
text := json2.Any(esc)
|
2022-03-04 12:39:23 +01:00
|
|
|
assert text.json_str() == r'"\u001b"'
|
2021-11-18 06:34:00 +01:00
|
|
|
}
|
|
|
|
|
2021-03-01 10:22:36 +01:00
|
|
|
fn test_json_string() {
|
|
|
|
text := json2.Any('te✔st')
|
2022-03-04 12:39:23 +01:00
|
|
|
assert text.json_str() == r'"te\u2714st"'
|
2021-12-15 11:20:05 +01:00
|
|
|
boolean := json2.Any(true)
|
|
|
|
assert boolean.json_str() == 'true'
|
|
|
|
integer := json2.Any(int(-5))
|
|
|
|
assert integer.json_str() == '-5'
|
|
|
|
u64integer := json2.Any(u64(5000))
|
|
|
|
assert u64integer.json_str() == '5000'
|
|
|
|
i64integer := json2.Any(i64(-17))
|
|
|
|
assert i64integer.json_str() == '-17'
|
2021-03-01 10:22:36 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
fn test_json_string_emoji() {
|
|
|
|
text := json2.Any('🐈')
|
2022-03-04 12:39:23 +01:00
|
|
|
assert text.json_str() == r'" "'
|
2021-03-01 10:22:36 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
fn test_json_string_non_ascii() {
|
|
|
|
text := json2.Any('ひらがな')
|
2022-03-04 12:39:23 +01:00
|
|
|
assert text.json_str() == r'"\u3072\u3089\u304c\u306a"'
|
2021-03-01 10:22:36 +01:00
|
|
|
}
|
2021-06-29 10:40:44 +02:00
|
|
|
|
|
|
|
fn test_utf8_strings_are_not_modified() ? {
|
|
|
|
original := '{"s":"Schilddrüsenerkrankungen"}'
|
|
|
|
// dump(original)
|
2022-05-13 05:56:21 +02:00
|
|
|
deresult := json2.raw_decode(original)?
|
2021-06-29 10:40:44 +02:00
|
|
|
// dump(deresult)
|
|
|
|
assert deresult.str() == original
|
|
|
|
}
|
2022-03-04 12:39:23 +01:00
|
|
|
|
|
|
|
fn test_encoder_unescaped_utf32() ? {
|
|
|
|
jap_text := json2.Any('ひらがな')
|
|
|
|
enc := json2.Encoder{
|
|
|
|
escape_unicode: false
|
|
|
|
}
|
|
|
|
|
|
|
|
mut sb := strings.new_builder(20)
|
2022-05-13 05:56:21 +02:00
|
|
|
enc.encode_value(jap_text, mut sb)?
|
2022-03-04 12:39:23 +01:00
|
|
|
|
|
|
|
assert sb.str() == '"$jap_text"'
|
|
|
|
sb.go_back_to(0)
|
|
|
|
|
|
|
|
emoji_text := json2.Any('🐈')
|
2022-05-13 05:56:21 +02:00
|
|
|
enc.encode_value(emoji_text, mut sb)?
|
2022-03-04 12:39:23 +01:00
|
|
|
assert sb.str() == '"$emoji_text"'
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_encoder_prettify() ? {
|
|
|
|
obj := {
|
|
|
|
'hello': json2.Any('world')
|
|
|
|
'arr': [json2.Any('im a string'), [json2.Any('3rd level')]]
|
|
|
|
'obj': {
|
|
|
|
'map': json2.Any('map inside a map')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
enc := json2.Encoder{
|
|
|
|
newline: `\n`
|
|
|
|
newline_spaces_count: 2
|
|
|
|
}
|
|
|
|
mut sb := strings.new_builder(20)
|
2022-05-13 05:56:21 +02:00
|
|
|
enc.encode_value(obj, mut sb)?
|
2022-03-04 12:39:23 +01:00
|
|
|
assert sb.str() == '{
|
|
|
|
"hello": "world",
|
|
|
|
"arr": [
|
|
|
|
"im a string",
|
|
|
|
[
|
|
|
|
"3rd level"
|
|
|
|
]
|
|
|
|
],
|
|
|
|
"obj": {
|
|
|
|
"map": "map inside a map"
|
|
|
|
}
|
|
|
|
}'
|
|
|
|
}
|