Iterator.rs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. use js_sys::*;
  2. use wasm_bindgen::prelude::*;
  3. use wasm_bindgen_test::*;
  4. #[wasm_bindgen(module = "tests/wasm/Iterator.js")]
  5. extern "C" {
  6. fn get_iterable() -> JsValue;
  7. fn get_not_iterable() -> JsValue;
  8. fn get_symbol_iterator_throws() -> JsValue;
  9. fn get_symbol_iterator_not_function() -> JsValue;
  10. fn get_symbol_iterator_returns_not_object() -> JsValue;
  11. fn get_symbol_iterator_returns_object_without_next() -> JsValue;
  12. }
  13. #[wasm_bindgen_test]
  14. fn try_iter_handles_iteration_protocol() {
  15. assert_eq!(
  16. try_iter(&get_iterable())
  17. .unwrap()
  18. .unwrap()
  19. .map(|x| x.unwrap().as_string().unwrap())
  20. .collect::<Vec<_>>(),
  21. vec!["one", "two", "three"]
  22. );
  23. assert!(try_iter(&get_not_iterable()).unwrap().is_none());
  24. assert!(try_iter(&get_symbol_iterator_throws()).is_err());
  25. assert!(try_iter(&get_symbol_iterator_not_function())
  26. .unwrap()
  27. .is_none());
  28. assert!(try_iter(&get_symbol_iterator_returns_not_object())
  29. .unwrap()
  30. .is_none());
  31. assert!(try_iter(&get_symbol_iterator_returns_object_without_next())
  32. .unwrap()
  33. .is_none());
  34. }