miri_full_app.rs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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();
  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();
  20. }
  21. }
  22. #[component]
  23. fn App(cx: Scope) -> Element {
  24. let mut idx = use_state(cx, || 0);
  25. let onhover = |_| println!("go!");
  26. cx.render(rsx! {
  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| rsx! {
  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. cx.render(rsx! {
  47. li {
  48. onmouseover: move |e| onhover.call(e),
  49. "{i}"
  50. }
  51. })
  52. }