summaryrefslogtreecommitdiffstats
path: root/vendor/wasm-bindgen/tests/wasm/jscast.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/wasm-bindgen/tests/wasm/jscast.rs')
-rw-r--r--vendor/wasm-bindgen/tests/wasm/jscast.rs88
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);
+}