@@ -78,13 +78,15 @@ TEST(ElementTest, testYogaDirtyFlag) {
7878 /*
7979 * Cloning props without changing them must *not* dirty Yoga nodes.
8080 */
81- auto newRootShadowNode = rootShadowNode->clone (
82- innerShadowNode->getFamily (), [](ShadowNode const &oldShadowNode) {
83- auto &componentDescriptor = oldShadowNode.getComponentDescriptor ();
84- auto props = componentDescriptor.cloneProps (
85- oldShadowNode.getProps (), RawProps ());
86- return oldShadowNode.clone (ShadowNodeFragment{props});
87- });
81+ auto newRootShadowNode =
82+ std::static_pointer_cast<RootShadowNode>(rootShadowNode->cloneTree (
83+ innerShadowNode->getFamily (), [](ShadowNode const &oldShadowNode) {
84+ auto &componentDescriptor =
85+ oldShadowNode.getComponentDescriptor ();
86+ auto props = componentDescriptor.cloneProps (
87+ oldShadowNode.getProps (), RawProps ());
88+ return oldShadowNode.clone (ShadowNodeFragment{props});
89+ }));
8890
8991 EXPECT_FALSE (newRootShadowNode->layoutIfNeeded ());
9092 }
@@ -93,21 +95,22 @@ TEST(ElementTest, testYogaDirtyFlag) {
9395 /*
9496 * Changing *non-layout* sub-props must *not* dirty Yoga nodes.
9597 */
96- auto newRootShadowNode = rootShadowNode->clone (
97- innerShadowNode->getFamily (), [](ShadowNode const &oldShadowNode) {
98- auto viewProps = std::make_shared<ViewProps>();
99- auto &props = *viewProps;
100-
101- props.nativeId = " some new native Id" ;
102- props.foregroundColor = whiteColor ();
103- props.backgroundColor = blackColor ();
104- props.opacity = props.opacity + 0.042 ;
105- props.zIndex = props.zIndex + 42 ;
106- props.shouldRasterize = !props.shouldRasterize ;
107- props.collapsable = !props.collapsable ;
108-
109- return oldShadowNode.clone (ShadowNodeFragment{viewProps});
110- });
98+ auto newRootShadowNode =
99+ std::static_pointer_cast<RootShadowNode>(rootShadowNode->cloneTree (
100+ innerShadowNode->getFamily (), [](ShadowNode const &oldShadowNode) {
101+ auto viewProps = std::make_shared<ViewProps>();
102+ auto &props = *viewProps;
103+
104+ props.nativeId = " some new native Id" ;
105+ props.foregroundColor = whiteColor ();
106+ props.backgroundColor = blackColor ();
107+ props.opacity = props.opacity + 0.042 ;
108+ props.zIndex = props.zIndex + 42 ;
109+ props.shouldRasterize = !props.shouldRasterize ;
110+ props.collapsable = !props.collapsable ;
111+
112+ return oldShadowNode.clone (ShadowNodeFragment{viewProps});
113+ }));
111114
112115 EXPECT_FALSE (newRootShadowNode->layoutIfNeeded ());
113116 }
@@ -116,16 +119,17 @@ TEST(ElementTest, testYogaDirtyFlag) {
116119 /*
117120 * Changing *layout* sub-props *must* dirty Yoga nodes.
118121 */
119- auto newRootShadowNode = rootShadowNode->clone (
120- innerShadowNode->getFamily (), [](ShadowNode const &oldShadowNode) {
121- auto viewProps = std::make_shared<ViewProps>();
122- auto &props = *viewProps;
122+ auto newRootShadowNode =
123+ std::static_pointer_cast<RootShadowNode>(rootShadowNode->cloneTree (
124+ innerShadowNode->getFamily (), [](ShadowNode const &oldShadowNode) {
125+ auto viewProps = std::make_shared<ViewProps>();
126+ auto &props = *viewProps;
123127
124- props.yogaStyle .alignContent () = YGAlignBaseline;
125- props.yogaStyle .display () = YGDisplayNone;
128+ props.yogaStyle .alignContent () = YGAlignBaseline;
129+ props.yogaStyle .display () = YGDisplayNone;
126130
127- return oldShadowNode.clone (ShadowNodeFragment{viewProps});
128- } );
131+ return oldShadowNode.clone (ShadowNodeFragment{viewProps});
132+ }) );
129133
130134 EXPECT_TRUE (newRootShadowNode->layoutIfNeeded ());
131135 }
@@ -134,12 +138,13 @@ TEST(ElementTest, testYogaDirtyFlag) {
134138 /*
135139 * Removing all children *must* dirty Yoga nodes.
136140 */
137- auto newRootShadowNode = rootShadowNode->clone (
138- innerShadowNode->getFamily (), [](ShadowNode const &oldShadowNode) {
139- return oldShadowNode.clone (
140- {ShadowNodeFragment::propsPlaceholder (),
141- ShadowNode::emptySharedShadowNodeSharedList ()});
142- });
141+ auto newRootShadowNode =
142+ std::static_pointer_cast<RootShadowNode>(rootShadowNode->cloneTree (
143+ innerShadowNode->getFamily (), [](ShadowNode const &oldShadowNode) {
144+ return oldShadowNode.clone (
145+ {ShadowNodeFragment::propsPlaceholder (),
146+ ShadowNode::emptySharedShadowNodeSharedList ()});
147+ }));
143148
144149 EXPECT_TRUE (newRootShadowNode->layoutIfNeeded ());
145150 }
@@ -148,17 +153,18 @@ TEST(ElementTest, testYogaDirtyFlag) {
148153 /*
149154 * Removing the last child *must* dirty Yoga nodes.
150155 */
151- auto newRootShadowNode = rootShadowNode->clone (
152- innerShadowNode->getFamily (), [](ShadowNode const &oldShadowNode) {
153- auto children = oldShadowNode.getChildren ();
154- children.pop_back ();
156+ auto newRootShadowNode =
157+ std::static_pointer_cast<RootShadowNode>(rootShadowNode->cloneTree (
158+ innerShadowNode->getFamily (), [](ShadowNode const &oldShadowNode) {
159+ auto children = oldShadowNode.getChildren ();
160+ children.pop_back ();
155161
156- std::reverse (children.begin (), children.end ());
162+ std::reverse (children.begin (), children.end ());
157163
158- return oldShadowNode.clone (
159- {ShadowNodeFragment::propsPlaceholder (),
160- std::make_shared<ShadowNode::ListOfShared const >(children)});
161- } );
164+ return oldShadowNode.clone (
165+ {ShadowNodeFragment::propsPlaceholder (),
166+ std::make_shared<ShadowNode::ListOfShared const >(children)});
167+ }) );
162168
163169 EXPECT_TRUE (newRootShadowNode->layoutIfNeeded ());
164170 }
@@ -167,16 +173,17 @@ TEST(ElementTest, testYogaDirtyFlag) {
167173 /*
168174 * Reversing a list of children *must* dirty Yoga nodes.
169175 */
170- auto newRootShadowNode = rootShadowNode->clone (
171- innerShadowNode->getFamily (), [](ShadowNode const &oldShadowNode) {
172- auto children = oldShadowNode.getChildren ();
176+ auto newRootShadowNode =
177+ std::static_pointer_cast<RootShadowNode>(rootShadowNode->cloneTree (
178+ innerShadowNode->getFamily (), [](ShadowNode const &oldShadowNode) {
179+ auto children = oldShadowNode.getChildren ();
173180
174- std::reverse (children.begin (), children.end ());
181+ std::reverse (children.begin (), children.end ());
175182
176- return oldShadowNode.clone (
177- {ShadowNodeFragment::propsPlaceholder (),
178- std::make_shared<ShadowNode::ListOfShared const >(children)});
179- } );
183+ return oldShadowNode.clone (
184+ {ShadowNodeFragment::propsPlaceholder (),
185+ std::make_shared<ShadowNode::ListOfShared const >(children)});
186+ }) );
180187
181188 EXPECT_TRUE (newRootShadowNode->layoutIfNeeded ());
182189 }
0 commit comments