gioser

tawasuyu/taffy

A high performance rust-powered UI layout library

Rust 1111HTML 1039Markdown 12TOML 94524 Definitions

Minor: added docs & test-case for updated 'Taffy::remove()' behaviour (#512)

3341abe49e152023dbcf9a4a5155e941a9d7a828 · by Yurii Nakonechnyi · (3 years ago) · parent dab541d61 · browse the tree at this commit

Semantic delta · 1

src/tree/taffy_tree/tree.rs

1 files · +17 −0

diff --git a/src/tree/taffy_tree/tree.rs b/src/tree/taffy_tree/tree.rs
index 4576987aa..5fb00079a 100644
--- a/src/tree/taffy_tree/tree.rs
+++ b/src/tree/taffy_tree/tree.rs
@@ -243,6 +243,7 @@ impl Taffy {
             }
         }
 
+        // Remove "parent" references to a node when removing that node
         if let Some(children) = self.children.get(key) {
             for child in children.iter().copied() {
                 self.parents[child.into()] = None;
@@ -680,6 +681,22 @@ mod tests {
         assert_eq!(taffy.child_count(node).unwrap(), 0);
     }
 
+    // Related to: https://github.com/DioxusLabs/taffy/issues/510
+    #[test]
+    fn remove_child_updates_parents() {
+        let mut taffy = Taffy::new();
+
+        let parent = taffy.new_leaf(Style::default()).unwrap();
+        let child = taffy.new_leaf(Style::default()).unwrap();
+
+        taffy.add_child(parent, child).unwrap();
+
+        taffy.remove(parent).unwrap();
+
+        // Once the parent is removed this shouldn't panic.
+        assert!(taffy.set_children(child, &[]).is_ok());
+    }
+
     #[test]
     fn replace_child_at_index() {
         let mut taffy = Taffy::new();