diff options
Diffstat (limited to 'vendor/wasm-bindgen/tests/wasm/jscast.rs')
-rw-r--r-- | vendor/wasm-bindgen/tests/wasm/jscast.rs | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/vendor/wasm-bindgen/tests/wasm/jscast.rs b/vendor/wasm-bindgen/tests/wasm/jscast.rs new file mode 100644 index 000000000..1279634d2 --- /dev/null +++ b/vendor/wasm-bindgen/tests/wasm/jscast.rs @@ -0,0 +1,88 @@ +use wasm_bindgen::prelude::*; +use wasm_bindgen::JsCast; +use wasm_bindgen_test::*; + +#[wasm_bindgen(module = "tests/wasm/jscast.js")] +extern "C" { + type JsCast1; + #[wasm_bindgen(constructor)] + fn new() -> JsCast1; + #[wasm_bindgen(method)] + fn myval(this: &JsCast1) -> u32; + + type JsCast2; + #[wasm_bindgen(constructor)] + fn new() -> JsCast2; + + #[wasm_bindgen(extends = JsCast1)] + type JsCast3; + #[wasm_bindgen(constructor)] + fn new() -> JsCast3; + + #[wasm_bindgen(extends = crate::jscast::JsCast1, extends = JsCast3)] + type JsCast4; + #[wasm_bindgen(constructor)] + fn new() -> JsCast4; +} + +#[wasm_bindgen_test] +fn instanceof_works() { + let a = JsCast1::new(); + let b = JsCast2::new(); + let c = JsCast3::new(); + + assert!(a.is_instance_of::<JsCast1>()); + assert!(!a.is_instance_of::<JsCast2>()); + assert!(!a.is_instance_of::<JsCast3>()); + + assert!(!b.is_instance_of::<JsCast1>()); + assert!(b.is_instance_of::<JsCast2>()); + assert!(!b.is_instance_of::<JsCast3>()); + + assert!(c.is_instance_of::<JsCast1>()); + assert!(!c.is_instance_of::<JsCast2>()); + assert!(c.is_instance_of::<JsCast3>()); +} + +#[wasm_bindgen_test] +fn casting() { + let a = JsCast1::new(); + let b = JsCast2::new(); + let c = JsCast3::new(); + + assert!(a.dyn_ref::<JsCast1>().is_some()); + assert!(a.dyn_ref::<JsCast2>().is_none()); + assert!(a.dyn_ref::<JsCast3>().is_none()); + + assert!(b.dyn_ref::<JsCast1>().is_none()); + assert!(b.dyn_ref::<JsCast2>().is_some()); + assert!(b.dyn_ref::<JsCast3>().is_none()); + + assert!(c.dyn_ref::<JsCast1>().is_some()); + assert!(c.dyn_ref::<JsCast2>().is_none()); + assert!(c.dyn_ref::<JsCast3>().is_some()); +} + +#[wasm_bindgen_test] +fn method_calling() { + let a = JsCast1::new(); + let b = JsCast3::new(); + + assert_eq!(a.myval(), 1); + assert_eq!(b.dyn_ref::<JsCast1>().unwrap().myval(), 3); + assert_eq!(b.unchecked_ref::<JsCast1>().myval(), 3); + let c: &JsCast1 = b.as_ref(); + assert_eq!(c.myval(), 3); +} + +#[wasm_bindgen_test] +fn multiple_layers_of_inheritance() { + let a = JsCast4::new(); + assert!(a.is_instance_of::<JsCast4>()); + assert!(a.is_instance_of::<JsCast3>()); + assert!(a.is_instance_of::<JsCast1>()); + + let _: &JsCast3 = a.as_ref(); + let b: &JsCast1 = a.as_ref(); + assert_eq!(b.myval(), 4); +} |