Summary: X-link: https://github.com/facebook/react-native/pull/44010 Pull Request resolved: https://github.com/facebook/yoga/pull/1641 Yoga has quirk where newly constructed nodes are clean, which isn't really correct. Normally never shows in in real code because setting a style or children will dirty. Fabric doesn't use the public APIs that do this dirtying, so it ends up getting creative instead. We should fix so that newly constructed nodes are dirty. Copy-constructed Nodes (also only a Fabric thing, will retain original dirty flag. Changelog: [Internal] Reviewed By: sammy-SC Differential Revision: D55855328 fbshipit-source-id: be49efaf8ac29351f8e5ec509bd9912546944332
76 lines
2.1 KiB
C++
76 lines
2.1 KiB
C++
/*
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#include <gtest/gtest.h>
|
|
#include <yoga/Yoga.h>
|
|
|
|
TEST(YogaTest, copy_style_same) {
|
|
const YGNodeRef node0 = YGNodeNew();
|
|
const YGNodeRef node1 = YGNodeNew();
|
|
|
|
YGNodeCopyStyle(node0, node1);
|
|
|
|
YGNodeFree(node0);
|
|
YGNodeFree(node1);
|
|
}
|
|
|
|
TEST(YogaTest, copy_style_modified) {
|
|
const YGNodeRef node0 = YGNodeNew();
|
|
ASSERT_EQ(YGFlexDirectionColumn, YGNodeStyleGetFlexDirection(node0));
|
|
ASSERT_FALSE(YGNodeStyleGetMaxHeight(node0).unit != YGUnitUndefined);
|
|
|
|
const YGNodeRef node1 = YGNodeNew();
|
|
YGNodeStyleSetFlexDirection(node1, YGFlexDirectionRow);
|
|
YGNodeStyleSetMaxHeight(node1, 10);
|
|
|
|
YGNodeCopyStyle(node0, node1);
|
|
ASSERT_EQ(YGFlexDirectionRow, YGNodeStyleGetFlexDirection(node0));
|
|
ASSERT_FLOAT_EQ(10, YGNodeStyleGetMaxHeight(node0).value);
|
|
|
|
YGNodeFree(node0);
|
|
YGNodeFree(node1);
|
|
}
|
|
|
|
TEST(YogaTest, copy_style_modified_same) {
|
|
const YGNodeRef node0 = YGNodeNew();
|
|
YGNodeStyleSetFlexDirection(node0, YGFlexDirectionRow);
|
|
YGNodeStyleSetMaxHeight(node0, 10);
|
|
YGNodeCalculateLayout(node0, YGUndefined, YGUndefined, YGDirectionLTR);
|
|
|
|
const YGNodeRef node1 = YGNodeNew();
|
|
YGNodeStyleSetFlexDirection(node1, YGFlexDirectionRow);
|
|
YGNodeStyleSetMaxHeight(node1, 10);
|
|
|
|
YGNodeCopyStyle(node0, node1);
|
|
|
|
YGNodeFree(node0);
|
|
YGNodeFree(node1);
|
|
}
|
|
|
|
TEST(YogaTest, initialise_flexShrink_flexGrow) {
|
|
const YGNodeRef node0 = YGNodeNew();
|
|
YGNodeStyleSetFlexShrink(node0, 1);
|
|
ASSERT_EQ(1, YGNodeStyleGetFlexShrink(node0));
|
|
|
|
YGNodeStyleSetFlexShrink(node0, YGUndefined);
|
|
YGNodeStyleSetFlexGrow(node0, 3);
|
|
ASSERT_EQ(
|
|
0,
|
|
YGNodeStyleGetFlexShrink(
|
|
node0)); // Default value is Zero, if flex shrink is not defined
|
|
ASSERT_EQ(3, YGNodeStyleGetFlexGrow(node0));
|
|
|
|
YGNodeStyleSetFlexGrow(node0, YGUndefined);
|
|
YGNodeStyleSetFlexShrink(node0, 3);
|
|
ASSERT_EQ(
|
|
0,
|
|
YGNodeStyleGetFlexGrow(
|
|
node0)); // Default value is Zero, if flex grow is not defined
|
|
ASSERT_EQ(3, YGNodeStyleGetFlexShrink(node0));
|
|
YGNodeFree(node0);
|
|
}
|