tracing.rs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. use dioxus::html::SerializedHtmlEventConverter;
  2. use dioxus::prelude::*;
  3. use dioxus_core::ElementId;
  4. use std::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. dom.handle_event(
  39. "click",
  40. Rc::new(PlatformEventData::new(Box::<SerializedMouseData>::default())),
  41. ElementId(2),
  42. true,
  43. );
  44. dom.process_events();
  45. _ = dom.render_immediate_to_vec();
  46. }
  47. }
  48. fn app() -> Element {
  49. let mut idx = use_signal(|| 0);
  50. let onhover = |_| println!("go!");
  51. rsx! {
  52. div {
  53. button {
  54. onclick: move |_| {
  55. idx += 1;
  56. println!("Clicked");
  57. },
  58. "+"
  59. }
  60. button { onclick: move |_| idx -= 1, "-" }
  61. ul {
  62. {(0..idx()).map(|i| rsx! {
  63. ChildExample { i: i, onhover: onhover }
  64. })}
  65. }
  66. }
  67. }
  68. }
  69. #[component]
  70. fn ChildExample(i: i32, onhover: EventHandler<MouseEvent>) -> Element {
  71. rsx! { li { onmouseover: move |e| onhover.call(e), "{i}" } }
  72. }