miri_simple.rs 2.7 KB

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