From 50ecd981414b85e786ffec8110154dd2caf82a9e Mon Sep 17 00:00:00 2001 From: Eric Rozell Date: Thu, 12 Oct 2023 15:02:00 -0700 Subject: [PATCH] Add test fixture to reproduce bug in aspect-ratio (#1421) Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/1421 Adds repro of inconsistent implementation of aspect-ratio behavior across Web and React Native. Reviewed By: NickGerleman Differential Revision: D50225804 fbshipit-source-id: 0494e0373dcdebc789715b2ec19c002a47d69ce0 --- gentest/fixtures/YGAspectRatioTest.html | 15 ++ .../com/facebook/yoga/YGAspectRatioTest.java | 183 +++++++++++++++++ .../tests/generated/YGAspectRatioTest.test.ts | 184 ++++++++++++++++++ tests/generated/YGAspectRatioTest.cpp | 166 ++++++++++++++++ 4 files changed, 548 insertions(+) create mode 100644 gentest/fixtures/YGAspectRatioTest.html create mode 100644 java/tests/com/facebook/yoga/YGAspectRatioTest.java create mode 100644 javascript/tests/generated/YGAspectRatioTest.test.ts create mode 100644 tests/generated/YGAspectRatioTest.cpp diff --git a/gentest/fixtures/YGAspectRatioTest.html b/gentest/fixtures/YGAspectRatioTest.html new file mode 100644 index 0000000000..4a0d6f4d22 --- /dev/null +++ b/gentest/fixtures/YGAspectRatioTest.html @@ -0,0 +1,15 @@ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/tests/com/facebook/yoga/YGAspectRatioTest.java b/java/tests/com/facebook/yoga/YGAspectRatioTest.java new file mode 100644 index 0000000000..809bafe929 --- /dev/null +++ b/java/tests/com/facebook/yoga/YGAspectRatioTest.java @@ -0,0 +1,183 @@ +/* + * 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. + */ + +// @generated by gentest/gentest.rb from gentest/fixtures/YGAspectRatioTest.html + +package com.facebook.yoga; + +import static org.junit.Assert.assertEquals; + +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class YGAspectRatioTest { + @Parameterized.Parameters(name = "{0}") + public static Iterable nodeFactories() { + return TestParametrization.nodeFactories(); + } + + @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory; + + @Test + @Ignore + public void test_aspect_ratio_does_not_stretch_cross_axis_dim() { + YogaConfig config = YogaConfigFactory.create(); + config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ABSOLUTE_PERCENTAGE_AGAINST_PADDING_EDGE, true); + + final YogaNode root = createNode(config); + root.setWidth(300f); + root.setHeight(300f); + + final YogaNode root_child0 = createNode(config); + root_child0.setOverflow(YogaOverflow.SCROLL); + root_child0.setFlexGrow(1f); + root_child0.setFlexShrink(1f); + root_child0.setFlexBasisPercent(0f); + root.addChildAt(root_child0, 0); + + final YogaNode root_child0_child0 = createNode(config); + root_child0_child0.setFlexDirection(YogaFlexDirection.ROW); + root_child0.addChildAt(root_child0_child0, 0); + + final YogaNode root_child0_child0_child0 = createNode(config); + root_child0_child0_child0.setFlexGrow(2f); + root_child0_child0_child0.setFlexShrink(1f); + root_child0_child0_child0.setFlexBasisPercent(0f); + root_child0_child0_child0.setAspectRatio(1 / 1f); + root_child0_child0.addChildAt(root_child0_child0_child0, 0); + + final YogaNode root_child0_child0_child1 = createNode(config); + root_child0_child0_child1.setWidth(5f); + root_child0_child0.addChildAt(root_child0_child0_child1, 1); + + final YogaNode root_child0_child0_child2 = createNode(config); + root_child0_child0_child2.setFlexGrow(1f); + root_child0_child0_child2.setFlexShrink(1f); + root_child0_child0_child2.setFlexBasisPercent(0f); + root_child0_child0.addChildAt(root_child0_child0_child2, 2); + + final YogaNode root_child0_child0_child2_child0 = createNode(config); + root_child0_child0_child2_child0.setFlexGrow(1f); + root_child0_child0_child2_child0.setFlexShrink(1f); + root_child0_child0_child2_child0.setFlexBasisPercent(0f); + root_child0_child0_child2_child0.setAspectRatio(1 / 1f); + root_child0_child0_child2.addChildAt(root_child0_child0_child2_child0, 0); + + final YogaNode root_child0_child0_child2_child0_child0 = createNode(config); + root_child0_child0_child2_child0_child0.setWidth(5f); + root_child0_child0_child2_child0.addChildAt(root_child0_child0_child2_child0_child0, 0); + + final YogaNode root_child0_child0_child2_child0_child1 = createNode(config); + root_child0_child0_child2_child0_child1.setFlexGrow(1f); + root_child0_child0_child2_child0_child1.setFlexShrink(1f); + root_child0_child0_child2_child0_child1.setFlexBasisPercent(0f); + root_child0_child0_child2_child0_child1.setAspectRatio(1 / 1f); + root_child0_child0_child2_child0.addChildAt(root_child0_child0_child2_child0_child1, 1); + root.setDirection(YogaDirection.LTR); + root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); + + assertEquals(0f, root.getLayoutX(), 0.0f); + assertEquals(0f, root.getLayoutY(), 0.0f); + assertEquals(300f, root.getLayoutWidth(), 0.0f); + assertEquals(300f, root.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child0.getLayoutX(), 0.0f); + assertEquals(0f, root_child0.getLayoutY(), 0.0f); + assertEquals(300f, root_child0.getLayoutWidth(), 0.0f); + assertEquals(300f, root_child0.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f); + assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f); + assertEquals(300f, root_child0_child0.getLayoutWidth(), 0.0f); + assertEquals(197f, root_child0_child0.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f); + assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f); + assertEquals(197f, root_child0_child0_child0.getLayoutWidth(), 0.0f); + assertEquals(197f, root_child0_child0_child0.getLayoutHeight(), 0.0f); + + assertEquals(197f, root_child0_child0_child1.getLayoutX(), 0.0f); + assertEquals(0f, root_child0_child0_child1.getLayoutY(), 0.0f); + assertEquals(5f, root_child0_child0_child1.getLayoutWidth(), 0.0f); + assertEquals(197f, root_child0_child0_child1.getLayoutHeight(), 0.0f); + + assertEquals(202f, root_child0_child0_child2.getLayoutX(), 0.0f); + assertEquals(0f, root_child0_child0_child2.getLayoutY(), 0.0f); + assertEquals(98f, root_child0_child0_child2.getLayoutWidth(), 0.0f); + assertEquals(197f, root_child0_child0_child2.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child0_child0_child2_child0.getLayoutX(), 0.0f); + assertEquals(0f, root_child0_child0_child2_child0.getLayoutY(), 0.0f); + assertEquals(98f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f); + assertEquals(197f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child0_child0_child2_child0_child0.getLayoutX(), 0.0f); + assertEquals(0f, root_child0_child0_child2_child0_child0.getLayoutY(), 0.0f); + assertEquals(5f, root_child0_child0_child2_child0_child0.getLayoutWidth(), 0.0f); + assertEquals(0f, root_child0_child0_child2_child0_child0.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child0_child0_child2_child0_child1.getLayoutX(), 0.0f); + assertEquals(0f, root_child0_child0_child2_child0_child1.getLayoutY(), 0.0f); + assertEquals(98f, root_child0_child0_child2_child0_child1.getLayoutWidth(), 0.0f); + assertEquals(197f, root_child0_child0_child2_child0_child1.getLayoutHeight(), 0.0f); + + root.setDirection(YogaDirection.RTL); + root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); + + assertEquals(0f, root.getLayoutX(), 0.0f); + assertEquals(0f, root.getLayoutY(), 0.0f); + assertEquals(300f, root.getLayoutWidth(), 0.0f); + assertEquals(300f, root.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child0.getLayoutX(), 0.0f); + assertEquals(0f, root_child0.getLayoutY(), 0.0f); + assertEquals(300f, root_child0.getLayoutWidth(), 0.0f); + assertEquals(300f, root_child0.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f); + assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f); + assertEquals(300f, root_child0_child0.getLayoutWidth(), 0.0f); + assertEquals(197f, root_child0_child0.getLayoutHeight(), 0.0f); + + assertEquals(103f, root_child0_child0_child0.getLayoutX(), 0.0f); + assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f); + assertEquals(197f, root_child0_child0_child0.getLayoutWidth(), 0.0f); + assertEquals(197f, root_child0_child0_child0.getLayoutHeight(), 0.0f); + + assertEquals(98f, root_child0_child0_child1.getLayoutX(), 0.0f); + assertEquals(0f, root_child0_child0_child1.getLayoutY(), 0.0f); + assertEquals(5f, root_child0_child0_child1.getLayoutWidth(), 0.0f); + assertEquals(197f, root_child0_child0_child1.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child0_child0_child2.getLayoutX(), 0.0f); + assertEquals(0f, root_child0_child0_child2.getLayoutY(), 0.0f); + assertEquals(98f, root_child0_child0_child2.getLayoutWidth(), 0.0f); + assertEquals(197f, root_child0_child0_child2.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child0_child0_child2_child0.getLayoutX(), 0.0f); + assertEquals(0f, root_child0_child0_child2_child0.getLayoutY(), 0.0f); + assertEquals(98f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f); + assertEquals(197f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f); + + assertEquals(93f, root_child0_child0_child2_child0_child0.getLayoutX(), 0.0f); + assertEquals(0f, root_child0_child0_child2_child0_child0.getLayoutY(), 0.0f); + assertEquals(5f, root_child0_child0_child2_child0_child0.getLayoutWidth(), 0.0f); + assertEquals(0f, root_child0_child0_child2_child0_child0.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child0_child0_child2_child0_child1.getLayoutX(), 0.0f); + assertEquals(0f, root_child0_child0_child2_child0_child1.getLayoutY(), 0.0f); + assertEquals(98f, root_child0_child0_child2_child0_child1.getLayoutWidth(), 0.0f); + assertEquals(197f, root_child0_child0_child2_child0_child1.getLayoutHeight(), 0.0f); + } + + private YogaNode createNode(YogaConfig config) { + return mNodeFactory.create(config); + } +} diff --git a/javascript/tests/generated/YGAspectRatioTest.test.ts b/javascript/tests/generated/YGAspectRatioTest.test.ts new file mode 100644 index 0000000000..ea6b6c552f --- /dev/null +++ b/javascript/tests/generated/YGAspectRatioTest.test.ts @@ -0,0 +1,184 @@ +/** + * 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. + */ + +// @generated by gentest/gentest.rb from gentest/fixtures/YGAspectRatioTest.html + +import {Yoga} from "../tools/globals"; +import { + Align, + Direction, + Display, + Edge, + Errata, + ExperimentalFeature, + FlexDirection, + Gutter, + Justify, + MeasureMode, + Overflow, + PositionType, + Unit, + Wrap, +} from 'yoga-layout'; + +test.skip('aspect_ratio_does_not_stretch_cross_axis_dim', () => { + const config = Yoga.Config.create(); + let root; + + config.setExperimentalFeatureEnabled(ExperimentalFeature.AbsolutePercentageAgainstPaddingEdge, true); + + try { + root = Yoga.Node.create(config); + root.setWidth(300); + root.setHeight(300); + + const root_child0 = Yoga.Node.create(config); + root_child0.setOverflow(Overflow.Scroll); + root_child0.setFlexGrow(1); + root_child0.setFlexShrink(1); + root_child0.setFlexBasis("0%"); + root.insertChild(root_child0, 0); + + const root_child0_child0 = Yoga.Node.create(config); + root_child0_child0.setFlexDirection(FlexDirection.Row); + root_child0.insertChild(root_child0_child0, 0); + + const root_child0_child0_child0 = Yoga.Node.create(config); + root_child0_child0_child0.setFlexGrow(2); + root_child0_child0_child0.setFlexShrink(1); + root_child0_child0_child0.setFlexBasis("0%"); + root_child0_child0_child0.setAspectRatio(1 / 1); + root_child0_child0.insertChild(root_child0_child0_child0, 0); + + const root_child0_child0_child1 = Yoga.Node.create(config); + root_child0_child0_child1.setWidth(5); + root_child0_child0.insertChild(root_child0_child0_child1, 1); + + const root_child0_child0_child2 = Yoga.Node.create(config); + root_child0_child0_child2.setFlexGrow(1); + root_child0_child0_child2.setFlexShrink(1); + root_child0_child0_child2.setFlexBasis("0%"); + root_child0_child0.insertChild(root_child0_child0_child2, 2); + + const root_child0_child0_child2_child0 = Yoga.Node.create(config); + root_child0_child0_child2_child0.setFlexGrow(1); + root_child0_child0_child2_child0.setFlexShrink(1); + root_child0_child0_child2_child0.setFlexBasis("0%"); + root_child0_child0_child2_child0.setAspectRatio(1 / 1); + root_child0_child0_child2.insertChild(root_child0_child0_child2_child0, 0); + + const root_child0_child0_child2_child0_child0 = Yoga.Node.create(config); + root_child0_child0_child2_child0_child0.setWidth(5); + root_child0_child0_child2_child0.insertChild(root_child0_child0_child2_child0_child0, 0); + + const root_child0_child0_child2_child0_child1 = Yoga.Node.create(config); + root_child0_child0_child2_child0_child1.setFlexGrow(1); + root_child0_child0_child2_child0_child1.setFlexShrink(1); + root_child0_child0_child2_child0_child1.setFlexBasis("0%"); + root_child0_child0_child2_child0_child1.setAspectRatio(1 / 1); + root_child0_child0_child2_child0.insertChild(root_child0_child0_child2_child0_child1, 1); + root.calculateLayout(undefined, undefined, Direction.LTR); + + expect(root.getComputedLeft()).toBe(0); + expect(root.getComputedTop()).toBe(0); + expect(root.getComputedWidth()).toBe(300); + expect(root.getComputedHeight()).toBe(300); + + expect(root_child0.getComputedLeft()).toBe(0); + expect(root_child0.getComputedTop()).toBe(0); + expect(root_child0.getComputedWidth()).toBe(300); + expect(root_child0.getComputedHeight()).toBe(300); + + expect(root_child0_child0.getComputedLeft()).toBe(0); + expect(root_child0_child0.getComputedTop()).toBe(0); + expect(root_child0_child0.getComputedWidth()).toBe(300); + expect(root_child0_child0.getComputedHeight()).toBe(197); + + expect(root_child0_child0_child0.getComputedLeft()).toBe(0); + expect(root_child0_child0_child0.getComputedTop()).toBe(0); + expect(root_child0_child0_child0.getComputedWidth()).toBe(197); + expect(root_child0_child0_child0.getComputedHeight()).toBe(197); + + expect(root_child0_child0_child1.getComputedLeft()).toBe(197); + expect(root_child0_child0_child1.getComputedTop()).toBe(0); + expect(root_child0_child0_child1.getComputedWidth()).toBe(5); + expect(root_child0_child0_child1.getComputedHeight()).toBe(197); + + expect(root_child0_child0_child2.getComputedLeft()).toBe(202); + expect(root_child0_child0_child2.getComputedTop()).toBe(0); + expect(root_child0_child0_child2.getComputedWidth()).toBe(98); + expect(root_child0_child0_child2.getComputedHeight()).toBe(197); + + expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(0); + expect(root_child0_child0_child2_child0.getComputedTop()).toBe(0); + expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(98); + expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(197); + + expect(root_child0_child0_child2_child0_child0.getComputedLeft()).toBe(0); + expect(root_child0_child0_child2_child0_child0.getComputedTop()).toBe(0); + expect(root_child0_child0_child2_child0_child0.getComputedWidth()).toBe(5); + expect(root_child0_child0_child2_child0_child0.getComputedHeight()).toBe(0); + + expect(root_child0_child0_child2_child0_child1.getComputedLeft()).toBe(0); + expect(root_child0_child0_child2_child0_child1.getComputedTop()).toBe(0); + expect(root_child0_child0_child2_child0_child1.getComputedWidth()).toBe(98); + expect(root_child0_child0_child2_child0_child1.getComputedHeight()).toBe(197); + + root.calculateLayout(undefined, undefined, Direction.RTL); + + expect(root.getComputedLeft()).toBe(0); + expect(root.getComputedTop()).toBe(0); + expect(root.getComputedWidth()).toBe(300); + expect(root.getComputedHeight()).toBe(300); + + expect(root_child0.getComputedLeft()).toBe(0); + expect(root_child0.getComputedTop()).toBe(0); + expect(root_child0.getComputedWidth()).toBe(300); + expect(root_child0.getComputedHeight()).toBe(300); + + expect(root_child0_child0.getComputedLeft()).toBe(0); + expect(root_child0_child0.getComputedTop()).toBe(0); + expect(root_child0_child0.getComputedWidth()).toBe(300); + expect(root_child0_child0.getComputedHeight()).toBe(197); + + expect(root_child0_child0_child0.getComputedLeft()).toBe(103); + expect(root_child0_child0_child0.getComputedTop()).toBe(0); + expect(root_child0_child0_child0.getComputedWidth()).toBe(197); + expect(root_child0_child0_child0.getComputedHeight()).toBe(197); + + expect(root_child0_child0_child1.getComputedLeft()).toBe(98); + expect(root_child0_child0_child1.getComputedTop()).toBe(0); + expect(root_child0_child0_child1.getComputedWidth()).toBe(5); + expect(root_child0_child0_child1.getComputedHeight()).toBe(197); + + expect(root_child0_child0_child2.getComputedLeft()).toBe(0); + expect(root_child0_child0_child2.getComputedTop()).toBe(0); + expect(root_child0_child0_child2.getComputedWidth()).toBe(98); + expect(root_child0_child0_child2.getComputedHeight()).toBe(197); + + expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(0); + expect(root_child0_child0_child2_child0.getComputedTop()).toBe(0); + expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(98); + expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(197); + + expect(root_child0_child0_child2_child0_child0.getComputedLeft()).toBe(93); + expect(root_child0_child0_child2_child0_child0.getComputedTop()).toBe(0); + expect(root_child0_child0_child2_child0_child0.getComputedWidth()).toBe(5); + expect(root_child0_child0_child2_child0_child0.getComputedHeight()).toBe(0); + + expect(root_child0_child0_child2_child0_child1.getComputedLeft()).toBe(0); + expect(root_child0_child0_child2_child0_child1.getComputedTop()).toBe(0); + expect(root_child0_child0_child2_child0_child1.getComputedWidth()).toBe(98); + expect(root_child0_child0_child2_child0_child1.getComputedHeight()).toBe(197); + } finally { + if (typeof root !== 'undefined') { + root.freeRecursive(); + } + + config.free(); + } +}); diff --git a/tests/generated/YGAspectRatioTest.cpp b/tests/generated/YGAspectRatioTest.cpp new file mode 100644 index 0000000000..11144e5ee9 --- /dev/null +++ b/tests/generated/YGAspectRatioTest.cpp @@ -0,0 +1,166 @@ +/* + * 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/YGAspectRatioTest.html + +#include +#include + +TEST(YogaTest, aspect_ratio_does_not_stretch_cross_axis_dim) { + GTEST_SKIP(); + + const YGConfigRef config = YGConfigNew(); + YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureAbsolutePercentageAgainstPaddingEdge, true); + + const YGNodeRef root = YGNodeNewWithConfig(config); + YGNodeStyleSetWidth(root, 300); + YGNodeStyleSetHeight(root, 300); + + const YGNodeRef root_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetOverflow(root_child0, YGOverflowScroll); + YGNodeStyleSetFlexGrow(root_child0, 1); + YGNodeStyleSetFlexShrink(root_child0, 1); + YGNodeStyleSetFlexBasisPercent(root_child0, 0); + YGNodeInsertChild(root, root_child0, 0); + + const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRow); + YGNodeInsertChild(root_child0, root_child0_child0, 0); + + const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexGrow(root_child0_child0_child0, 2); + YGNodeStyleSetFlexShrink(root_child0_child0_child0, 1); + YGNodeStyleSetFlexBasisPercent(root_child0_child0_child0, 0); + YGNodeStyleSetAspectRatio(root_child0_child0_child0, 1 / 1); + YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0); + + const YGNodeRef root_child0_child0_child1 = YGNodeNewWithConfig(config); + YGNodeStyleSetWidth(root_child0_child0_child1, 5); + YGNodeInsertChild(root_child0_child0, root_child0_child0_child1, 1); + + const YGNodeRef root_child0_child0_child2 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexGrow(root_child0_child0_child2, 1); + YGNodeStyleSetFlexShrink(root_child0_child0_child2, 1); + YGNodeStyleSetFlexBasisPercent(root_child0_child0_child2, 0); + YGNodeInsertChild(root_child0_child0, root_child0_child0_child2, 2); + + const YGNodeRef root_child0_child0_child2_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexGrow(root_child0_child0_child2_child0, 1); + YGNodeStyleSetFlexShrink(root_child0_child0_child2_child0, 1); + YGNodeStyleSetFlexBasisPercent(root_child0_child0_child2_child0, 0); + YGNodeStyleSetAspectRatio(root_child0_child0_child2_child0, 1 / 1); + YGNodeInsertChild(root_child0_child0_child2, root_child0_child0_child2_child0, 0); + + const YGNodeRef root_child0_child0_child2_child0_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetWidth(root_child0_child0_child2_child0_child0, 5); + YGNodeInsertChild(root_child0_child0_child2_child0, root_child0_child0_child2_child0_child0, 0); + + const YGNodeRef root_child0_child0_child2_child0_child1 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexGrow(root_child0_child0_child2_child0_child1, 1); + YGNodeStyleSetFlexShrink(root_child0_child0_child2_child0_child1, 1); + YGNodeStyleSetFlexBasisPercent(root_child0_child0_child2_child0_child1, 0); + YGNodeStyleSetAspectRatio(root_child0_child0_child2_child0_child1, 1 / 1); + YGNodeInsertChild(root_child0_child0_child2_child0, root_child0_child0_child2_child0_child1, 1); + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); + ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root)); + ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); + ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root_child0)); + ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0)); + ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root_child0_child0)); + ASSERT_FLOAT_EQ(197, 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(197, YGNodeLayoutGetWidth(root_child0_child0_child0)); + ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child0)); + + ASSERT_FLOAT_EQ(197, YGNodeLayoutGetLeft(root_child0_child0_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1)); + ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child0_child0_child1)); + ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child1)); + + ASSERT_FLOAT_EQ(202, YGNodeLayoutGetLeft(root_child0_child0_child2)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child2)); + ASSERT_FLOAT_EQ(98, YGNodeLayoutGetWidth(root_child0_child0_child2)); + ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child2)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child2_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child2_child0)); + ASSERT_FLOAT_EQ(98, YGNodeLayoutGetWidth(root_child0_child0_child2_child0)); + ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child2_child0)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child2_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child2_child0_child0)); + ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child0_child0_child2_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child2_child0_child0)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child2_child0_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child2_child0_child1)); + ASSERT_FLOAT_EQ(98, YGNodeLayoutGetWidth(root_child0_child0_child2_child0_child1)); + ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child2_child0_child1)); + + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); + ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root)); + ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); + ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root_child0)); + ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0)); + ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root_child0_child0)); + ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0)); + + ASSERT_FLOAT_EQ(103, YGNodeLayoutGetLeft(root_child0_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0)); + ASSERT_FLOAT_EQ(197, YGNodeLayoutGetWidth(root_child0_child0_child0)); + ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child0)); + + ASSERT_FLOAT_EQ(98, YGNodeLayoutGetLeft(root_child0_child0_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1)); + ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child0_child0_child1)); + ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child1)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child2)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child2)); + ASSERT_FLOAT_EQ(98, YGNodeLayoutGetWidth(root_child0_child0_child2)); + ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child2)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child2_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child2_child0)); + ASSERT_FLOAT_EQ(98, YGNodeLayoutGetWidth(root_child0_child0_child2_child0)); + ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child2_child0)); + + ASSERT_FLOAT_EQ(93, YGNodeLayoutGetLeft(root_child0_child0_child2_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child2_child0_child0)); + ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child0_child0_child2_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child2_child0_child0)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child2_child0_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child2_child0_child1)); + ASSERT_FLOAT_EQ(98, YGNodeLayoutGetWidth(root_child0_child0_child2_child0_child1)); + ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child2_child0_child1)); + + YGNodeFreeRecursive(root); + + YGConfigFree(config); +}