summaryrefslogtreecommitdiff
path: root/core/modules.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/modules.rs')
-rw-r--r--core/modules.rs85
1 files changed, 67 insertions, 18 deletions
diff --git a/core/modules.rs b/core/modules.rs
index 817e1f25e..7b1e0c5a3 100644
--- a/core/modules.rs
+++ b/core/modules.rs
@@ -65,7 +65,7 @@ pub trait ModuleLoader {
&self,
specifier: &str,
referrer: &str,
- is_main: bool,
+ _is_main: bool,
) -> Result<ModuleSpecifier, ErrBox>;
/// Given ModuleSpecifier, load its source code.
@@ -98,6 +98,31 @@ pub trait ModuleLoader {
}
}
+/// Placeholder structure used when creating
+/// isolate that doesn't support module loading.
+pub(crate) struct NoopModuleLoader;
+
+impl ModuleLoader for NoopModuleLoader {
+ fn resolve(
+ &self,
+ _specifier: &str,
+ _referrer: &str,
+ _is_main: bool,
+ ) -> Result<ModuleSpecifier, ErrBox> {
+ Err(ErrBox::error("Module loading is not supported"))
+ }
+
+ fn load(
+ &self,
+ _module_specifier: &ModuleSpecifier,
+ _maybe_referrer: Option<ModuleSpecifier>,
+ _is_dyn_import: bool,
+ ) -> Pin<Box<ModuleSourceFuture>> {
+ async { Err(ErrBox::error("Module loading is not supported")) }
+ .boxed_local()
+ }
+}
+
#[derive(Debug, Eq, PartialEq)]
enum Kind {
Main,
@@ -520,9 +545,9 @@ impl fmt::Display for Deps {
#[cfg(test)]
mod tests {
use super::*;
- use crate::es_isolate::EsIsolate;
use crate::js_check;
use crate::BasicState;
+ use crate::CoreIsolate;
use crate::StartupData;
use futures::future::FutureExt;
use std::error::Error;
@@ -700,8 +725,12 @@ mod tests {
fn test_recursive_load() {
let loader = MockLoader::new();
let loads = loader.loads.clone();
- let mut isolate =
- EsIsolate::new(loader, BasicState::new(), StartupData::None, false);
+ let mut isolate = CoreIsolate::new_with_loader(
+ loader,
+ BasicState::new(),
+ StartupData::None,
+ false,
+ );
let spec = ModuleSpecifier::resolve_url("file:///a.js").unwrap();
let a_id_fut = isolate.load_module(&spec, None);
let a_id = futures::executor::block_on(a_id_fut).expect("Failed to load");
@@ -718,7 +747,7 @@ mod tests {
]
);
- let state_rc = EsIsolate::state(&isolate);
+ let state_rc = CoreIsolate::state(&isolate);
let state = state_rc.borrow();
let modules = &state.modules;
assert_eq!(modules.get_id("file:///a.js"), Some(a_id));
@@ -763,8 +792,12 @@ mod tests {
fn test_circular_load() {
let loader = MockLoader::new();
let loads = loader.loads.clone();
- let mut isolate =
- EsIsolate::new(loader, BasicState::new(), StartupData::None, false);
+ let mut isolate = CoreIsolate::new_with_loader(
+ loader,
+ BasicState::new(),
+ StartupData::None,
+ false,
+ );
let fut = async move {
let spec = ModuleSpecifier::resolve_url("file:///circular1.js").unwrap();
@@ -783,7 +816,7 @@ mod tests {
]
);
- let state_rc = EsIsolate::state(&isolate);
+ let state_rc = CoreIsolate::state(&isolate);
let state = state_rc.borrow();
let modules = &state.modules;
@@ -837,8 +870,12 @@ mod tests {
fn test_redirect_load() {
let loader = MockLoader::new();
let loads = loader.loads.clone();
- let mut isolate =
- EsIsolate::new(loader, BasicState::new(), StartupData::None, false);
+ let mut isolate = CoreIsolate::new_with_loader(
+ loader,
+ BasicState::new(),
+ StartupData::None,
+ false,
+ );
let fut = async move {
let spec = ModuleSpecifier::resolve_url("file:///redirect1.js").unwrap();
@@ -857,7 +894,7 @@ mod tests {
]
);
- let state_rc = EsIsolate::state(&isolate);
+ let state_rc = CoreIsolate::state(&isolate);
let state = state_rc.borrow();
let modules = &state.modules;
@@ -902,8 +939,12 @@ mod tests {
run_in_task(|mut cx| {
let loader = MockLoader::new();
let loads = loader.loads.clone();
- let mut isolate =
- EsIsolate::new(loader, BasicState::new(), StartupData::None, false);
+ let mut isolate = CoreIsolate::new_with_loader(
+ loader,
+ BasicState::new(),
+ StartupData::None,
+ false,
+ );
let spec = ModuleSpecifier::resolve_url("file:///main.js").unwrap();
let mut recursive_load = isolate.load_module(&spec, None).boxed_local();
@@ -948,8 +989,12 @@ mod tests {
fn loader_disappears_after_error() {
run_in_task(|mut cx| {
let loader = MockLoader::new();
- let mut isolate =
- EsIsolate::new(loader, BasicState::new(), StartupData::None, false);
+ let mut isolate = CoreIsolate::new_with_loader(
+ loader,
+ BasicState::new(),
+ StartupData::None,
+ false,
+ );
let spec = ModuleSpecifier::resolve_url("file:///bad_import.js").unwrap();
let mut load_fut = isolate.load_module(&spec, None).boxed_local();
let result = load_fut.poll_unpin(&mut cx);
@@ -977,8 +1022,12 @@ mod tests {
fn recursive_load_main_with_code() {
let loader = MockLoader::new();
let loads = loader.loads.clone();
- let mut isolate =
- EsIsolate::new(loader, BasicState::new(), StartupData::None, false);
+ let mut isolate = CoreIsolate::new_with_loader(
+ loader,
+ BasicState::new(),
+ StartupData::None,
+ false,
+ );
// In default resolution code should be empty.
// Instead we explicitly pass in our own code.
// The behavior should be very similar to /a.js.
@@ -998,7 +1047,7 @@ mod tests {
vec!["file:///b.js", "file:///c.js", "file:///d.js"]
);
- let state_rc = EsIsolate::state(&isolate);
+ let state_rc = CoreIsolate::state(&isolate);
let state = state_rc.borrow();
let modules = &state.modules;