1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00
v/vlib/x/json2/encoder_test.v

139 lines
2.7 KiB
V

import x.json2 as json
import strings
struct StructType[T] {
mut:
val T
}
fn test_json_string_characters() {
text := json.raw_decode(r'"\n\r\b\f\t\\\"\/"') or { '' }
assert text.json_str() == '"\\n\\r\\b\\f\\t\\\\\\"\\/"'
}
fn test_json_escape_low_chars() {
esc := '\u001b'
assert esc.len == 1
text := json.Any(esc)
assert text.json_str() == r'"\u001b"'
}
fn test_json_string() {
text := json.Any('test')
assert text.json_str() == r'"te\u2714st"'
boolean := json.Any(true)
assert boolean.json_str() == 'true'
integer := json.Any(int(-5))
assert integer.json_str() == '-5'
u64integer := json.Any(u64(5000))
assert u64integer.json_str() == '5000'
i64integer := json.Any(i64(-17))
assert i64integer.json_str() == '-17'
}
fn test_json_string_emoji() {
text := json.Any('🐈')
assert text.json_str() == r'" "'
}
fn test_json_string_non_ascii() {
text := json.Any('')
assert text.json_str() == r'"\u3072\u3089\u304c\u306a"'
}
fn test_utf8_strings_are_not_modified() {
original := '{"s":"Schilddrüsenerkrankungen"}'
deresult := json.raw_decode(original)!
assert deresult.str() == original
}
fn test_encoder_unescaped_utf32() ! {
jap_text := json.Any('')
enc := json.Encoder{
escape_unicode: false
}
mut sb := strings.new_builder(20)
defer {
unsafe { sb.free() }
}
enc.encode_value(jap_text, mut sb)!
assert sb.str() == '"${jap_text}"'
sb.go_back_to(0)
emoji_text := json.Any('🐈')
enc.encode_value(emoji_text, mut sb)!
assert sb.str() == '"${emoji_text}"'
}
fn test_encoder_prettify() {
obj := {
'hello': json.Any('world')
'arr': [json.Any('im a string'), [json.Any('3rd level')]]
'obj': {
'map': json.Any('map inside a map')
}
}
enc := json.Encoder{
newline: `\n`
newline_spaces_count: 2
}
mut sb := strings.new_builder(20)
defer {
unsafe { sb.free() }
}
enc.encode_value(obj, mut sb)!
assert sb.str() == '{
"hello": "world",
"arr": [
"im a string",
[
"3rd level"
]
],
"obj": {
"map": "map inside a map"
}
}'
}
pub struct Test {
val string
}
fn test_encode_struct() {
enc := json.encode(Test{'hello!'})
assert enc == '{"val":"hello!"}'
}
pub struct Uri {
protocol string
path string
}
pub fn (u Uri) json_str() string {
return '"${u.protocol}://${u.path}"'
}
fn test_encode_encodable() {
assert json.encode(Uri{'file', 'path/to/file'}) == '"file://path/to/file"'
}
fn test_encode_array() {
array_of_struct := [StructType[[]bool]{
val: [false, true]
}, StructType[[]bool]{
val: [true, false]
}]
assert json.encode_array([1, 2, 3]) == '[1,2,3]'
assert json.encode_array(array_of_struct) == '[{"val":[false,true]},{"val":[true,false]}]'
}
fn test_encode_simple() {
assert json.encode('hello!') == '"hello!"'
assert json.encode(1) == '1'
}