51 lines
1.4 KiB
Rust
51 lines
1.4 KiB
Rust
//! 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());
|
||
}
|