miri_full_app.rs 1.4 KB

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