diff --git a/CHANGELOG.md b/CHANGELOG.md index 1da50a845ef..8020b205688 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -90,6 +90,9 @@ * Fix MDN links to static interface methods. [#4010](https://github.com/rustwasm/wasm-bindgen/pull/4010) + +* Fixed Deno support. + [#3990](https://github.com/rustwasm/wasm-bindgen/pull/3990) -------------------------------------------------------------------------------- diff --git a/crates/cli-support/src/js/mod.rs b/crates/cli-support/src/js/mod.rs index 97a7cbd8044..8604d6f2a9c 100644 --- a/crates/cli-support/src/js/mod.rs +++ b/crates/cli-support/src/js/mod.rs @@ -345,7 +345,8 @@ impl<'a> Context<'a> { }} const wasmInstance = (await WebAssembly.instantiate(wasmCode, imports)).instance; - const wasm = wasmInstance.exports;", + const wasm = wasmInstance.exports; + export const __wasm = wasm;", module_name = module_name ) } diff --git a/crates/cli/src/bin/wasm-bindgen-test-runner/deno.rs b/crates/cli/src/bin/wasm-bindgen-test-runner/deno.rs index a0b05cdbd5b..390b2761512 100644 --- a/crates/cli/src/bin/wasm-bindgen-test-runner/deno.rs +++ b/crates/cli/src/bin/wasm-bindgen-test-runner/deno.rs @@ -18,16 +18,13 @@ pub fn execute( {console_override} - // global.__wbg_test_invoke = f => f(); + window.__wbg_test_invoke = f => f(); // Forward runtime arguments. These arguments are also arguments to the // `wasm-bindgen-test-runner` which forwards them to deno which we // forward to the test harness. this is basically only used for test // filters for now. - cx.args(Deno.args.slice(1)); - - const ok = await cx.run(tests.map(n => wasm.__wasm[n])); - if (!ok) Deno.exit(1); + cx.args(Deno.args); const tests = []; "#, @@ -39,6 +36,11 @@ pub fn execute( js_to_execute.push_str(&format!("tests.push('{}')\n", test)); } + js_to_execute.push_str( + r#"const ok = await cx.run(tests.map(n => wasm.__wasm[n])); +if (!ok) Deno.exit(1);"#, + ); + let js_path = tmpdir.join("run.js"); fs::write(&js_path, js_to_execute).context("failed to write JS file")?; diff --git a/crates/cli/src/bin/wasm-bindgen-test-runner/headless.rs b/crates/cli/src/bin/wasm-bindgen-test-runner/headless.rs index f111902f73f..a4886800260 100644 --- a/crates/cli/src/bin/wasm-bindgen-test-runner/headless.rs +++ b/crates/cli/src/bin/wasm-bindgen-test-runner/headless.rs @@ -3,7 +3,7 @@ use anyhow::{bail, format_err, Context, Error}; use log::{debug, warn}; use rouille::url::Url; use serde::{Deserialize, Serialize}; -use serde_json::{self, json, Map, Value as Json}; +use serde_json::{json, Map, Value as Json}; use std::env; use std::fs::File; use std::io::{self, Read}; diff --git a/crates/cli/src/bin/wasm-bindgen-test-runner/node.rs b/crates/cli/src/bin/wasm-bindgen-test-runner/node.rs index c90d00251ba..0e1718119ae 100644 --- a/crates/cli/src/bin/wasm-bindgen-test-runner/node.rs +++ b/crates/cli/src/bin/wasm-bindgen-test-runner/node.rs @@ -30,7 +30,7 @@ wrap("info"); wrap("warn"); wrap("error"); -cx = new wasm.WasmBindgenTestContext(); +const cx = new wasm.WasmBindgenTestContext(); handlers.on_console_debug = wasm.__wbgtest_console_debug; handlers.on_console_log = wasm.__wbgtest_console_log; handlers.on_console_info = wasm.__wbgtest_console_info; @@ -117,7 +117,10 @@ pub fn execute( #[cfg(unix)] pub fn exec(cmd: &mut Command) -> Result<(), Error> { use std::os::unix::prelude::*; - Err(Error::from(cmd.exec()).context("failed to execute `node`")) + Err(Error::from(cmd.exec()).context(format!( + "failed to execute `{}`", + cmd.get_program().to_string_lossy() + ))) } #[cfg(windows)] diff --git a/crates/test/src/rt/detect.rs b/crates/test/src/rt/detect.rs index 235b14c67d6..f4cdd988d59 100644 --- a/crates/test/src/rt/detect.rs +++ b/crates/test/src/rt/detect.rs @@ -12,6 +12,11 @@ extern "C" { #[wasm_bindgen(method, getter, structural)] fn constructor(me: &Scope) -> Constructor; + #[wasm_bindgen(method, getter, structural, js_name = Deno)] + fn deno(me: &Scope) -> Option; + + type Deno; + type Constructor; #[wasm_bindgen(method, getter, structural)] fn name(me: &Constructor) -> String; @@ -27,7 +32,10 @@ pub fn detect() -> Runtime { "DedicatedWorkerGlobalScope" | "SharedWorkerGlobalScope" | "ServiceWorkerGlobalScope" => Runtime::Worker, - _ => Runtime::Browser, + _ => match scope.deno() { + Some(_) => Runtime::Node, + _ => Runtime::Browser, + }, }, None => Runtime::Node, }