use super::*;
#[test]
fn ns_object_missing_colons_commas_complex() {
let s = "{'a' 1 'b' 2 'c' 3}"; let out = crate::repair_to_string(s, &Options::default()).unwrap();
let v: serde_json::Value = serde_json::from_str(&out).unwrap();
assert_eq!(v, serde_json::json!({"a":1,"b":2,"c":3}));
}
#[test]
fn ns_array_comments_unicode_near_delimiters() {
let s = "[/*注释*/1/*😀*/ , /*🌀*/2/*💡*/,/*🚀*/3/*✔*/]";
let out = crate::repair_to_string(s, &Options::default()).unwrap();
let v: serde_json::Value = serde_json::from_str(&out).unwrap();
assert_eq!(v, serde_json::json!([1, 2, 3]));
}
#[test]
fn ns_trailing_comma_with_comment_then_close() {
let s = "{a:1, // trailing\n}";
let out = crate::repair_to_string(s, &Options::default()).unwrap();
let v: serde_json::Value = serde_json::from_str(&out).unwrap();
assert_eq!(v, serde_json::json!({"a":1}));
}
#[test]
fn ns_array_missing_last_closer_repaired() {
let s = "[1,2,3"; let out = crate::repair_to_string(s, &Options::default()).unwrap();
let v: serde_json::Value = serde_json::from_str(&out).unwrap();
assert_eq!(v, serde_json::json!([1, 2, 3]));
}
#[test]
fn ns_object_unquoted_unicode_value() {
let s = "{a: 你好}";
let out = crate::repair_to_string(s, &Options::default()).unwrap();
let v: serde_json::Value = serde_json::from_str(&out).unwrap();
assert_eq!(v, serde_json::json!({"a":"你好"}));
}
#[test]
fn ns_array_with_ellipsis_and_comments_mixed() {
let s = "[1,2,/*c*/.../*c*/]";
let out = crate::repair_to_string(s, &Options::default()).unwrap();
let v: serde_json::Value = serde_json::from_str(&out).unwrap();
assert_eq!(v, serde_json::json!([1, 2]));
}
#[test]
fn ns_array_adjacent_strings_without_commas() {
let s = "[\"a\" \"b\" \"c\" 1";
let out = crate::repair_to_string(s, &Options::default()).unwrap();
let v: serde_json::Value = serde_json::from_str(&out).unwrap();
assert_eq!(v, serde_json::json!(["a", "b", "c", 1]));
}
#[test]
fn ns_object_employees_truncated_array_aggressive() {
let o = Options {
aggressive_truncation_fix: true,
..Default::default()
};
let s = "{\"employees\":[\"John\", \"Anna\",";
match crate::repair_to_string(s, &o) {
Ok(out) => {
let v: serde_json::Value = serde_json::from_str(&out).unwrap();
assert_eq!(v, serde_json::json!({"employees":["John","Anna"]}));
}
Err(_) => { }
}
}
#[test]
fn ns_array_fix_embedded_quotes_in_string() {
let s = "[\"lorem \"ipsum\" sic\"]";
let out = crate::repair_to_string(s, &Options::default()).unwrap();
let v: serde_json::Value = serde_json::from_str(&out).unwrap();
let expected1 = serde_json::json!(["lorem \"ipsum\" sic"]);
let expected2 = serde_json::json!(["lorem ", "ipsum", "sic"]);
assert!(v == expected1 || v == expected2);
}
#[test]
fn ns_nested_array_line_break_aggressive() {
let o = Options {
aggressive_truncation_fix: true,
..Default::default()
};
let s = "[[1\n\n]";
let out = crate::repair_to_string(s, &o).unwrap();
let v: serde_json::Value = serde_json::from_str(&out).unwrap();
assert_eq!(v, serde_json::json!([[1]]));
}
#[test]
fn ns_redundant_closers_at_root_ignored() {
let s = "{a:1}}}}\n"; let out = crate::repair_to_string(s, &Options::default()).unwrap();
let v: serde_json::Value = serde_json::from_str(&out).unwrap();
assert_eq!(v, serde_json::json!({"a":1}));
}
#[test]
fn ns_ellipsis_variants() {
let s = "{a:1,/*c*/... ,/*c*/b:2}\n[1,2,/*c*/.../*c*/]";
let out = crate::repair_to_string(s, &Options::default()).unwrap();
let v: serde_json::Value = serde_json::from_str(&out).unwrap();
let arr = v.as_array().expect("wrapped array of values");
assert_eq!(arr.len(), 2);
assert_eq!(arr[0], serde_json::json!({"a":1,"b":2}));
assert_eq!(arr[1], serde_json::json!([1, 2]));
}
#[test]
fn ns_object_missing_colon_and_comma_with_comments() {
let s = "{'a' /*x*/ 1 /*y*/ 'b' /*z*/ 2}";
let out = crate::repair_to_string(s, &Options::default()).unwrap();
let v: serde_json::Value = serde_json::from_str(&out).unwrap();
assert_eq!(v, serde_json::json!({"a":1,"b":2}));
}