Summary:
This PR fixes two issues with `display: contents` implementation:
1. When a node with `display: contents` set is a leaf, it won't be cloned after the initial tree is built. The added test case covers this scenario.
2. It was possible for the subtree of `display: contents` nodes not to be cloned during layout. I don't have a minimal reproduction for this one, unfortunately. It was discovered in the Expensify app: https://github.com/Expensify/App/issues/65268, along with a consistent reproduction. In that specific case, it seems to be heavily tied to `react-native-onyx`, which is a state management library.
Changelog: [GENERAL][FIXED] - Fixed nodes with `display: contents` set being cloned with the wrong owner
Reviewed By: adityasharat
Differential Revision: D78084270
Pulled By: j-piasecki
Summary:
Pull Request resolved: https://github.com/facebook/yoga/pull/1813
This adds a unit test to Yoga, which emulates the model of "persistent Yoga nodes" and cloning used by React Fabric, including the private (but relied on) Yoga APIs.
It models the over-invalidation exposed in D75287261, which reproduces (due to Yoga incorrectly measuring flex-basis under fit-content, and that constraint changing when sibling changes) but this test for now sets a definite height on A, to show that we only clone what is neccesary, when measure constraints do not have to change.
Having a minimal version of Fabric's model in Yoga unit tests should make some of these interesting interactions a bit easier to debug.
Changelog: [Internal]
Reviewed By: javache
Differential Revision: D75572762
fbshipit-source-id: cda8b3fdd6e538a55dd100494518688c864bd233