tracing.rs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. use dioxus::html::SerializedHtmlEventConverter;
  2. use dioxus::prelude::*;
  3. use dioxus_core::ElementId;
  4. use std::{any::Any, rc::Rc};
  5. use tracing_fluent_assertions::{AssertionRegistry, AssertionsLayer};
  6. use tracing_subscriber::{layer::SubscriberExt, Registry};
  7. #[test]
  8. fn basic_tracing() {
  9. // setup tracing
  10. let assertion_registry = AssertionRegistry::default();
  11. let base_subscriber = Registry::default();
  12. // log to standard out for testing
  13. let std_out_log = tracing_subscriber::fmt::layer().pretty();
  14. let subscriber = base_subscriber
  15. .with(std_out_log)
  16. .with(AssertionsLayer::new(&assertion_registry));
  17. tracing::subscriber::set_global_default(subscriber).unwrap();
  18. let new_virtual_dom = assertion_registry
  19. .build()
  20. .with_name("VirtualDom::new")
  21. .was_created()
  22. .was_entered_exactly(1)
  23. .was_closed()
  24. .finalize();
  25. let edited_virtual_dom = assertion_registry
  26. .build()
  27. .with_name("VirtualDom::rebuild")
  28. .was_created()
  29. .was_entered_exactly(1)
  30. .was_closed()
  31. .finalize();
  32. set_event_converter(Box::new(SerializedHtmlEventConverter));
  33. let mut dom = VirtualDom::new(app);
  34. dom.rebuild(&mut dioxus_core::NoOpMutations);
  35. new_virtual_dom.assert();
  36. edited_virtual_dom.assert();
  37. for _ in 0..3 {
  38. let event = Event::new(
  39. Rc::new(PlatformEventData::new(Box::<SerializedMouseData>::default())) as Rc<dyn Any>,
  40. true,
  41. );
  42. dom.runtime().handle_event("click", event, ElementId(2));
  43. dom.process_events();
  44. _ = dom.render_immediate_to_vec();
  45. }
  46. }
  47. fn app() -> Element {
  48. let mut idx = use_signal(|| 0);
  49. let onhover = |_| println!("go!");
  50. rsx! {
  51. div {
  52. button {
  53. onclick: move |_| {
  54. idx += 1;
  55. println!("Clicked");
  56. },
  57. "+"
  58. }
  59. button { onclick: move |_| idx -= 1, "-" }
  60. ul {
  61. {(0..idx()).map(|i| rsx! {
  62. ChildExample { i: i, onhover: onhover }
  63. })}
  64. }
  65. }
  66. }
  67. }
  68. #[component]
  69. fn ChildExample(i: i32, onhover: EventHandler<MouseEvent>) -> Element {
  70. rsx! { li { onmouseover: move |e| onhover.call(e), "{i}" } }
  71. }