Catch errors in Table and Module constructors

This commit is contained in:
Frazer McLean
2018-08-20 22:12:29 +02:00
parent 7432f5ff5c
commit 1ea1410f98
3 changed files with 34 additions and 11 deletions

View File

@ -17,7 +17,12 @@ function getTableObject() {
return { element: "anyfunc", initial: 1 }
}
function getInvalidTableObject() {
return { element: "anyfunc", initial: 1, maximum: 0 }
}
module.exports = {
getWasmArray,
getInvalidTableObject,
getTableObject,
getWasmArray,
};

View File

@ -11,6 +11,9 @@ extern {
#[wasm_bindgen(js_name = getTableObject)]
fn get_table_object() -> Object;
#[wasm_bindgen(js_name = getInvalidTableObject)]
fn get_invalid_table_object() -> Object;
}
fn get_invalid_wasm() -> JsValue {
@ -66,46 +69,61 @@ fn compile_valid() -> impl Future<Item = (), Error = JsValue> {
#[wasm_bindgen_test]
fn module_inheritance() {
let module = WebAssembly::Module::new(&get_valid_wasm());
let module = WebAssembly::Module::new(&get_valid_wasm()).unwrap();
assert!(module.is_instance_of::<WebAssembly::Module>());
assert!(module.is_instance_of::<Object>());
let _: &Object = module.as_ref();
}
#[wasm_bindgen_test]
fn module_error() {
let error = WebAssembly::Module::new(&get_invalid_wasm()).err().unwrap();
assert!(error.is_instance_of::<WebAssembly::CompileError>());
let error = WebAssembly::Module::new(&get_bad_type_wasm()).err().unwrap();
assert!(error.is_instance_of::<TypeError>());
}
#[wasm_bindgen_test]
fn module_custom_sections() {
let module = WebAssembly::Module::new(&get_valid_wasm());
let module = WebAssembly::Module::new(&get_valid_wasm()).unwrap();
let cust_sec = WebAssembly::Module::custom_sections(&module, "abcd");
assert_eq!(cust_sec.length(), 0);
}
#[wasm_bindgen_test]
fn module_exports() {
let module = WebAssembly::Module::new(&get_valid_wasm());
let module = WebAssembly::Module::new(&get_valid_wasm()).unwrap();
let exports = WebAssembly::Module::exports(&module);
assert_eq!(exports.length(), 1);
}
#[wasm_bindgen_test]
fn module_imports() {
let module = WebAssembly::Module::new(&get_valid_wasm());
let module = WebAssembly::Module::new(&get_valid_wasm()).unwrap();
let imports = WebAssembly::Module::imports(&module);
assert_eq!(imports.length(), 1);
}
#[wasm_bindgen_test]
fn table_inheritance() {
let table = WebAssembly::Table::new(&get_table_object().into());
let table = WebAssembly::Table::new(&get_table_object().into()).unwrap();
assert!(table.is_instance_of::<WebAssembly::Table>());
assert!(table.is_instance_of::<Object>());
let _: &Object = table.as_ref();
}
#[wasm_bindgen_test]
fn table_error() {
let error = WebAssembly::Table::new(&get_invalid_table_object()).err().unwrap();
assert!(error.is_instance_of::<RangeError>());
}
#[wasm_bindgen_test]
fn table() {
let table = WebAssembly::Table::new(&get_table_object().into());
let table = WebAssembly::Table::new(&get_table_object().into()).unwrap();
assert_eq!(table.length(), 1);
}