#![cfg(feature = "serde")]
use serde::de::DeserializeSeed;
use jimtcl::Interp;
use jimtcl::{JimError, JimResult};
#[test]
pub fn test_null() -> JimResult<()> {
let interp = Interp::new()?;
let input = serde_json::de::StrRead::new("null");
let mut json_de = serde_json::Deserializer::new(input);
let jim = interp.deserialize(&mut json_de).map_err(JimError::wrap)?;
assert!(jim.is_empty());
assert_eq!(&jim.to_string(), "");
Ok(())
}
#[test]
pub fn test_str() -> JimResult<()> {
let interp = Interp::new()?;
let input = serde_json::de::StrRead::new("\"HACKEM MUCHE\"");
let mut json_de = serde_json::Deserializer::new(input);
let jim = interp.deserialize(&mut json_de).map_err(JimError::wrap)?;
assert!(!jim.is_empty());
assert_eq!(jim.len(), 12);
assert_eq!(&jim.to_string(), "HACKEM MUCHE");
Ok(())
}
#[test]
pub fn test_list() -> JimResult<()> {
let interp = Interp::new()?;
let input = serde_json::de::StrRead::new("[1, false]");
let mut json_de = serde_json::Deserializer::new(input);
let jim = interp.deserialize(&mut json_de).map_err(JimError::wrap)?;
assert!(!jim.is_empty());
assert_eq!(jim.list_length(), 2);
assert_eq!(&jim.to_string(), "1 0");
Ok(())
}
#[test]
pub fn test_dict() -> JimResult<()> {
let interp = Interp::new()?;
let input = serde_json::de::StrRead::new("{\"x\": 17}");
let mut json_de = serde_json::Deserializer::new(input);
let jim = interp.deserialize(&mut json_de).map_err(JimError::wrap)?;
assert!(!jim.is_empty());
assert_eq!(jim.list_length(), 2);
assert_eq!(jim.dict_size()?, 1);
let val = jim.dict_get("x")?.unwrap();
let n = u32::try_from(&val)?;
assert_eq!(n, 17);
Ok(())
}