| use js_sys::*; |
| use wasm_bindgen::prelude::*; |
| use wasm_bindgen_futures::JsFuture; |
| use wasm_bindgen_test::*; |
| |
| #[wasm_bindgen(module = "tests/wasm/Symbol.js")] |
| extern "C" { |
| fn test_has_instance(sym: &Symbol); |
| fn test_is_concat_spreadable(sym: &Symbol); |
| fn test_iterator(sym: &Symbol); |
| fn test_async_iterator(sym: &Symbol) -> Promise; |
| fn test_match(sym: &Symbol); |
| fn test_replace(sym: &Symbol); |
| fn test_search(sym: &Symbol); |
| fn test_species(sym: &Symbol); |
| fn test_split(sym: &Symbol); |
| fn test_to_primitive(sym: &Symbol); |
| fn test_to_string_tag(sym: &Symbol); |
| } |
| |
| #[wasm_bindgen] |
| extern "C" { |
| #[wasm_bindgen(js_name = Symbol)] |
| fn gensym(val: JsValue) -> Symbol; |
| } |
| |
| #[wasm_bindgen_test] |
| fn has_instance() { |
| test_has_instance(&Symbol::has_instance()); |
| } |
| |
| #[wasm_bindgen_test] |
| fn is_concat_spreadable() { |
| test_is_concat_spreadable(&Symbol::is_concat_spreadable()); |
| } |
| |
| #[wasm_bindgen_test] |
| fn iterator() { |
| test_iterator(&Symbol::iterator()); |
| } |
| |
| #[wasm_bindgen_test] |
| async fn async_iterator() { |
| JsFuture::from(test_async_iterator(&Symbol::async_iterator())) |
| .await |
| .unwrap_throw(); |
| } |
| |
| #[wasm_bindgen_test] |
| fn match_() { |
| test_match(&Symbol::match_()); |
| } |
| |
| #[wasm_bindgen_test] |
| fn replace() { |
| test_replace(&Symbol::replace()); |
| } |
| |
| #[wasm_bindgen_test] |
| fn search() { |
| test_search(&Symbol::search()); |
| } |
| |
| #[wasm_bindgen_test] |
| fn species() { |
| test_species(&Symbol::species()); |
| } |
| |
| #[wasm_bindgen_test] |
| fn split() { |
| test_split(&Symbol::split()); |
| } |
| |
| #[wasm_bindgen_test] |
| fn to_primitive() { |
| test_to_primitive(&Symbol::to_primitive()); |
| } |
| |
| #[wasm_bindgen_test] |
| fn to_string_tag() { |
| test_to_string_tag(&Symbol::to_string_tag()); |
| } |
| |
| #[wasm_bindgen_test] |
| fn for_() { |
| let foo = JsValue::from(Symbol::for_("foo")); |
| let bar = JsValue::from(Symbol::for_("bar")); |
| assert_eq!(foo, foo); |
| assert_eq!(bar, bar); |
| assert_ne!(foo, bar); |
| assert_ne!(bar, foo); |
| |
| assert_eq!(Symbol::for_("mario").to_string(), "Symbol(mario)"); |
| } |
| |
| #[wasm_bindgen_test] |
| fn key_for() { |
| let sym = Symbol::for_("foo"); |
| assert_eq!(Symbol::key_for(&sym), "foo"); |
| assert!(Symbol::key_for(&Symbol::iterator()).is_undefined()); |
| assert!(Symbol::key_for(&Symbol::async_iterator()).is_undefined()); |
| assert!(Symbol::key_for(&gensym(JsValue::undefined())).is_undefined()); |
| } |
| |
| #[wasm_bindgen_test] |
| fn to_string() { |
| assert_eq!(Symbol::iterator().to_string(), "Symbol(Symbol.iterator)"); |
| assert_eq!( |
| Symbol::async_iterator().to_string(), |
| "Symbol(Symbol.asyncIterator)" |
| ); |
| assert_eq!(Symbol::for_("foo").to_string(), "Symbol(foo)"); |
| assert_eq!(gensym("desc".into()).to_string(), "Symbol(desc)"); |
| } |
| |
| #[wasm_bindgen_test] |
| fn unscopables() { |
| assert_eq!( |
| Symbol::unscopables().to_string(), |
| "Symbol(Symbol.unscopables)" |
| ); |
| } |
| |
| #[wasm_bindgen_test] |
| fn value_of() { |
| let a = Symbol::for_("foo"); |
| assert_eq!(JsValue::from(a.value_of()), JsValue::from(a)); |
| let a = gensym(JsValue::undefined()); |
| assert_eq!(JsValue::from(a.value_of()), JsValue::from(a)); |
| } |