From 0aa0c0b4f2f4f3dbb948d5207638e123b4250bc5 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 15 Sep 2026 08:11:18 +0000 Subject: [PATCH] test: add unit tests for parse_json_value in stdlib Added unit tests `test_parse_json_value_simple` and `test_parse_json_value_complex` in `stdlib/src/json.rs` to comprehensively cover the `parse_json_value` mapping logic. Co-authored-by: Tcode-Motion <188012755+Tcode-Motion@users.noreply.github.com> --- stdlib/src/json.rs | 91 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/stdlib/src/json.rs b/stdlib/src/json.rs index 06528ccf..3b87d1af 100644 --- a/stdlib/src/json.rs +++ b/stdlib/src/json.rs @@ -205,4 +205,95 @@ mod tests { let err = result.unwrap_err(); assert!(err.to_string().contains("Cannot stringify type")); } + + #[test] + fn test_parse_json_value_simple() { + // Null + assert_eq!( + parse_json_value(serde_json::Value::Null), + RuntimeValue::Null + ); + + // Bool + assert_eq!( + parse_json_value(serde_json::Value::Bool(true)), + RuntimeValue::Bool(true) + ); + assert_eq!( + parse_json_value(serde_json::Value::Bool(false)), + RuntimeValue::Bool(false) + ); + + // Int + assert_eq!( + parse_json_value(serde_json::Value::Number(serde_json::Number::from(42))), + RuntimeValue::Int(42) + ); + assert_eq!( + parse_json_value(serde_json::Value::Number(serde_json::Number::from(-10))), + RuntimeValue::Int(-10) + ); + + // Float + assert_eq!( + parse_json_value(serde_json::Value::Number( + serde_json::Number::from_f64(3.14).unwrap() + )), + RuntimeValue::Float(3.14) + ); + + // String + assert_eq!( + parse_json_value(serde_json::Value::String("hello".to_string())), + RuntimeValue::Str("hello".to_string()) + ); + } + + #[test] + fn test_parse_json_value_complex() { + // Array + let arr = serde_json::Value::Array(vec![ + serde_json::Value::Number(serde_json::Number::from(1)), + serde_json::Value::String("two".to_string()), + serde_json::Value::Bool(false), + ]); + let parsed_arr = parse_json_value(arr); + match parsed_arr { + RuntimeValue::List { items, is_const } => { + assert!(!is_const); + let borrowed = items.borrow(); + assert_eq!(borrowed.len(), 3); + assert_eq!(borrowed[0], RuntimeValue::Int(1)); + assert_eq!(borrowed[1], RuntimeValue::Str("two".to_string())); + assert_eq!(borrowed[2], RuntimeValue::Bool(false)); + } + _ => panic!("Expected RuntimeValue::List"), + } + + // Object + let mut obj_map = serde_json::Map::new(); + obj_map.insert( + "key1".to_string(), + serde_json::Value::Number(serde_json::Number::from(100)), + ); + obj_map.insert( + "key2".to_string(), + serde_json::Value::String("value2".to_string()), + ); + let obj = serde_json::Value::Object(obj_map); + let parsed_obj = parse_json_value(obj); + match parsed_obj { + RuntimeValue::Map { entries, is_const } => { + assert!(!is_const); + let borrowed = entries.borrow(); + assert_eq!(borrowed.len(), 2); + assert_eq!(borrowed.get("key1").unwrap(), &RuntimeValue::Int(100)); + assert_eq!( + borrowed.get("key2").unwrap(), + &RuntimeValue::Str("value2".to_string()) + ); + } + _ => panic!("Expected RuntimeValue::Map"), + } + } }