Rebase of facebook flexbox to yoga
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-third-party / yoga / YGDefaultValuesTest.cpp
1 /**
2  * Copyright (c) 2014-present, Facebook, Inc.
3  *
4  * This source code is licensed under the MIT license found in the
5  * LICENSE file in the root directory of this source tree.
6  */
7
8 #include <gtest/gtest.h>
9 #include <yoga/Yoga.h>
10
11 TEST(YogaTest, assert_default_values) {
12   const YGNodeRef root = YGNodeNew();
13
14   ASSERT_EQ(0, YGNodeGetChildCount(root));
15   ASSERT_EQ(NULL, YGNodeGetChild(root, 1));
16
17   ASSERT_EQ(YGDirectionInherit, YGNodeStyleGetDirection(root));
18   ASSERT_EQ(YGFlexDirectionColumn, YGNodeStyleGetFlexDirection(root));
19   ASSERT_EQ(YGJustifyFlexStart, YGNodeStyleGetJustifyContent(root));
20   ASSERT_EQ(YGAlignFlexStart, YGNodeStyleGetAlignContent(root));
21   ASSERT_EQ(YGAlignStretch, YGNodeStyleGetAlignItems(root));
22   ASSERT_EQ(YGAlignAuto, YGNodeStyleGetAlignSelf(root));
23   ASSERT_EQ(YGPositionTypeRelative, YGNodeStyleGetPositionType(root));
24   ASSERT_EQ(YGWrapNoWrap, YGNodeStyleGetFlexWrap(root));
25   ASSERT_EQ(YGOverflowVisible, YGNodeStyleGetOverflow(root));
26   ASSERT_FLOAT_EQ(0, YGNodeStyleGetFlexGrow(root));
27   ASSERT_FLOAT_EQ(0, YGNodeStyleGetFlexShrink(root));
28   ASSERT_EQ(YGNodeStyleGetFlexBasis(root).unit, YGUnitAuto);
29
30   ASSERT_EQ(YGNodeStyleGetPosition(root, YGEdgeLeft).unit, YGUnitUndefined);
31   ASSERT_EQ(YGNodeStyleGetPosition(root, YGEdgeTop).unit, YGUnitUndefined);
32   ASSERT_EQ(YGNodeStyleGetPosition(root, YGEdgeRight).unit, YGUnitUndefined);
33   ASSERT_EQ(YGNodeStyleGetPosition(root, YGEdgeBottom).unit, YGUnitUndefined);
34   ASSERT_EQ(YGNodeStyleGetPosition(root, YGEdgeStart).unit, YGUnitUndefined);
35   ASSERT_EQ(YGNodeStyleGetPosition(root, YGEdgeEnd).unit, YGUnitUndefined);
36
37   ASSERT_EQ(YGNodeStyleGetMargin(root, YGEdgeLeft).unit, YGUnitUndefined);
38   ASSERT_EQ(YGNodeStyleGetMargin(root, YGEdgeTop).unit, YGUnitUndefined);
39   ASSERT_EQ(YGNodeStyleGetMargin(root, YGEdgeRight).unit, YGUnitUndefined);
40   ASSERT_EQ(YGNodeStyleGetMargin(root, YGEdgeBottom).unit, YGUnitUndefined);
41   ASSERT_EQ(YGNodeStyleGetMargin(root, YGEdgeStart).unit, YGUnitUndefined);
42   ASSERT_EQ(YGNodeStyleGetMargin(root, YGEdgeEnd).unit, YGUnitUndefined);
43
44   ASSERT_EQ(YGNodeStyleGetPadding(root, YGEdgeLeft).unit, YGUnitUndefined);
45   ASSERT_EQ(YGNodeStyleGetPadding(root, YGEdgeTop).unit, YGUnitUndefined);
46   ASSERT_EQ(YGNodeStyleGetPadding(root, YGEdgeRight).unit, YGUnitUndefined);
47   ASSERT_EQ(YGNodeStyleGetPadding(root, YGEdgeBottom).unit, YGUnitUndefined);
48   ASSERT_EQ(YGNodeStyleGetPadding(root, YGEdgeStart).unit, YGUnitUndefined);
49   ASSERT_EQ(YGNodeStyleGetPadding(root, YGEdgeEnd).unit, YGUnitUndefined);
50
51   ASSERT_TRUE(YGFloatIsUndefined(YGNodeStyleGetBorder(root, YGEdgeLeft)));
52   ASSERT_TRUE(YGFloatIsUndefined(YGNodeStyleGetBorder(root, YGEdgeTop)));
53   ASSERT_TRUE(YGFloatIsUndefined(YGNodeStyleGetBorder(root, YGEdgeRight)));
54   ASSERT_TRUE(YGFloatIsUndefined(YGNodeStyleGetBorder(root, YGEdgeBottom)));
55   ASSERT_TRUE(YGFloatIsUndefined(YGNodeStyleGetBorder(root, YGEdgeStart)));
56   ASSERT_TRUE(YGFloatIsUndefined(YGNodeStyleGetBorder(root, YGEdgeEnd)));
57
58   ASSERT_EQ(YGNodeStyleGetWidth(root).unit, YGUnitAuto);
59   ASSERT_EQ(YGNodeStyleGetHeight(root).unit, YGUnitAuto);
60   ASSERT_EQ(YGNodeStyleGetMinWidth(root).unit, YGUnitUndefined);
61   ASSERT_EQ(YGNodeStyleGetMinHeight(root).unit, YGUnitUndefined);
62   ASSERT_EQ(YGNodeStyleGetMaxWidth(root).unit, YGUnitUndefined);
63   ASSERT_EQ(YGNodeStyleGetMaxHeight(root).unit, YGUnitUndefined);
64
65   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
66   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
67   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetRight(root));
68   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetBottom(root));
69
70   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetMargin(root, YGEdgeLeft));
71   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetMargin(root, YGEdgeTop));
72   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetMargin(root, YGEdgeRight));
73   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetMargin(root, YGEdgeBottom));
74
75   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetPadding(root, YGEdgeLeft));
76   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetPadding(root, YGEdgeTop));
77   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetPadding(root, YGEdgeRight));
78   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetPadding(root, YGEdgeBottom));
79
80   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetBorder(root, YGEdgeLeft));
81   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetBorder(root, YGEdgeTop));
82   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetBorder(root, YGEdgeRight));
83   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetBorder(root, YGEdgeBottom));
84
85   ASSERT_TRUE(YGFloatIsUndefined(YGNodeLayoutGetWidth(root)));
86   ASSERT_TRUE(YGFloatIsUndefined(YGNodeLayoutGetHeight(root)));
87   ASSERT_EQ(YGDirectionInherit, YGNodeLayoutGetDirection(root));
88
89   YGNodeFreeRecursive(root);
90 }
91
92 TEST(YogaTest, assert_webdefault_values) {
93   YGConfig *config = YGConfigNew();
94   YGConfigSetUseWebDefaults(config, true);
95   const YGNodeRef root = YGNodeNewWithConfig(config);
96
97   ASSERT_EQ(YGFlexDirectionRow, YGNodeStyleGetFlexDirection(root));
98   ASSERT_EQ(YGAlignStretch, YGNodeStyleGetAlignContent(root));
99   ASSERT_FLOAT_EQ(1.0f, YGNodeStyleGetFlexShrink(root));
100
101   YGNodeFreeRecursive(root);
102   YGConfigFree(config);
103 }
104
105 TEST(YogaTest, assert_webdefault_values_reset) {
106   YGConfig *config = YGConfigNew();
107   YGConfigSetUseWebDefaults(config, true);
108   const YGNodeRef root = YGNodeNewWithConfig(config);
109   YGNodeReset(root);
110
111   ASSERT_EQ(YGFlexDirectionRow, YGNodeStyleGetFlexDirection(root));
112   ASSERT_EQ(YGAlignStretch, YGNodeStyleGetAlignContent(root));
113   ASSERT_FLOAT_EQ(1.0f, YGNodeStyleGetFlexShrink(root));
114
115   YGNodeFreeRecursive(root);
116   YGConfigFree(config);
117 }
118
119 TEST(YogaTest, assert_legacy_stretch_behaviour) {
120   YGConfig *config = YGConfigNew();
121   YGConfigSetUseLegacyStretchBehaviour(config, true);
122   const YGNodeRef root = YGNodeNewWithConfig(config);
123   YGNodeStyleSetWidth(root, 500);
124   YGNodeStyleSetHeight(root, 500);
125
126   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
127   YGNodeStyleSetAlignItems(root_child0, YGAlignFlexStart);
128   YGNodeInsertChild(root, root_child0, 0);
129
130   const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
131   YGNodeStyleSetFlexGrow(root_child0_child0, 1);
132   YGNodeStyleSetFlexShrink(root_child0_child0, 1);
133   YGNodeInsertChild(root_child0, root_child0_child0, 0);
134
135   const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
136   YGNodeStyleSetFlexGrow(root_child0_child0_child0, 1);
137   YGNodeStyleSetFlexShrink(root_child0_child0_child0, 1);
138   YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
139   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
140
141   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
142   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
143   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
144   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
145
146   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
147   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
148   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));
149   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));
150
151   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
152   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
153   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));
154   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0_child0));
155
156   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
157   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
158   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));
159   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0_child0_child0));
160
161   YGNodeFreeRecursive(root);
162
163   YGConfigFree(config);
164 }