diff --git a/ReactCommon/fabric/components/view/tests/ViewTest.cpp b/ReactCommon/fabric/components/view/tests/ViewTest.cpp index 15bfea1fafc..32aff667905 100644 --- a/ReactCommon/fabric/components/view/tests/ViewTest.cpp +++ b/ReactCommon/fabric/components/view/tests/ViewTest.cpp @@ -18,7 +18,8 @@ #include #include -using namespace facebook::react; +namespace facebook { +namespace react { class YogaDirtyFlagTest : public ::testing::Test { protected: @@ -191,3 +192,30 @@ TEST_F(YogaDirtyFlagTest, reversingListOfChildrenMustDirtyYogaNode) { EXPECT_TRUE( static_cast(*newRootShadowNode).layoutIfNeeded()); } + +TEST_F(YogaDirtyFlagTest, updatingStateForScrollViewMistNotDirtyYogaNode) { + /* + * Updating a state for *some* (not all!) components must *not* dirty Yoga + * nodes. + */ + auto newRootShadowNode = rootShadowNode_->cloneTree( + scrollViewShadowNode_->getFamily(), [](ShadowNode const &oldShadowNode) { + auto state = ScrollViewState{}; + state.contentOffset = Point{42, 9000}; + + auto &componentDescriptor = oldShadowNode.getComponentDescriptor(); + auto newState = componentDescriptor.createState( + oldShadowNode.getFamily(), + std::make_shared(state)); + + return oldShadowNode.clone({ShadowNodeFragment::propsPlaceholder(), + ShadowNodeFragment::childrenPlaceholder(), + newState}); + }); + + EXPECT_FALSE( + static_cast(*newRootShadowNode).layoutIfNeeded()); +} + +} // namespace react +} // namespace facebook