///|
test "all byte prefixes of complex documents return ok or err without panic" {
let fixtures = [
"{}", "{\"title\":\"้่ฏฏ ๐\",\"status\":400}", "{\"type\":\"https://example.com/p\",\"meta\":{\"nested\":[true,false,null,1.5]}}",
"{\"detail\":\"line\\nquote \\\" text\",\"instance\":\"/i/%20\"}", "{\"errors\":[{\"pointer\":\"#/name\",\"detail\":\"ๅฟ
ๅกซ\"},{\"pointer\":\"#/age\",\"detail\":\"too small\"}]}",
]
let mut cases = 0
for fixture in fixtures {
let bytes = @utf8.encode(fixture)
for length = 0; length <= bytes.length(); length = length + 1 {
ignore(parse_problem_json_bytes(bytes_prefix(bytes, length)))
cases = cases + 1
}
}
assert_true(cases > 100)
}
///|
test "truncating inside four byte utf8 returns invalid utf8" {
let bytes = @utf8.encode("{\"title\":\"๐\"}")
let mut saw_invalid_utf8 = false
for length = 0; length < bytes.length(); length = length + 1 {
match parse_problem_json_bytes(bytes_prefix(bytes, length)) {
Err(ProblemError(_, InvalidUtf8, _, _)) => saw_invalid_utf8 = true
_ => ()
}
}
assert_true(saw_invalid_utf8)
}