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\"bé")); } #[test] fn rejects_garbage() { assert!(Json::parse("{oops").is_none()); assert!(Json::parse("").is_none()); assert!(Json::parse("[1,2").is_none()); }