|
|
|
#![allow(unused_crate_dependencies, missing_docs)]
|
|
|
|
|
|
|
|
use std::path::PathBuf;
|
|
|
|
use std::rc::Rc;
|
|
|
|
|
|
|
|
use boa_engine::builtins::promise::PromiseState;
|
|
|
|
use boa_engine::module::SimpleModuleLoader;
|
|
|
|
use boa_engine::{js_string, Context, JsValue, Source};
|
|
|
|
|
|
|
|
/// Test that relative imports work with the simple module loader.
|
|
|
|
#[test]
|
|
|
|
fn subdirectories() {
|
|
|
|
let assets_dir =
|
|
|
|
PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()).join("tests/assets");
|
|
|
|
|
|
|
|
let loader = Rc::new(SimpleModuleLoader::new(assets_dir).unwrap());
|
|
|
|
let mut context = Context::builder()
|
|
|
|
.module_loader(loader.clone())
|
|
|
|
.build()
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
let source = Source::from_bytes(b"export { file1 } from 'file1.js';");
|
|
|
|
let module = boa_engine::Module::parse(source, None, &mut context).unwrap();
|
|
|
|
let result = module.load_link_evaluate(&mut context);
|
|
|
|
|
|
|
|
context.run_jobs();
|
|
|
|
match result.state() {
|
|
|
|
PromiseState::Pending => {}
|
|
|
|
PromiseState::Fulfilled(v) => {
|
|
|
|
assert!(v.is_undefined());
|
|
|
|
|
|
|
|
let foo_value = module
|
|
|
|
.namespace(&mut context)
|
|
|
|
.get(js_string!("file1"), &mut context)
|
|
|
|
.unwrap()
|
|
|
|
.as_callable()
|
|
|
|
.unwrap()
|
|
|
|
.call(&JsValue::undefined(), &[], &mut context)
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
assert_eq!(
|
|
|
|
foo_value,
|
|
|
|
JsValue::String(js_string!("file1..file1_1.file1_2"))
|
|
|
|
);
|
|
|
|
}
|
|
|
|
PromiseState::Rejected(reason) => {
|
|
|
|
panic!("Module failed to load: {}", reason.display());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|