File size: 1,990 Bytes
1851bae | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | use forge_json_repair::json_repair;
use pretty_assertions::assert_eq;
#[test]
fn test_parse_valid_json() {
// Full JSON object
let text = r#"{"a":2.3e100,"b":"str","c":null,"d":false,"e":[1,2,3]}"#;
let actual = json_repair::<serde_json::Value>(text).unwrap();
let expected = serde_json::from_str::<serde_json::Value>(text).unwrap();
assert_eq!(actual, expected);
// Whitespace
assert_repair(" { \n } \t ");
// Objects
assert_repair("{}");
assert_repair("{ }");
assert_repair(r#"{"a": {}}"#);
assert_repair(r#"{"a": "b"}"#);
assert_repair(r#"{"a": 2}"#);
// Arrays
assert_repair("[]");
assert_repair("[ ]");
assert_repair("[1,2,3]");
assert_repair("[ 1 , 2 , 3 ]");
assert_repair("[1,2,[3,4,5]]");
assert_repair("[{}]");
assert_repair(r#"{"a":[]}"#);
assert_repair(r#"[1, "hi", true, false, null, {}, []]"#);
// Numbers
assert_repair("23");
assert_repair("0");
assert_repair("0e+2");
assert_repair("0.0");
assert_repair("-0");
assert_repair("2.3");
assert_repair("2300e3");
assert_repair("2300e+3");
assert_repair("2300e-3");
assert_repair("-2");
assert_repair("2e-3");
assert_repair("2.3e-3");
// Strings
assert_repair(r#""str""#);
assert_repair(r#""\"\\\\/\\b\\f\\n\\r\\t""#);
assert_repair(r#""\\u260E""#);
// Keywords
assert_repair("true");
assert_repair("false");
assert_repair("null");
// String delimiters
assert_repair(r#""""#);
assert_repair(r#""[""#);
assert_repair(r#""]""#);
assert_repair(r#""{""#);
assert_repair(r#""}""#);
assert_repair(r#"":""#);
assert_repair(r#"",""#);
}
// Helper function to assert that input is repaired to itself (valid JSON)
fn assert_repair(text: &str) {
let actual = json_repair::<serde_json::Value>(text).unwrap();
let expected = serde_json::from_str::<serde_json::Value>(text).unwrap();
assert_eq!(actual, expected);
}
|