change_nodes.rs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. use dioxus::core::{self as dioxus_core, GlobalNodeId};
  2. use dioxus::prelude::*;
  3. use dioxus_native_core::real_dom::RealDom;
  4. use dioxus_native_core::state::State;
  5. use dioxus_native_core_macro::State;
  6. #[derive(State, Default, Clone)]
  7. struct Empty {}
  8. #[test]
  9. fn remove_node() {
  10. #[allow(non_snake_case)]
  11. fn Base(cx: Scope) -> Element {
  12. render!(div {})
  13. }
  14. let vdom = VirtualDom::new(Base);
  15. let mut dom: RealDom<Empty> = RealDom::new();
  16. let (create, edit) = vdom.diff_lazynodes(
  17. rsx! {
  18. div{
  19. div{}
  20. }
  21. },
  22. rsx! {
  23. div{}
  24. },
  25. );
  26. println!("create: {:#?}", create);
  27. println!("edit: {:#?}", edit);
  28. let _to_update = dom.apply_mutations(vec![create]);
  29. assert_eq!(
  30. dom[GlobalNodeId::TemplateId {
  31. template_ref_id: dioxus_core::ElementId(1),
  32. template_node_id: dioxus::prelude::TemplateNodeId(0),
  33. }]
  34. .node_data
  35. .height,
  36. 1
  37. );
  38. assert_eq!(
  39. dom[GlobalNodeId::TemplateId {
  40. template_ref_id: dioxus_core::ElementId(1),
  41. template_node_id: dioxus::prelude::TemplateNodeId(1),
  42. }]
  43. .node_data
  44. .height,
  45. 2
  46. );
  47. dom.apply_mutations(vec![edit]);
  48. assert_eq!(dom.size(), 1);
  49. assert_eq!(
  50. dom[GlobalNodeId::TemplateId {
  51. template_ref_id: dioxus_core::ElementId(2),
  52. template_node_id: dioxus::prelude::TemplateNodeId(0),
  53. }]
  54. .node_data
  55. .height,
  56. 1
  57. );
  58. }
  59. #[test]
  60. fn add_node() {
  61. #[allow(non_snake_case)]
  62. fn Base(cx: Scope) -> Element {
  63. render!(div {})
  64. }
  65. let vdom = VirtualDom::new(Base);
  66. let (create, update) = vdom.diff_lazynodes(
  67. rsx! {
  68. div{}
  69. },
  70. rsx! {
  71. div{
  72. p{}
  73. }
  74. },
  75. );
  76. let mut dom: RealDom<Empty> = RealDom::new();
  77. let _to_update = dom.apply_mutations(vec![create]);
  78. assert_eq!(dom.size(), 1);
  79. assert_eq!(
  80. dom[GlobalNodeId::TemplateId {
  81. template_ref_id: dioxus_core::ElementId(1),
  82. template_node_id: dioxus::prelude::TemplateNodeId(0),
  83. }]
  84. .node_data
  85. .height,
  86. 1
  87. );
  88. dom.apply_mutations(vec![update]);
  89. assert_eq!(dom.size(), 1);
  90. assert_eq!(
  91. dom[GlobalNodeId::TemplateId {
  92. template_ref_id: dioxus_core::ElementId(2),
  93. template_node_id: dioxus::prelude::TemplateNodeId(0),
  94. }]
  95. .node_data
  96. .height,
  97. 1
  98. );
  99. assert_eq!(
  100. dom[GlobalNodeId::TemplateId {
  101. template_ref_id: dioxus_core::ElementId(2),
  102. template_node_id: dioxus::prelude::TemplateNodeId(1),
  103. }]
  104. .node_data
  105. .height,
  106. 2
  107. );
  108. }