//! value 模块(`JsonValue` DOM)的集成测试。 //! Integration tests for the value module (`JsonValue` DOM). use focus_json::JsonValue; #[test] fn object_preserves_insertion_order() { let mut o = JsonValue::obj(); o.insert("b", JsonValue::Num(2.0)).unwrap(); o.insert("a", JsonValue::Num(1.0)).unwrap(); o.insert("c", JsonValue::Num(3.0)).unwrap(); let keys: Vec<_> = o.entries().map(|(k, _)| k.as_str()).collect(); assert_eq!(keys, vec!["b", "a", "c"]); } #[test] fn insert_replaces_existing_key() { let mut o = JsonValue::obj(); o.insert("x", JsonValue::Num(1.0)).unwrap(); o.insert("x", JsonValue::Num(2.0)).unwrap(); assert_eq!(o.get_num("x"), Some(2.0)); assert_eq!(o.entries().count(), 1); } #[test] fn accessors_return_none_for_wrong_types() { let s = JsonValue::Str("hi".into()); assert_eq!(s.get("x"), None); assert_eq!(s.get_str("x"), None); let mut o = JsonValue::obj(); o.insert("n", JsonValue::Num(1.0)).unwrap(); assert_eq!(o.get_str("n"), None); assert_eq!(o.get_num("n"), Some(1.0)); assert_eq!(o.get_str("missing"), None); } #[test] fn insert_into_array_errors() { let mut a = JsonValue::arr(); let res = a.insert("x", JsonValue::Null); assert!(res.is_err()); } #[test] fn push_into_object_errors() { let mut o = JsonValue::obj(); let res = o.push(JsonValue::Null); assert!(res.is_err()); }