mirror of https://github.com/boa-dev/boa.git
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.
66 lines
1.8 KiB
66 lines
1.8 KiB
8 months ago
|
#![allow(unused_crate_dependencies, missing_docs)]
|
||
|
|
||
|
use std::rc::Rc;
|
||
|
|
||
|
use boa_engine::builtins::promise::PromiseState;
|
||
|
use boa_engine::module::{ModuleLoader, Referrer};
|
||
|
use boa_engine::{js_string, Context, JsResult, JsString, Module, Source};
|
||
|
|
||
|
#[test]
|
||
|
fn test_json_module_from_str() {
|
||
|
struct TestModuleLoader(JsString);
|
||
|
impl ModuleLoader for TestModuleLoader {
|
||
|
fn load_imported_module(
|
||
|
&self,
|
||
|
_referrer: Referrer,
|
||
|
specifier: JsString,
|
||
|
finish_load: Box<dyn FnOnce(JsResult<Module>, &mut Context)>,
|
||
|
context: &mut Context,
|
||
|
) {
|
||
|
assert_eq!(specifier.to_std_string_escaped(), "basic");
|
||
|
|
||
|
finish_load(
|
||
|
Ok(Module::parse_json(self.0.clone(), context).unwrap()),
|
||
|
context,
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
let json_string = js_string!(r#"{"key":"value","other":123}"#);
|
||
|
let mut context = Context::builder()
|
||
|
.module_loader(Rc::new(TestModuleLoader(json_string.clone())))
|
||
|
.build()
|
||
|
.unwrap();
|
||
|
|
||
|
let source = Source::from_bytes(
|
||
|
b"
|
||
|
import basic_json from 'basic';
|
||
|
export let json = basic_json;
|
||
|
",
|
||
|
);
|
||
|
|
||
|
let module = Module::parse(source, None, &mut context).unwrap();
|
||
|
let promise = module.load_link_evaluate(&mut context);
|
||
|
context.run_jobs();
|
||
|
|
||
|
match promise.state() {
|
||
|
PromiseState::Pending => {}
|
||
|
PromiseState::Fulfilled(v) => {
|
||
|
assert!(v.is_undefined());
|
||
|
}
|
||
|
PromiseState::Rejected(e) => {
|
||
|
panic!("Unexpected error: {:?}", e.to_string(&mut context).unwrap());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
let json = module
|
||
|
.namespace(&mut context)
|
||
|
.get(js_string!("json"), &mut context)
|
||
|
.unwrap();
|
||
|
|
||
|
assert_eq!(
|
||
|
JsString::from(json.to_json(&mut context).unwrap().to_string()),
|
||
|
json_string
|
||
|
);
|
||
|
}
|