From 54abca7344fe9f58e9f1cce36d7d9e387962534d Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 20 Jul 2018 15:44:15 -0700 Subject: [PATCH] Port `Set` tests to `wasm` --- crates/js-sys/src/lib.rs | 2 +- crates/js-sys/tests/all/Set.rs | 228 ------------------------------- crates/js-sys/tests/all/main.rs | 1 - crates/js-sys/tests/wasm/Set.rs | 82 +++++++++++ crates/js-sys/tests/wasm/main.rs | 1 + 5 files changed, 84 insertions(+), 230 deletions(-) delete mode 100644 crates/js-sys/tests/all/Set.rs create mode 100644 crates/js-sys/tests/wasm/Set.rs diff --git a/crates/js-sys/src/lib.rs b/crates/js-sys/src/lib.rs index 14d7215a..f5902aaa 100644 --- a/crates/js-sys/src/lib.rs +++ b/crates/js-sys/src/lib.rs @@ -1913,7 +1913,7 @@ extern { /// /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set #[wasm_bindgen(constructor)] - pub fn new() -> Set; + pub fn new(init: &JsValue) -> Set; /// The size accessor property returns the number of elements in a [`Set`] /// object. diff --git a/crates/js-sys/tests/all/Set.rs b/crates/js-sys/tests/all/Set.rs deleted file mode 100644 index f54bb3d6..00000000 --- a/crates/js-sys/tests/all/Set.rs +++ /dev/null @@ -1,228 +0,0 @@ -#![allow(non_snake_case)] - -use project; - -#[test] -fn add() { - 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 add(this: &js_sys::Set, value: &JsValue) -> js_sys::Set { - this.add(value) - } - - "#) - .file("test.js", r#" - import * as assert from "assert"; - import * as wasm from "./out"; - - export function test() { - let set = new Set([]); - - wasm.add(set, 100); - - - assert.equal(set.size, 1); - assert.equal(Array.from(set)[0], 100); - } - "#) - .test() -} - -#[test] -fn clear() { - 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 clear(this: &js_sys::Set) { - this.clear(); - } - - "#) - .file("test.js", r#" - import * as assert from "assert"; - import * as wasm from "./out"; - - export function test() { - let set = new Set([1, 2, 3]); - - wasm.clear(set); - - assert.equal(set.size, 0); - } - "#) - .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 set_delete(this: &js_sys::Set, value: &JsValue) -> bool { - this.delete(value) - } - "#) - .file("test.js", r#" - import * as assert from "assert"; - import * as wasm from "./out"; - - export function test() { - let set = new Set([1, 2, 3]); - - assert.equal(wasm.set_delete(set, 4), false); - assert.equal(wasm.set_delete(set, 2), true); - } - "#) - .test() -} - -#[test] -fn for_each() { - 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 count_evens(set: &js_sys::Set) -> u32 { - let mut res = 0; - set.for_each(&mut |value, _, _| { - match value.as_f64() { - Some(val) if val % 2. == 0. => res += 1, - _ => { } - } - }); - res - } - "#) - .file("test.js", r#" - import * as assert from "assert"; - import * as wasm from "./out"; - - export function test() { - let setEven = new Set([2, 4, 6, 8]); - let setEvenExpected = 4; - let setEvenActual = wasm.count_evens(setEven); - assert.equal(setEvenExpected, setEvenActual); - - let setOdd = new Set([1, 3, 5, 7]); - let setOddExpected = 0; - let setOddActual = wasm.count_evens(setOdd); - assert.equal(setOddExpected, setOddActual); - - let setMixed = new Set([3, 5, 7, 10]); - let setMixedExpected = 1; - let setMixedActual = wasm.count_evens(setMixed); - assert.equal(setMixedExpected, setMixedActual); - } - "#) - .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(this: &js_sys::Set, value: &JsValue) -> bool { - this.has(value) - } - "#) - .file("test.js", r#" - import * as assert from "assert"; - import * as wasm from "./out"; - - export function test() { - let set = new Set([1, 2, 3]); - - assert.equal(wasm.has(set, 4), false); - assert.equal(wasm.has(set, 2), true); - } - "#) - .test() -} - -#[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_set() -> js_sys::Set { - js_sys::Set::new() - } - "#) - .file("test.js", r#" - import * as assert from "assert"; - import * as wasm from "./out"; - - export function test() { - let set = wasm.new_set(); - - assert.equal(set.size, 0); - } - "#) - .test() -} - -#[test] -fn size() { - 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 size(this: &js_sys::Set) -> u32 { - this.size() - } - - "#) - .file("test.js", r#" - import * as assert from "assert"; - import * as wasm from "./out"; - - export function test() { - let set = new Set([8, 5, 4, 3, 1, 2]); - - assert.equal(wasm.size(set), 6); - } - "#) - .test() -} diff --git a/crates/js-sys/tests/all/main.rs b/crates/js-sys/tests/all/main.rs index e74db0b0..148e9597 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 Set; mod SetIterator; mod Symbol; mod TypedArray; diff --git a/crates/js-sys/tests/wasm/Set.rs b/crates/js-sys/tests/wasm/Set.rs new file mode 100644 index 00000000..92cca443 --- /dev/null +++ b/crates/js-sys/tests/wasm/Set.rs @@ -0,0 +1,82 @@ +use wasm_bindgen::prelude::*; +use wasm_bindgen_test::*; +use js_sys::*; + +fn set2vec(s: &Set) -> Vec { + let mut result = Vec::new(); + s.for_each(&mut |x, _, _| result.push(x)); + return result +} + +#[wasm_bindgen_test] +fn add() { + let set = Set::new(&JsValue::undefined()); + set.add(&100.into()); + assert_eq!(set.size(), 1); + assert_eq!(set2vec(&set)[0], 100); +} + +#[wasm_bindgen_test] +fn clear() { + let set = Set::new(&JsValue::undefined()); + set.add(&1.into()); + set.add(&2.into()); + set.add(&3.into()); + assert_eq!(set.size(), 3); + set.clear(); + assert_eq!(set.size(), 0); +} + +#[wasm_bindgen_test] +fn delete() { + let set = Set::new(&JsValue::undefined()); + set.add(&1.into()); + set.add(&2.into()); + set.add(&3.into()); + + assert!(set.delete(&3.into())); + assert!(!set.delete(&3.into())); + assert!(!set.delete(&4.into())); +} + +#[wasm_bindgen_test] +fn for_each() { + let set = Set::new(&JsValue::undefined()); + set.add(&1.into()); + set.add(&2.into()); + set.add(&3.into()); + + let v = set2vec(&set); + assert_eq!(v.len(), 3); + assert!(v.iter().any(|v| *v == 1)); + assert!(v.iter().any(|v| *v == 2)); + assert!(v.iter().any(|v| *v == 3)); +} + +#[wasm_bindgen_test] +fn has() { + let set = Set::new(&JsValue::undefined()); + set.add(&1.into()); + set.add(&2.into()); + set.add(&3.into()); + + assert!(set.has(&1.into())); + assert!(!set.has(&1.3.into())); +} + +#[wasm_bindgen_test] +fn new() { + assert_eq!(Set::new(&JsValue::undefined()).size(), 0); +} + +#[wasm_bindgen_test] +fn size() { + let set = Set::new(&JsValue::undefined()); + assert_eq!(set.size(), 0); + set.add(&1.into()); + assert_eq!(set.size(), 1); + set.add(&2.into()); + assert_eq!(set.size(), 2); + set.add(&3.into()); + assert_eq!(set.size(), 3); +} diff --git a/crates/js-sys/tests/wasm/main.rs b/crates/js-sys/tests/wasm/main.rs index 31c1cc98..a3765f80 100644 --- a/crates/js-sys/tests/wasm/main.rs +++ b/crates/js-sys/tests/wasm/main.rs @@ -23,3 +23,4 @@ pub mod Math; pub mod Number; pub mod Object; pub mod Proxy; +pub mod Set;