/* * 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. */ // clang-format off // @generated by gentest/gentest.rb from gentest/fixtures/YGPercentageTest.html #include #include TEST(YogaTest, percentage_width_height) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 200); YGNodeStyleSetHeight(root, 200); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetWidthPercent(root_child0, 30); YGNodeStyleSetHeightPercent(root_child0, 30); YGNodeInsertChild(root, root_child0, 0); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(140, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_position_left_top) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 400); YGNodeStyleSetHeight(root, 400); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetPositionPercent(root_child0, YGEdgeLeft, 10); YGNodeStyleSetPositionPercent(root_child0, YGEdgeTop, 20); YGNodeStyleSetWidthPercent(root_child0, 45); YGNodeStyleSetHeightPercent(root_child0, 55); YGNodeInsertChild(root, root_child0, 0); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(180, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(220, YGNodeLayoutGetHeight(root_child0)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(260, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(180, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(220, YGNodeLayoutGetHeight(root_child0)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_position_bottom_right) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 500); YGNodeStyleSetHeight(root, 500); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetPositionPercent(root_child0, YGEdgeRight, 20); YGNodeStyleSetPositionPercent(root_child0, YGEdgeBottom, 10); YGNodeStyleSetWidthPercent(root_child0, 55); YGNodeStyleSetHeightPercent(root_child0, 15); YGNodeInsertChild(root, root_child0, 0); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(275, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root_child0)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(125, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(275, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root_child0)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_flex_basis) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 200); YGNodeStyleSetHeight(root, 200); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child0, 1); YGNodeStyleSetFlexBasisPercent(root_child0, 50); YGNodeInsertChild(root, root_child0, 0); const YGNodeRef root_child1 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child1, 1); YGNodeStyleSetFlexBasisPercent(root_child1, 25); YGNodeInsertChild(root, root_child1, 1); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(125, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(125, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(75, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(125, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(75, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_flex_basis_cross) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 200); YGNodeStyleSetHeight(root, 200); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child0, 1); YGNodeStyleSetFlexBasisPercent(root_child0, 50); YGNodeInsertChild(root, root_child0, 0); const YGNodeRef root_child1 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child1, 1); YGNodeStyleSetFlexBasisPercent(root_child1, 25); YGNodeInsertChild(root, root_child1, 1); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(125, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(125, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root_child1)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(125, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(125, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root_child1)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_flex_basis_cross_min_height) { GTEST_SKIP(); const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 200); YGNodeStyleSetHeight(root, 200); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child0, 1); YGNodeStyleSetMinHeightPercent(root_child0, 60); YGNodeInsertChild(root, root_child0, 0); const YGNodeRef root_child1 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child1, 2); YGNodeStyleSetMinHeightPercent(root_child1, 10); YGNodeInsertChild(root, root_child1, 1); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child1)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child1)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_flex_basis_main_max_height) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 200); YGNodeStyleSetHeight(root, 200); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child0, 1); YGNodeStyleSetFlexBasisPercent(root_child0, 10); YGNodeStyleSetMaxHeightPercent(root_child0, 60); YGNodeInsertChild(root, root_child0, 0); const YGNodeRef root_child1 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child1, 4); YGNodeStyleSetFlexBasisPercent(root_child1, 10); YGNodeStyleSetMaxHeightPercent(root_child1, 20); YGNodeInsertChild(root, root_child1, 1); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(52, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(148, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child1)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(148, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(148, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child1)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_flex_basis_cross_max_height) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 200); YGNodeStyleSetHeight(root, 200); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child0, 1); YGNodeStyleSetFlexBasisPercent(root_child0, 10); YGNodeStyleSetMaxHeightPercent(root_child0, 60); YGNodeInsertChild(root, root_child0, 0); const YGNodeRef root_child1 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child1, 4); YGNodeStyleSetFlexBasisPercent(root_child1, 10); YGNodeStyleSetMaxHeightPercent(root_child1, 20); YGNodeInsertChild(root, root_child1, 1); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child1)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child1)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_flex_basis_main_max_width) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 200); YGNodeStyleSetHeight(root, 200); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child0, 1); YGNodeStyleSetFlexBasisPercent(root_child0, 15); YGNodeStyleSetMaxWidthPercent(root_child0, 60); YGNodeInsertChild(root, root_child0, 0); const YGNodeRef root_child1 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child1, 4); YGNodeStyleSetFlexBasisPercent(root_child1, 10); YGNodeStyleSetMaxWidthPercent(root_child1, 20); YGNodeInsertChild(root, root_child1, 1); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_flex_basis_cross_max_width) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 200); YGNodeStyleSetHeight(root, 200); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child0, 1); YGNodeStyleSetFlexBasisPercent(root_child0, 10); YGNodeStyleSetMaxWidthPercent(root_child0, 60); YGNodeInsertChild(root, root_child0, 0); const YGNodeRef root_child1 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child1, 4); YGNodeStyleSetFlexBasisPercent(root_child1, 15); YGNodeStyleSetMaxWidthPercent(root_child1, 20); YGNodeInsertChild(root, root_child1, 1); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child1)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(160, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child1)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_flex_basis_main_min_width) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 200); YGNodeStyleSetHeight(root, 200); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child0, 1); YGNodeStyleSetFlexBasisPercent(root_child0, 15); YGNodeStyleSetMinWidthPercent(root_child0, 60); YGNodeInsertChild(root, root_child0, 0); const YGNodeRef root_child1 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child1, 4); YGNodeStyleSetFlexBasisPercent(root_child1, 10); YGNodeStyleSetMinWidthPercent(root_child1, 20); YGNodeInsertChild(root, root_child1, 1); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_flex_basis_cross_min_width) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 200); YGNodeStyleSetHeight(root, 200); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child0, 1); YGNodeStyleSetFlexBasisPercent(root_child0, 10); YGNodeStyleSetMinWidthPercent(root_child0, 60); YGNodeInsertChild(root, root_child0, 0); const YGNodeRef root_child1 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child1, 4); YGNodeStyleSetFlexBasisPercent(root_child1, 15); YGNodeStyleSetMinWidthPercent(root_child1, 20); YGNodeInsertChild(root, root_child1, 1); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child1)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child1)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_multiple_nested_with_padding_margin_and_percentage_values) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 200); YGNodeStyleSetHeight(root, 200); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child0, 1); YGNodeStyleSetFlexBasisPercent(root_child0, 10); YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 5); YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5); YGNodeStyleSetMargin(root_child0, YGEdgeRight, 5); YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 5); YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 3); YGNodeStyleSetPadding(root_child0, YGEdgeTop, 3); YGNodeStyleSetPadding(root_child0, YGEdgeRight, 3); YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 3); YGNodeStyleSetMinWidthPercent(root_child0, 60); YGNodeInsertChild(root, root_child0, 0); const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 5); YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 5); YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 5); YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 5); YGNodeStyleSetPaddingPercent(root_child0_child0, YGEdgeLeft, 3); YGNodeStyleSetPaddingPercent(root_child0_child0, YGEdgeTop, 3); YGNodeStyleSetPaddingPercent(root_child0_child0, YGEdgeRight, 3); YGNodeStyleSetPaddingPercent(root_child0_child0, YGEdgeBottom, 3); YGNodeStyleSetWidthPercent(root_child0_child0, 50); YGNodeInsertChild(root_child0, root_child0_child0, 0); const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetMarginPercent(root_child0_child0_child0, YGEdgeLeft, 5); YGNodeStyleSetMarginPercent(root_child0_child0_child0, YGEdgeTop, 5); YGNodeStyleSetMarginPercent(root_child0_child0_child0, YGEdgeRight, 5); YGNodeStyleSetMarginPercent(root_child0_child0_child0, YGEdgeBottom, 5); YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 3); YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3); YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 3); YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 3); YGNodeStyleSetWidthPercent(root_child0_child0_child0, 45); YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0); const YGNodeRef root_child1 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child1, 4); YGNodeStyleSetFlexBasisPercent(root_child1, 15); YGNodeStyleSetMinWidthPercent(root_child1, 20); YGNodeInsertChild(root, root_child1, 1); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(190, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(48, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(8, YGNodeLayoutGetLeft(root_child0_child0)); ASSERT_FLOAT_EQ(8, YGNodeLayoutGetTop(root_child0_child0)); ASSERT_FLOAT_EQ(92, YGNodeLayoutGetWidth(root_child0_child0)); ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0_child0_child0)); ASSERT_FLOAT_EQ(36, YGNodeLayoutGetWidth(root_child0_child0_child0)); ASSERT_FLOAT_EQ(6, YGNodeLayoutGetHeight(root_child0_child0_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(58, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(142, YGNodeLayoutGetHeight(root_child1)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(190, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(48, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0)); ASSERT_FLOAT_EQ(8, YGNodeLayoutGetTop(root_child0_child0)); ASSERT_FLOAT_EQ(92, YGNodeLayoutGetWidth(root_child0_child0)); ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child0)); ASSERT_FLOAT_EQ(46, YGNodeLayoutGetLeft(root_child0_child0_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0_child0_child0)); ASSERT_FLOAT_EQ(36, YGNodeLayoutGetWidth(root_child0_child0_child0)); ASSERT_FLOAT_EQ(6, YGNodeLayoutGetHeight(root_child0_child0_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(58, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(142, YGNodeLayoutGetHeight(root_child1)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_margin_should_calculate_based_only_on_width) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 200); YGNodeStyleSetHeight(root, 100); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child0, 1); YGNodeStyleSetMarginPercent(root_child0, YGEdgeLeft, 10); YGNodeStyleSetMarginPercent(root_child0, YGEdgeTop, 10); YGNodeStyleSetMarginPercent(root_child0, YGEdgeRight, 10); YGNodeStyleSetMarginPercent(root_child0, YGEdgeBottom, 10); YGNodeInsertChild(root, root_child0, 0); const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetWidth(root_child0_child0, 10); YGNodeStyleSetHeight(root_child0_child0, 10); YGNodeInsertChild(root_child0, root_child0_child0, 0); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_padding_should_calculate_based_only_on_width) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 200); YGNodeStyleSetHeight(root, 100); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child0, 1); YGNodeStyleSetPaddingPercent(root_child0, YGEdgeLeft, 10); YGNodeStyleSetPaddingPercent(root_child0, YGEdgeTop, 10); YGNodeStyleSetPaddingPercent(root_child0, YGEdgeRight, 10); YGNodeStyleSetPaddingPercent(root_child0, YGEdgeBottom, 10); YGNodeInsertChild(root, root_child0, 0); const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetWidth(root_child0_child0, 10); YGNodeStyleSetHeight(root_child0_child0, 10); YGNodeInsertChild(root_child0, root_child0_child0, 0); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0)); ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(170, YGNodeLayoutGetLeft(root_child0_child0)); ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_absolute_position) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 200); YGNodeStyleSetHeight(root, 100); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute); YGNodeStyleSetPositionPercent(root_child0, YGEdgeLeft, 30); YGNodeStyleSetPositionPercent(root_child0, YGEdgeTop, 10); YGNodeStyleSetWidth(root_child0, 10); YGNodeStyleSetHeight(root_child0, 10); YGNodeInsertChild(root, root_child0, 0); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_width_height_undefined_parent_size) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetWidthPercent(root_child0, 50); YGNodeStyleSetHeightPercent(root_child0, 50); YGNodeInsertChild(root, root_child0, 0); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percent_within_flex_grow) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 350); YGNodeStyleSetHeight(root, 100); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetWidth(root_child0, 100); YGNodeInsertChild(root, root_child0, 0); const YGNodeRef root_child1 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexGrow(root_child1, 1); YGNodeInsertChild(root, root_child1, 1); const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetWidthPercent(root_child1_child0, 100); YGNodeInsertChild(root_child1, root_child1_child0, 0); const YGNodeRef root_child2 = YGNodeNewWithConfig(config); YGNodeStyleSetWidth(root_child2, 100); YGNodeInsertChild(root, root_child2, 2); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(350, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0)); ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child1_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1_child0)); ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child2)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(350, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child1)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0)); ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child1_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percentage_container_in_wrapping_container) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetJustifyContent(root, YGJustifyCenter); YGNodeStyleSetAlignItems(root, YGAlignCenter); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 200); YGNodeStyleSetHeight(root, 200); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeInsertChild(root, root_child0, 0); const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRow); YGNodeStyleSetJustifyContent(root_child0_child0, YGJustifyCenter); YGNodeStyleSetWidthPercent(root_child0_child0, 100); YGNodeInsertChild(root_child0, root_child0_child0, 0); const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetWidth(root_child0_child0_child0, 50); YGNodeStyleSetHeight(root_child0_child0_child0, 50); YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0); const YGNodeRef root_child0_child0_child1 = YGNodeNewWithConfig(config); YGNodeStyleSetWidth(root_child0_child0_child1, 50); YGNodeStyleSetHeight(root_child0_child0_child1, 50); YGNodeInsertChild(root_child0_child0, root_child0_child0_child1, 1); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child1)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child1)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1)); YGNodeFreeRecursive(root); YGConfigFree(config); } TEST(YogaTest, percent_absolute_position) { const YGConfigRef config = YGConfigNew(); YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); YGNodeStyleSetWidth(root, 60); YGNodeStyleSetHeight(root, 50); const YGNodeRef root_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow); YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute); YGNodeStyleSetPositionPercent(root_child0, YGEdgeLeft, 50); YGNodeStyleSetWidthPercent(root_child0, 100); YGNodeStyleSetHeight(root_child0, 50); YGNodeInsertChild(root, root_child0, 0); const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config); YGNodeStyleSetWidthPercent(root_child0_child0, 100); YGNodeInsertChild(root_child0, root_child0_child0, 0); const YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config); YGNodeStyleSetWidthPercent(root_child0_child1, 100); YGNodeInsertChild(root_child0, root_child0_child1, 1); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0_child1)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root)); ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0)); ASSERT_FLOAT_EQ(-60, YGNodeLayoutGetLeft(root_child0_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1)); ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0_child1)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1)); YGNodeFreeRecursive(root); YGConfigFree(config); }