miri_full_app.rs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. use dioxus::prelude::*;
  2. use dioxus_core::ElementId;
  3. use dioxus_elements::SerializedHtmlEventConverter;
  4. use std::{any::Any, rc::Rc};
  5. #[test]
  6. fn miri_rollover() {
  7. set_event_converter(Box::new(SerializedHtmlEventConverter));
  8. let mut dom = VirtualDom::new(app);
  9. dom.rebuild(&mut dioxus_core::NoOpMutations);
  10. for _ in 0..3 {
  11. let event = Event::new(
  12. Rc::new(PlatformEventData::new(Box::<SerializedMouseData>::default())) as Rc<dyn Any>,
  13. true,
  14. );
  15. dom.runtime().handle_event("click", event, ElementId(2));
  16. dom.process_events();
  17. _ = dom.render_immediate_to_vec();
  18. }
  19. }
  20. fn app() -> Element {
  21. let mut idx = use_signal(|| 0);
  22. let onhover = |_| println!("go!");
  23. rsx! {
  24. div {
  25. button {
  26. onclick: move |_| {
  27. idx += 1;
  28. println!("Clicked");
  29. },
  30. "+"
  31. }
  32. button { onclick: move |_| idx -= 1, "-" }
  33. ul {
  34. {(0..idx()).map(|i| rsx! {
  35. ChildExample { i: i, onhover: onhover }
  36. })}
  37. }
  38. }
  39. }
  40. }
  41. #[component]
  42. fn ChildExample(i: i32, onhover: EventHandler<MouseEvent>) -> Element {
  43. rsx! { li { onmouseover: move |e| onhover.call(e), "{i}" } }
  44. }