From 1d1df09e6086423bc672a24eb2e3f2025b014bfb Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 20 Jul 2018 17:01:26 -0700 Subject: [PATCH] Port `WeakMap` tests to `wasm` --- crates/js-sys/src/lib.rs | 8 +- crates/js-sys/tests/all/WeakMap.rs | 183 ---------------------------- crates/js-sys/tests/all/main.rs | 1 - crates/js-sys/tests/wasm/WeakMap.rs | 52 ++++++++ crates/js-sys/tests/wasm/main.rs | 1 + 5 files changed, 57 insertions(+), 188 deletions(-) delete mode 100644 crates/js-sys/tests/all/WeakMap.rs create mode 100644 crates/js-sys/tests/wasm/WeakMap.rs diff --git a/crates/js-sys/src/lib.rs b/crates/js-sys/src/lib.rs index 13586bcf..c0520548 100644 --- a/crates/js-sys/src/lib.rs +++ b/crates/js-sys/src/lib.rs @@ -2253,28 +2253,28 @@ extern "C" { /// /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/set #[wasm_bindgen(method, js_class = "WeakMap")] - pub fn set(this: &WeakMap, key: Object, value: JsValue) -> WeakMap; + pub fn set(this: &WeakMap, key: &Object, value: JsValue) -> WeakMap; /// The get() method returns a specified by key element /// from a [`WeakMap`] object. /// /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/get #[wasm_bindgen(method)] - pub fn get(this: &WeakMap, key: Object) -> JsValue; + pub fn get(this: &WeakMap, key: &Object) -> JsValue; /// The `has()` method returns a boolean indicating whether an element with /// the specified key exists in the [`WeakMap`] object or not. /// /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/has #[wasm_bindgen(method)] - pub fn has(this: &WeakMap, key: Object) -> bool; + pub fn has(this: &WeakMap, key: &Object) -> bool; /// The `delete()` method removes the specified element from a [`WeakMap`] /// object. /// /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/delete #[wasm_bindgen(method)] - pub fn delete(this: &WeakMap, key: Object) -> bool; + pub fn delete(this: &WeakMap, key: &Object) -> bool; } // WeakSet diff --git a/crates/js-sys/tests/all/WeakMap.rs b/crates/js-sys/tests/all/WeakMap.rs deleted file mode 100644 index ff596896..00000000 --- a/crates/js-sys/tests/all/WeakMap.rs +++ /dev/null @@ -1,183 +0,0 @@ -#![allow(non_snake_case)] - -use project; - -#[test] -fn new() { - project() - .file( - "src/lib.rs", - r#" - #![feature(use_extern_macros)] - - extern crate wasm_bindgen; - extern crate js_sys; - use wasm_bindgen::prelude::*; - - #[wasm_bindgen] - pub fn new_weak_map() -> js_sys::WeakMap { - js_sys::WeakMap::new() - } - "#, - ) - .file( - "test.js", - r#" - import * as assert from "assert"; - import * as wasm from "./out"; - - export function test() { - assert.equal(typeof wasm.new_weak_map(), "object"); - } - "#, - ) - .test() -} - -#[test] -fn get() { - project() - .file( - "src/lib.rs", - r#" - #![feature(use_extern_macros)] - - extern crate wasm_bindgen; - extern crate js_sys; - use wasm_bindgen::prelude::*; - - #[wasm_bindgen] - pub fn get_value(this: &js_sys::WeakMap, key: js_sys::Object) -> JsValue { - this.get(key) - } - "#, - ) - .file( - "test.js", - r#" - import * as assert from "assert"; - import * as wasm from "./out"; - - export function test() { - let map = new WeakMap(); - let key = {some: "key"}; - map.set(key, "value"); - assert.equal(wasm.get_value(map, key), "value"); - - let undef = "unexisting_key"; - assert.equal(typeof wasm.get_value(map, undef), "undefined"); - } - "#, - ) - .test() -} - -#[test] -fn set() { - project() - .file( - "src/lib.rs", - r#" - #![feature(use_extern_macros)] - - extern crate wasm_bindgen; - extern crate js_sys; - use wasm_bindgen::prelude::*; - - #[wasm_bindgen] - pub fn set_value(this: &js_sys::WeakMap, key: js_sys::Object, value: JsValue) -> js_sys::WeakMap { - this.set(key, value) - } - "#, - ) - .file( - "test.js", - r#" - import * as assert from "assert"; - import * as wasm from "./out"; - - export function test() { - let map = new WeakMap(); - let key = {some: "key"}; - wasm.set_value(map, key, "value"); - assert.equal(map.get(key), "value"); - } - "#, - ) - .test() -} - -#[test] -fn has() { - project() - .file( - "src/lib.rs", - r#" - #![feature(use_extern_macros)] - - extern crate wasm_bindgen; - extern crate js_sys; - use wasm_bindgen::prelude::*; - - #[wasm_bindgen] - pub fn has_value(this: &js_sys::WeakMap, key: js_sys::Object) -> bool { - this.has(key) - } - "#, - ) - .file( - "test.js", - r#" - import * as assert from "assert"; - import * as wasm from "./out"; - - export function test() { - let map = new WeakMap(); - let key = {some: "key"}; - map.set(key, "value"); - assert.equal(wasm.has_value(map, key), true); - - let undef = "unexisting_key"; - assert.equal(wasm.has_value(map, undef), false); - } - "#, - ) - .test() -} - -#[test] -fn delete() { - project() - .file( - "src/lib.rs", - r#" - #![feature(use_extern_macros)] - - extern crate wasm_bindgen; - extern crate js_sys; - use wasm_bindgen::prelude::*; - - #[wasm_bindgen] - pub fn delete_key(this: &js_sys::WeakMap, key: js_sys::Object) -> bool { - this.delete(key) - } - "#, - ) - .file( - "test.js", - r#" - import * as assert from "assert"; - import * as wasm from "./out"; - - export function test() { - let map = new WeakMap(); - let key = {some: "key"}; - map.set(key, "value"); - assert.equal(wasm.delete_key(map, key), true); - assert.equal(map.has(key), false); - assert.equal(wasm.delete_key(map, key), false); - } - "#, - ) - .test() -} diff --git a/crates/js-sys/tests/all/main.rs b/crates/js-sys/tests/all/main.rs index 74d57434..5bb8ae16 100644 --- a/crates/js-sys/tests/all/main.rs +++ b/crates/js-sys/tests/all/main.rs @@ -12,7 +12,6 @@ fn project() -> project_builder::Project { mod ArrayIterator; mod Reflect; -mod WeakMap; mod WeakSet; mod WebAssembly; diff --git a/crates/js-sys/tests/wasm/WeakMap.rs b/crates/js-sys/tests/wasm/WeakMap.rs new file mode 100644 index 00000000..26d76f12 --- /dev/null +++ b/crates/js-sys/tests/wasm/WeakMap.rs @@ -0,0 +1,52 @@ +use wasm_bindgen::prelude::*; +use wasm_bindgen_test::*; +use js_sys::*; + +#[wasm_bindgen] +extern { + type SomeKey; + #[wasm_bindgen(method, setter, structural)] + fn set_some(this: &SomeKey, val: JsValue); +} + +fn some_key() -> Object { + let key = SomeKey::from(JsValue::from(Object::new())); + key.set_some("key".into()); + Object::from(JsValue::from(key)) +} + +#[wasm_bindgen_test] +fn new() { + assert!(JsValue::from(WeakMap::new()).is_object()); +} + +#[wasm_bindgen_test] +fn get_and_set() { + let map = WeakMap::new(); + let key = some_key(); + map.set(&key, "value".into()); + assert_eq!(map.get(&key), "value"); + assert_eq!(map.get(&Object::new()), JsValue::undefined()); + assert_eq!(map.get(&some_key()), JsValue::undefined()); +} + +#[wasm_bindgen_test] +fn has() { + let map = WeakMap::new(); + let key = some_key(); + map.set(&key, "value".into()); + assert!(map.has(&key)); + assert!(!map.has(&Object::new())); + assert!(!map.has(&some_key())); +} + +#[wasm_bindgen_test] +fn delete() { + let map = WeakMap::new(); + let key = some_key(); + assert!(!map.has(&key)); + map.set(&key, "value".into()); + assert!(map.has(&key)); + map.delete(&key); + assert!(!map.has(&key)); +} diff --git a/crates/js-sys/tests/wasm/main.rs b/crates/js-sys/tests/wasm/main.rs index 72c0ed7a..dff45d9f 100644 --- a/crates/js-sys/tests/wasm/main.rs +++ b/crates/js-sys/tests/wasm/main.rs @@ -27,3 +27,4 @@ pub mod Set; pub mod SetIterator; pub mod Symbol; pub mod TypedArray; +pub mod WeakMap;