change_nodes.rs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. use dioxus::core::ElementId;
  2. use dioxus::prelude::*;
  3. use dioxus_native_core::real_dom::RealDom;
  4. use dioxus_native_core::state::State;
  5. use dioxus_native_core::RealNodeId;
  6. use dioxus_native_core_macro::State;
  7. #[derive(State, Default, Clone)]
  8. struct Empty {}
  9. #[test]
  10. fn remove_node() {
  11. #[allow(non_snake_case)]
  12. fn Base(cx: Scope) -> Element {
  13. render!(div {})
  14. }
  15. let vdom = VirtualDom::new(Base);
  16. let mut dom: RealDom<Empty> = RealDom::new();
  17. let (create, edit) = vdom.diff_lazynodes(
  18. rsx! {
  19. div{
  20. div{}
  21. }
  22. },
  23. rsx! {
  24. div{}
  25. },
  26. );
  27. println!("create: {:#?}", create);
  28. println!("edit: {:#?}", edit);
  29. let _to_update = dom.apply_mutations(vec![create]);
  30. assert_eq!(dom[RealNodeId::ElementId(ElementId(0))].node_data.height, 0);
  31. assert_eq!(dom[RealNodeId::UnaccessableId(0)].node_data.height, 1);
  32. dom.apply_mutations(vec![edit]);
  33. assert_eq!(dom.size(), 3);
  34. assert_eq!(dom[RealNodeId::ElementId(ElementId(0))].node_data.height, 0);
  35. }
  36. #[test]
  37. fn add_node() {
  38. #[allow(non_snake_case)]
  39. fn Base(cx: Scope) -> Element {
  40. render!(div {})
  41. }
  42. let vdom = VirtualDom::new(Base);
  43. let (create, update) = vdom.diff_lazynodes(
  44. rsx! {
  45. div{}
  46. },
  47. rsx! {
  48. div{
  49. p{}
  50. }
  51. },
  52. );
  53. let mut dom: RealDom<Empty> = RealDom::new();
  54. let _to_update = dom.apply_mutations(vec![create]);
  55. assert_eq!(dom.size(), 2);
  56. assert_eq!(dom[RealNodeId::ElementId(ElementId(2))].node_data.height, 1);
  57. dom.apply_mutations(vec![update]);
  58. assert_eq!(dom.size(), 3);
  59. assert_eq!(dom[RealNodeId::ElementId(ElementId(3))].node_data.height, 0);
  60. assert_eq!(dom[RealNodeId::UnaccessableId(0)].node_data.height, 1);
  61. }