2019-05-17 19:09:31 +00:00
|
|
|
macro_rules! assert_wasi_output {
|
2019-05-30 18:58:52 +00:00
|
|
|
($file:expr, $name:expr, $mapdir_args:expr, $envvar_args:expr, $expected:expr) => {{
|
2019-05-17 22:48:30 +00:00
|
|
|
use wasmer_dev_utils::stdio::StdioCapturer;
|
|
|
|
use wasmer_runtime_core::{backend::Compiler, Func};
|
2019-05-17 19:09:31 +00:00
|
|
|
use wasmer_wasi::generate_import_object;
|
|
|
|
|
|
|
|
#[cfg(feature = "clif")]
|
|
|
|
fn get_compiler() -> impl Compiler {
|
|
|
|
use wasmer_clif_backend::CraneliftCompiler;
|
|
|
|
CraneliftCompiler::new()
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(feature = "llvm")]
|
|
|
|
fn get_compiler() -> impl Compiler {
|
2019-07-06 02:27:33 +00:00
|
|
|
use wasmer_llvm_backend::LLVMCompiler;
|
|
|
|
LLVMCompiler::new()
|
2019-05-17 19:09:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(feature = "singlepass")]
|
|
|
|
fn get_compiler() -> impl Compiler {
|
|
|
|
use wasmer_singlepass_backend::SinglePassCompiler;
|
|
|
|
SinglePassCompiler::new()
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(not(any(feature = "llvm", feature = "clif", feature = "singlepass")))]
|
|
|
|
fn get_compiler() -> impl Compiler {
|
|
|
|
compile_error!("compiler not specified, activate a compiler via features");
|
|
|
|
unreachable!();
|
|
|
|
}
|
|
|
|
|
|
|
|
let wasm_bytes = include_bytes!($file);
|
|
|
|
|
|
|
|
let module = wasmer_runtime_core::compile_with(&wasm_bytes[..], &get_compiler())
|
|
|
|
.expect("WASM can't be compiled");
|
|
|
|
|
2019-05-21 00:43:50 +00:00
|
|
|
let import_object =
|
|
|
|
generate_import_object(vec![], vec![], vec![".".to_string()], $mapdir_args);
|
2019-05-17 19:09:31 +00:00
|
|
|
|
|
|
|
let instance = module
|
|
|
|
.instantiate(&import_object)
|
|
|
|
.map_err(|err| format!("Can't instantiate the WebAssembly module: {:?}", err))
|
|
|
|
.unwrap(); // NOTE: Need to figure what the unwrap is for ??
|
|
|
|
|
|
|
|
let capturer = StdioCapturer::new();
|
|
|
|
|
|
|
|
let start: Func<(), ()> = instance
|
|
|
|
.func("_start")
|
|
|
|
.map_err(|e| format!("{:?}", e))
|
|
|
|
.expect("start function in wasi module");
|
|
|
|
|
2019-05-20 20:55:29 +00:00
|
|
|
start.call().expect("execute the wasm");
|
2019-05-17 19:09:31 +00:00
|
|
|
|
|
|
|
let output = capturer.end().unwrap().0;
|
|
|
|
let expected_output = include_str!($expected);
|
|
|
|
|
|
|
|
assert!(
|
|
|
|
output.contains(expected_output),
|
|
|
|
"Output: `{}` does not contain expected output: `{}`",
|
|
|
|
output,
|
|
|
|
expected_output
|
|
|
|
);
|
|
|
|
}};
|
|
|
|
}
|