miri_simple.rs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. use dioxus::prelude::*;
  2. #[test]
  3. fn app_drops() {
  4. fn app() -> Element {
  5. rsx! { div {} }
  6. }
  7. let mut dom = VirtualDom::new(app);
  8. dom.rebuild(&mut dioxus_core::NoOpMutations);
  9. dom.mark_dirty(ScopeId::ROOT);
  10. _ = dom.render_immediate_to_vec();
  11. }
  12. #[test]
  13. fn hooks_drop() {
  14. fn app() -> Element {
  15. use_hook(|| String::from("asd"));
  16. use_hook(|| String::from("asd"));
  17. use_hook(|| String::from("asd"));
  18. use_hook(|| String::from("asd"));
  19. rsx! { div {} }
  20. }
  21. let mut dom = VirtualDom::new(app);
  22. dom.rebuild(&mut dioxus_core::NoOpMutations);
  23. dom.mark_dirty(ScopeId::ROOT);
  24. _ = dom.render_immediate_to_vec();
  25. }
  26. #[test]
  27. fn contexts_drop() {
  28. fn app() -> Element {
  29. provide_context(String::from("asd"));
  30. rsx! {
  31. div { ChildComp {} }
  32. }
  33. }
  34. fn ChildComp() -> Element {
  35. let el = consume_context::<String>();
  36. rsx! { div { "hello {el}" } }
  37. }
  38. let mut dom = VirtualDom::new(app);
  39. dom.rebuild(&mut dioxus_core::NoOpMutations);
  40. dom.mark_dirty(ScopeId::ROOT);
  41. _ = dom.render_immediate_to_vec();
  42. }
  43. #[test]
  44. fn tasks_drop() {
  45. fn app() -> Element {
  46. spawn(async {
  47. // tokio::time::sleep(std::time::Duration::from_millis(100000)).await;
  48. });
  49. rsx! { div {} }
  50. }
  51. let mut dom = VirtualDom::new(app);
  52. dom.rebuild(&mut dioxus_core::NoOpMutations);
  53. dom.mark_dirty(ScopeId::ROOT);
  54. _ = dom.render_immediate_to_vec();
  55. }
  56. #[test]
  57. fn root_props_drop() {
  58. #[derive(Clone)]
  59. struct RootProps(String);
  60. let mut dom = VirtualDom::new_with_props(
  61. |cx: RootProps| rsx!( div { "{cx.0}" } ),
  62. RootProps("asdasd".to_string()),
  63. );
  64. dom.rebuild(&mut dioxus_core::NoOpMutations);
  65. dom.mark_dirty(ScopeId::ROOT);
  66. _ = dom.render_immediate_to_vec();
  67. }
  68. #[test]
  69. fn diffing_drops_old() {
  70. fn app() -> Element {
  71. rsx! {
  72. div {
  73. match generation() % 2 {
  74. 0 => rsx!( ChildComp1 { name: "asdasd".to_string() }),
  75. 1 => rsx!( ChildComp2 { name: "asdasd".to_string() }),
  76. _ => todo!()
  77. }
  78. }
  79. }
  80. }
  81. #[component]
  82. fn ChildComp1(name: String) -> Element {
  83. rsx! {"Hello {name}"}
  84. }
  85. #[component]
  86. fn ChildComp2(name: String) -> Element {
  87. rsx! {"Goodbye {name}"}
  88. }
  89. let mut dom = VirtualDom::new(app);
  90. dom.rebuild(&mut dioxus_core::NoOpMutations);
  91. dom.mark_dirty(ScopeId::ROOT);
  92. _ = dom.render_immediate_to_vec();
  93. }