Skip to content

Commit 5a4f94c

Browse files
authored
Merge pull request #135 from Tcode-Motion/add-json-parse-tests-12685239947891944345
🧪 [testing improvement] Add unit tests for parse_json_value in stdlib
2 parents 6339618 + 0aa0c0b commit 5a4f94c

1 file changed

Lines changed: 91 additions & 0 deletions

File tree

‎stdlib/src/json.rs‎

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,4 +205,95 @@ mod tests {
205205
let err = result.unwrap_err();
206206
assert!(err.to_string().contains("Cannot stringify type"));
207207
}
208+
209+
#[test]
210+
fn test_parse_json_value_simple() {
211+
// Null
212+
assert_eq!(
213+
parse_json_value(serde_json::Value::Null),
214+
RuntimeValue::Null
215+
);
216+
217+
// Bool
218+
assert_eq!(
219+
parse_json_value(serde_json::Value::Bool(true)),
220+
RuntimeValue::Bool(true)
221+
);
222+
assert_eq!(
223+
parse_json_value(serde_json::Value::Bool(false)),
224+
RuntimeValue::Bool(false)
225+
);
226+
227+
// Int
228+
assert_eq!(
229+
parse_json_value(serde_json::Value::Number(serde_json::Number::from(42))),
230+
RuntimeValue::Int(42)
231+
);
232+
assert_eq!(
233+
parse_json_value(serde_json::Value::Number(serde_json::Number::from(-10))),
234+
RuntimeValue::Int(-10)
235+
);
236+
237+
// Float
238+
assert_eq!(
239+
parse_json_value(serde_json::Value::Number(
240+
serde_json::Number::from_f64(3.14).unwrap()
241+
)),
242+
RuntimeValue::Float(3.14)
243+
);
244+
245+
// String
246+
assert_eq!(
247+
parse_json_value(serde_json::Value::String("hello".to_string())),
248+
RuntimeValue::Str("hello".to_string())
249+
);
250+
}
251+
252+
#[test]
253+
fn test_parse_json_value_complex() {
254+
// Array
255+
let arr = serde_json::Value::Array(vec![
256+
serde_json::Value::Number(serde_json::Number::from(1)),
257+
serde_json::Value::String("two".to_string()),
258+
serde_json::Value::Bool(false),
259+
]);
260+
let parsed_arr = parse_json_value(arr);
261+
match parsed_arr {
262+
RuntimeValue::List { items, is_const } => {
263+
assert!(!is_const);
264+
let borrowed = items.borrow();
265+
assert_eq!(borrowed.len(), 3);
266+
assert_eq!(borrowed[0], RuntimeValue::Int(1));
267+
assert_eq!(borrowed[1], RuntimeValue::Str("two".to_string()));
268+
assert_eq!(borrowed[2], RuntimeValue::Bool(false));
269+
}
270+
_ => panic!("Expected RuntimeValue::List"),
271+
}
272+
273+
// Object
274+
let mut obj_map = serde_json::Map::new();
275+
obj_map.insert(
276+
"key1".to_string(),
277+
serde_json::Value::Number(serde_json::Number::from(100)),
278+
);
279+
obj_map.insert(
280+
"key2".to_string(),
281+
serde_json::Value::String("value2".to_string()),
282+
);
283+
let obj = serde_json::Value::Object(obj_map);
284+
let parsed_obj = parse_json_value(obj);
285+
match parsed_obj {
286+
RuntimeValue::Map { entries, is_const } => {
287+
assert!(!is_const);
288+
let borrowed = entries.borrow();
289+
assert_eq!(borrowed.len(), 2);
290+
assert_eq!(borrowed.get("key1").unwrap(), &RuntimeValue::Int(100));
291+
assert_eq!(
292+
borrowed.get("key2").unwrap(),
293+
&RuntimeValue::Str("value2".to_string())
294+
);
295+
}
296+
_ => panic!("Expected RuntimeValue::Map"),
297+
}
298+
}
208299
}

0 commit comments

Comments
 (0)