Rust编写的JavaScript引擎,该项目是一个试验性质的项目。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

67 lines
1.6 KiB

#![allow(unused_crate_dependencies)]
use boa_engine::value::TryFromJs;
use boa_engine::Source;
#[derive(PartialEq, Eq, TryFromJs)]
struct Deserialize {
required: String,
optional: Option<String>,
}
#[test]
fn optional_missing_try_from_js() {
let mut context = boa_engine::Context::default();
let value = context
.eval(Source::from_bytes(
r#"
let empty = {
"required":"foo",
};
empty
"#,
))
.unwrap();
let deserialized: Deserialize = Deserialize::try_from_js(&value, &mut context).unwrap();
assert_eq!(deserialized.required, "foo");
assert_eq!(deserialized.optional, None);
}
#[test]
fn optional_try_from_js() {
let mut context = boa_engine::Context::default();
let value = context
.eval(Source::from_bytes(
r#"
let empty = {
"required": "foo",
"optional": "bar",
};
empty
"#,
))
.unwrap();
let deserialized: Deserialize = Deserialize::try_from_js(&value, &mut context).unwrap();
assert_eq!(deserialized.required, "foo");
assert_eq!(deserialized.optional, Some("bar".to_string()));
}
#[test]
fn required_missing_try_from_js() {
let mut context = boa_engine::Context::default();
let value = context
.eval(Source::from_bytes(
r"
let value = {};
value
",
))
.unwrap();
assert!(
Deserialize::try_from_js(&value, &mut context).is_err(),
"foo"
);
}