Add web modules (crypto, wiki, define, urban, tinyurl, down) + shared http/json
All checks were successful
ci / check (push) Successful in 48s

This commit is contained in:
Jean Chevronnet 2026-07-29 19:42:36 +00:00
parent 7846f91afe
commit c3139b4e4d
No known key found for this signature in database
GPG key ID: 439666D63A9477E4
14 changed files with 794 additions and 130 deletions

38
tests/json.rs Normal file
View file

@ -0,0 +1,38 @@
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());
}