events.rs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // #![feature(proc_macro_hygiene)]
  2. extern crate wasm_bindgen_test;
  3. extern crate web_sys;
  4. use std::cell::Cell;
  5. use std::rc::Rc;
  6. use wasm_bindgen_test::*;
  7. use std::cell::RefCell;
  8. use wasm_bindgen::prelude::*;
  9. use wasm_bindgen::JsCast;
  10. use web_sys::*;
  11. use virtual_dom_rs::prelude::*;
  12. wasm_bindgen_test_configure!(run_in_browser);
  13. // Make sure that we successfully attach an event listener and see it work.
  14. #[wasm_bindgen_test]
  15. fn on_input() {
  16. let text = Rc::new(RefCell::new("Start Text".to_string()));
  17. let text_clone = Rc::clone(&text);
  18. let input = html! {
  19. <input
  20. // On input we'll set our Rc<RefCell<String>> value to the input elements value
  21. oninput=move |event: Event| {
  22. let input_elem = event.target().unwrap();
  23. let input_elem = input_elem.dyn_into::<HtmlInputElement>().unwrap();
  24. *text_clone.borrow_mut() = input_elem.value();
  25. }
  26. value="End Text"
  27. >
  28. };
  29. let input_event = InputEvent::new("input").unwrap();
  30. let input = input.create_dom_node().node;
  31. assert_eq!(&*text.borrow(), "Start Text");
  32. // After dispatching the oninput event our `text` should have a value of the input elements value.
  33. web_sys::EventTarget::from(input)
  34. .dispatch_event(&input_event)
  35. .unwrap();
  36. assert_eq!(&*text.borrow(), "End Text");
  37. }