WeakMap.rs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. use js_sys::*;
  2. use wasm_bindgen::prelude::*;
  3. use wasm_bindgen::JsCast;
  4. use wasm_bindgen_test::*;
  5. #[wasm_bindgen]
  6. extern "C" {
  7. type SomeKey;
  8. #[wasm_bindgen(method, setter, structural)]
  9. fn set_some(this: &SomeKey, val: JsValue);
  10. }
  11. fn some_key() -> Object {
  12. let key = SomeKey::from(JsValue::from(Object::new()));
  13. key.set_some("key".into());
  14. Object::from(JsValue::from(key))
  15. }
  16. #[wasm_bindgen_test]
  17. fn new() {
  18. assert!(JsValue::from(WeakMap::new()).is_object());
  19. }
  20. #[wasm_bindgen_test]
  21. fn get_and_set() {
  22. let map = WeakMap::new();
  23. let key = some_key();
  24. map.set(&key, &"value".into());
  25. assert_eq!(map.get(&key), "value");
  26. assert_eq!(map.get(&Object::new()), JsValue::undefined());
  27. assert_eq!(map.get(&some_key()), JsValue::undefined());
  28. }
  29. #[wasm_bindgen_test]
  30. fn has() {
  31. let map = WeakMap::new();
  32. let key = some_key();
  33. map.set(&key, &"value".into());
  34. assert!(map.has(&key));
  35. assert!(!map.has(&Object::new()));
  36. assert!(!map.has(&some_key()));
  37. }
  38. #[wasm_bindgen_test]
  39. fn delete() {
  40. let map = WeakMap::new();
  41. let key = some_key();
  42. assert!(!map.has(&key));
  43. map.set(&key, &"value".into());
  44. assert!(map.has(&key));
  45. map.delete(&key);
  46. assert!(!map.has(&key));
  47. }
  48. #[wasm_bindgen_test]
  49. fn weakmap_inheritance() {
  50. let map = WeakMap::new();
  51. assert!(map.is_instance_of::<WeakMap>());
  52. assert!(map.is_instance_of::<Object>());
  53. let _: &Object = map.as_ref();
  54. }