rubot/tests/json.rs
2026-07-29 19:42:36 +00:00

38 lines
1.1 KiB
Rust

use rustbot::json::Json;
#[test]
fn parses_object_and_navigates() {
let j = Json::parse(r#"{"a":"x","b":{"c":42}}"#).unwrap();
assert_eq!(j.get("a").and_then(Json::as_str), Some("x"));
assert_eq!(
j.get("b").and_then(|v| v.get("c")).and_then(Json::as_f64),
Some(42.0)
);
assert!(j.get("missing").is_none());
}
#[test]
fn parses_nested_arrays() {
let j = Json::parse(r#"["q",["t1","t2"],[""],["u1"]]"#).unwrap();
assert_eq!(j.idx(0).and_then(Json::as_str), Some("q"));
assert_eq!(
j.idx(1).and_then(|v| v.idx(1)).and_then(Json::as_str),
Some("t2")
);
}
#[test]
fn parses_scalars_and_escapes() {
assert_eq!(Json::parse("true"), Some(Json::Bool(true)));
assert_eq!(Json::parse("null"), Some(Json::Null));
assert_eq!(Json::parse("-3.5e2").and_then(|j| j.as_f64()), Some(-350.0));
let s = Json::parse(r#""a\"bé""#).unwrap();
assert_eq!(s.as_str(), Some("a\""));
}
#[test]
fn rejects_garbage() {
assert!(Json::parse("{oops").is_none());
assert!(Json::parse("").is_none());
assert!(Json::parse("[1,2").is_none());
}