Download crates/forge_json_repair/tests/complex_repairs.rs from SaylorTwift/forgecode: direct link, hf CLI and curl.
- Browser
- Download file 8.39 kB
-
https://huggingface.co/SaylorTwift/forgecode/resolve/main/crates/forge_json_repair/tests/complex_repairs.rs
- Command line
-
hf download hf://SaylorTwift/forgecode/crates/forge_json_repair/tests/complex_repairs.rs
-
curl -L -o complex_repairs.rs https://huggingface.co/SaylorTwift/forgecode/resolve/main/crates/forge_json_repair/tests/complex_repairs.rs
8.39 kB
| use forge_json_repair::json_repair; | |
| use pretty_assertions::assert_eq; | |
| fn test_newline_separated_json() { | |
| // Basic newline separated JSON (like MongoDB output) | |
| let fixture = "/* 1 */\n{}\n\n/* 2 */\n{}\n\n/* 3 */\n{}\n"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!([{}, {}, {}]); | |
| assert_eq!(actual, expected); | |
| // With existing commas | |
| let fixture = "/* 1 */\n{},\n\n/* 2 */\n{},\n\n/* 3 */\n{}\n"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!([{}, {}, {}]); | |
| assert_eq!(actual, expected); | |
| // With trailing comma | |
| let fixture = "/* 1 */\n{},\n\n/* 2 */\n{},\n\n/* 3 */\n{},\n"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!([{}, {}, {}]); | |
| assert_eq!(actual, expected); | |
| } | |
| fn test_comma_separated_lists() { | |
| let fixture = "1,2,3"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!([1, 2, 3]); | |
| assert_eq!(actual, expected); | |
| let fixture = "1,2,3,"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!([1, 2, 3]); | |
| assert_eq!(actual, expected); | |
| let fixture = "1\n2\n3"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!([1, 2, 3]); | |
| assert_eq!(actual, expected); | |
| let fixture = "a\nb"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!(["a", "b"]); | |
| assert_eq!(actual, expected); | |
| let fixture = "a,b"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!(["a", "b"]); | |
| assert_eq!(actual, expected); | |
| } | |
| fn test_missing_comma_repairs() { | |
| // Missing commas between array items | |
| let fixture = r#"{"array": [{}{}]}"#; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"array": [{}, {}]}); | |
| assert_eq!(actual, expected); | |
| let fixture = r#"{"array": [{} {}]}"#; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"array": [{}, {}]}); | |
| assert_eq!(actual, expected); | |
| let fixture = "{\n\"array\": [{}\n{}]\n}"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"array": [{}, {}]}); | |
| assert_eq!(actual, expected); | |
| let fixture = "{\n\"array\": [\n{}\n{}\n]\n}"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"array": [{}, {}]}); | |
| assert_eq!(actual, expected); | |
| let fixture = "{\n\"array\": [\n1\n2\n]\n}"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"array": [1, 2]}); | |
| assert_eq!(actual, expected); | |
| let fixture = "{\n\"array\": [\n\"a\"\n\"b\"\n]\n}"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"array": ["a", "b"]}); | |
| assert_eq!(actual, expected); | |
| // Should leave normal array as is | |
| let fixture = "[\n{},\n{}\n]"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!([{}, {}]); | |
| assert_eq!(actual, expected); | |
| } | |
| fn test_missing_comma_between_object_properties() { | |
| let fixture = "{\"a\":2\n\"b\":3\n}"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"a": 2, "b": 3}); | |
| assert_eq!(actual, expected); | |
| let fixture = "{\"a\":2\n\"b\":3\n\"c\":4}"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"a": 2, "b": 3, "c": 4}); | |
| assert_eq!(actual, expected); | |
| let fixture = "{\n \"firstName\": \"John\"\n \"lastName\": \"Smith\"}"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"firstName": "John", "lastName": "Smith"}); | |
| assert_eq!(actual, expected); | |
| let fixture = "{\n \"firstName\": \"John\" /* comment */ \n \"lastName\": \"Smith\"}"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"firstName": "John", "lastName": "Smith"}); | |
| assert_eq!(actual, expected); | |
| // Verify parsing a comma after a return | |
| let fixture = "{\n \"firstName\": \"John\"\n , \"lastName\": \"Smith\"}"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"firstName": "John", "lastName": "Smith"}); | |
| assert_eq!(actual, expected); | |
| } | |
| fn test_repair_combination_of_issues() { | |
| let fixture = "{\n\"array\": [\na\nb\n]\n}"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"array": ["a", "b"]}); | |
| assert_eq!(actual, expected); | |
| let fixture = "1\n2"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!([1, 2]); | |
| assert_eq!(actual, expected); | |
| let fixture = "[a,b\nc]"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!(["a", "b", "c"]); | |
| assert_eq!(actual, expected); | |
| } | |
| fn test_repair_numbers_at_end() { | |
| let fixture = r#"{"a":2.}"#; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"a": 2.0}); | |
| assert_eq!(actual, expected); | |
| let fixture = r#"{"a":2e}"#; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"a": 2e0}); | |
| assert_eq!(actual, expected); | |
| let fixture = r#"{"a":2e-}"#; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"a": 2e0}); | |
| assert_eq!(actual, expected); | |
| let fixture = r#"{"a":-}"#; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"a": -0.0}); | |
| assert_eq!(actual, expected); | |
| let fixture = "[2e,]"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!([2e0]); | |
| assert_eq!(actual, expected); | |
| let fixture = "[2e ]"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!([2e0]); | |
| assert_eq!(actual, expected); | |
| let fixture = "[-,]"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!([-0.0]); | |
| assert_eq!(actual, expected); | |
| } | |
| fn test_remove_redundant_closing_brackets() { | |
| let fixture = r#"{"a": 1}}"#; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"a": 1}); | |
| assert_eq!(actual, expected); | |
| let fixture = r#"{"a": 1}}]}}"#; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"a": 1}); | |
| assert_eq!(actual, expected); | |
| let fixture = r#"{"a": 1 } } ] } "#; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"a": 1}); | |
| assert_eq!(actual, expected); | |
| let fixture = r#"{"a":2]"#; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"a": 2}); | |
| assert_eq!(actual, expected); | |
| let fixture = r#"{"a":2,]"#; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({"a": 2}); | |
| assert_eq!(actual, expected); | |
| let fixture = "{}}"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({}); | |
| assert_eq!(actual, expected); | |
| let fixture = "[2,}"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!([2]); | |
| assert_eq!(actual, expected); | |
| let fixture = "[}"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!([]); | |
| assert_eq!(actual, expected); | |
| let fixture = "{]"; | |
| let actual = json_repair::<serde_json::Value>(fixture).unwrap(); | |
| let expected = serde_json::json!({}); | |
| assert_eq!(actual, expected); | |
| } | |