diff --git a/packages/native-core-macro/tests/persistent_iterator.rs b/packages/native-core-macro/tests/persistent_iterator.rs index c35c6ab0a..0ad2e3ca2 100644 --- a/packages/native-core-macro/tests/persistent_iterator.rs +++ b/packages/native-core-macro/tests/persistent_iterator.rs @@ -1,9 +1,6 @@ use dioxus::prelude::*; use dioxus_native_core::{ - real_dom::{ RealDom}, - node::NodeType, - state::State, - utils::PersistantElementIter, + node::NodeType, real_dom::RealDom, state::State, utils::PersistantElementIter, }; use dioxus_native_core_macro::State; @@ -109,10 +106,10 @@ fn traverse() { fn persist_removes() { #[allow(non_snake_case)] fn Base(cx: Scope) -> Element { - let children = match cx.generation()%2{ - 0=>3, - 1=>2, - _ => unreachable!() + let children = match cx.generation() % 2 { + 0 => 3, + 1 => 2, + _ => unreachable!(), }; render!( div{ @@ -158,7 +155,8 @@ fn persist_removes() { // "3" iter2.next(&rdom).id(); - let update = vdom.rebuild(); + vdom.mark_dirty(ScopeId(0)); + let update = vdom.render_immediate(); iter1.prune(&update, &rdom); iter2.prune(&update, &rdom); let _to_update = rdom.apply_mutations(update); @@ -188,10 +186,10 @@ fn persist_removes() { fn persist_instertions_before() { #[allow(non_snake_case)] fn Base(cx: Scope) -> Element { - let children = match cx.generation()%2{ - 0=>3, - 1=>2, - _ => unreachable!() + let children = match cx.generation() % 2 { + 0 => 3, + 1 => 2, + _ => unreachable!(), }; render!( div{ @@ -212,7 +210,7 @@ fn persist_instertions_before() { let build = vdom.rebuild(); let _to_update = rdom.apply_mutations(build); - + let mut iter = PersistantElementIter::new(); // div iter.next(&rdom).id(); @@ -224,8 +222,9 @@ fn persist_instertions_before() { iter.next(&rdom).id(); // "2" iter.next(&rdom).id(); - - let update = vdom.rebuild(); + + vdom.mark_dirty(ScopeId(0)); + let update = vdom.render_immediate(); iter.prune(&update, &rdom); let _to_update = rdom.apply_mutations(update); @@ -242,10 +241,10 @@ fn persist_instertions_before() { fn persist_instertions_after() { #[allow(non_snake_case)] fn Base(cx: Scope) -> Element { - let children = match cx.generation()%2{ - 0=>3, - 1=>2, - _ => unreachable!() + let children = match cx.generation() % 2 { + 0 => 3, + 1 => 2, + _ => unreachable!(), }; render!( div{ diff --git a/packages/native-core-macro/tests/update_state.rs b/packages/native-core-macro/tests/update_state.rs index 456ea5f5b..b9b36c8ca 100644 --- a/packages/native-core-macro/tests/update_state.rs +++ b/packages/native-core-macro/tests/update_state.rs @@ -7,36 +7,12 @@ use dioxus_native_core::tree::TreeView; use dioxus_native_core::{node_ref::*, NodeId, RealNodeId, SendAnyMap}; use dioxus_native_core_macro::State; -#[derive(Debug, Clone, Default, State)] -struct CallCounterStatePart1 { - #[child_dep_state(child_counter)] - child_counter: ChildDepCallCounter, -} - -#[derive(Debug, Clone, Default, State)] -struct CallCounterStatePart2 { - #[parent_dep_state(parent_counter)] - parent_counter: ParentDepCallCounter, -} - -#[derive(Debug, Clone, Default, State)] -struct CallCounterStatePart3 { - #[node_dep_state()] - node_counter: NodeDepCallCounter, -} - #[derive(Debug, Clone, Default, State)] struct CallCounterState { #[child_dep_state(child_counter)] child_counter: ChildDepCallCounter, - #[state] - part2: CallCounterStatePart2, #[parent_dep_state(parent_counter)] parent_counter: ParentDepCallCounter, - #[state] - part1: CallCounterStatePart1, - #[state] - part3: CallCounterStatePart3, #[node_dep_state()] node_counter: NodeDepCallCounter, } @@ -69,6 +45,7 @@ impl ParentDepState for ParentDepCallCounter { const NODE_MASK: NodeMask = NodeMask::ALL; fn reduce(&mut self, _node: NodeView, _parent: Option<(&Self,)>, _ctx: &Self::Ctx) -> bool { self.0 += 1; + println!("ParentDepCallCounter::reduce on {:?}\n{}", _node, self.0); true } } @@ -170,15 +147,11 @@ fn state_initial() { #[allow(non_snake_case)] fn Base(cx: Scope) -> Element { render! { - div{ - p{} - h1{} - div { - p{ - color: "red" - } - h1{} + div { + p{ + color: "red" } + h1{} } } } @@ -262,11 +235,10 @@ fn state_reduce_parent_called_minimally_on_update() { let width = if cx.generation() == 0 { "100%" } else { "99%" }; cx.render(rsx! { div { + width: "{width}", div{ div{ - p{ - width: "{width}", - } + p{} } p{ "hello" @@ -288,12 +260,18 @@ fn state_reduce_parent_called_minimally_on_update() { let (nodes_updated, _) = dom.apply_mutations(vdom.rebuild()); let _to_rerender = dom.update_state(nodes_updated, SendAnyMap::new()); - let (nodes_updated, _) = dom.apply_mutations(vdom.rebuild()); + vdom.mark_dirty(ScopeId(0)); + let (nodes_updated, _) = dom.apply_mutations(vdom.render_immediate()); let _to_rerender = dom.update_state(nodes_updated, SendAnyMap::new()); + let mut is_root = true; dom.traverse_depth_first(|n| { - assert_eq!(n.state.part2.parent_counter.0, 2); - assert_eq!(n.state.parent_counter.0, 2); + if is_root { + is_root = false; + assert_eq!(n.state.parent_counter.0, 1); + } else { + assert_eq!(n.state.parent_counter.0, 2); + } }); } @@ -303,20 +281,30 @@ fn state_reduce_child_called_minimally_on_update() { fn Base(cx: Scope) -> Element { let width = if cx.generation() == 0 { "100%" } else { "99%" }; cx.render(rsx! { + // updated: 2 div { + // updated: 2 div{ + // updated: 2 div{ + // updated: 2 p{ width: "{width}", } } + // updated: 1 p{ + // updated: 1 "hello" } + // updated: 1 div{ + // updated: 1 h1{} } + // updated: 1 p{ + // updated: 1 "world" } } @@ -330,26 +318,20 @@ fn state_reduce_child_called_minimally_on_update() { let (nodes_updated, _) = dom.apply_mutations(vdom.rebuild()); let _to_rerender = dom.update_state(nodes_updated, SendAnyMap::new()); - let (nodes_updated, _) = dom.apply_mutations(vdom.rebuild()); + vdom.mark_dirty(ScopeId(0)); + let (nodes_updated, _) = dom.apply_mutations(vdom.render_immediate()); let _to_rerender = dom.update_state(nodes_updated, SendAnyMap::new()); + let mut traverse_count = 0; dom.traverse_depth_first(|n| { - assert_eq!(n.state.part1.child_counter.0, { - let id = n.node_data.node_id.0; - if id > 4 { - 1 - } else { - 2 - } - }); assert_eq!(n.state.child_counter.0, { - let id = n.node_data.node_id.0; - if id > 4 { + if traverse_count > 4 { 1 } else { 2 } }); + traverse_count += 1; }); } @@ -440,15 +422,3 @@ fn dependancies_order_independant() { assert_eq!(&n.state.c, &c); }); } - -#[derive(Clone, Default, State)] -struct DependanciesStateTest { - #[node_dep_state(c)] - b: BDepCallCounter, - #[node_dep_state()] - c: CDepCallCounter, - #[node_dep_state(b)] - a: ADepCallCounter, - #[state] - child: UnorderedDependanciesState, -}