2 * Copyright (c) 2014-present, Facebook, Inc.
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
8 // @Generated by gentest/gentest.rb from gentest/fixtures/YGAbsolutePositionTest.html
10 #include <gtest/gtest.h>
11 #include <yoga/Yoga.h>
13 TEST(YogaTest, absolute_layout_width_height_start_top) {
14 const YGConfigRef config = YGConfigNew();
16 const YGNodeRef root = YGNodeNewWithConfig(config);
17 YGNodeStyleSetWidth(root, 100);
18 YGNodeStyleSetHeight(root, 100);
20 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
21 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
22 YGNodeStyleSetPosition(root_child0, YGEdgeStart, 10);
23 YGNodeStyleSetPosition(root_child0, YGEdgeTop, 10);
24 YGNodeStyleSetWidth(root_child0, 10);
25 YGNodeStyleSetHeight(root_child0, 10);
26 YGNodeInsertChild(root, root_child0, 0);
27 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
29 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
30 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
31 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
32 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
34 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));
35 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));
36 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
37 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
39 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
41 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
42 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
43 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
44 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
46 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));
47 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));
48 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
49 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
51 YGNodeFreeRecursive(root);
56 TEST(YogaTest, absolute_layout_width_height_end_bottom) {
57 const YGConfigRef config = YGConfigNew();
59 const YGNodeRef root = YGNodeNewWithConfig(config);
60 YGNodeStyleSetWidth(root, 100);
61 YGNodeStyleSetHeight(root, 100);
63 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
64 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
65 YGNodeStyleSetPosition(root_child0, YGEdgeEnd, 10);
66 YGNodeStyleSetPosition(root_child0, YGEdgeBottom, 10);
67 YGNodeStyleSetWidth(root_child0, 10);
68 YGNodeStyleSetHeight(root_child0, 10);
69 YGNodeInsertChild(root, root_child0, 0);
70 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
72 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
73 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
74 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
75 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
77 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));
78 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0));
79 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
80 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
82 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
84 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
85 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
86 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
87 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
89 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));
90 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0));
91 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
92 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
94 YGNodeFreeRecursive(root);
99 TEST(YogaTest, absolute_layout_start_top_end_bottom) {
100 const YGConfigRef config = YGConfigNew();
102 const YGNodeRef root = YGNodeNewWithConfig(config);
103 YGNodeStyleSetWidth(root, 100);
104 YGNodeStyleSetHeight(root, 100);
106 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
107 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
108 YGNodeStyleSetPosition(root_child0, YGEdgeStart, 10);
109 YGNodeStyleSetPosition(root_child0, YGEdgeTop, 10);
110 YGNodeStyleSetPosition(root_child0, YGEdgeEnd, 10);
111 YGNodeStyleSetPosition(root_child0, YGEdgeBottom, 10);
112 YGNodeInsertChild(root, root_child0, 0);
113 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
115 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
116 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
117 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
118 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
120 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));
121 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));
122 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));
123 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));
125 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
127 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
128 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
129 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
130 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
132 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));
133 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));
134 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));
135 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));
137 YGNodeFreeRecursive(root);
139 YGConfigFree(config);
142 TEST(YogaTest, absolute_layout_width_height_start_top_end_bottom) {
143 const YGConfigRef config = YGConfigNew();
145 const YGNodeRef root = YGNodeNewWithConfig(config);
146 YGNodeStyleSetWidth(root, 100);
147 YGNodeStyleSetHeight(root, 100);
149 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
150 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
151 YGNodeStyleSetPosition(root_child0, YGEdgeStart, 10);
152 YGNodeStyleSetPosition(root_child0, YGEdgeTop, 10);
153 YGNodeStyleSetPosition(root_child0, YGEdgeEnd, 10);
154 YGNodeStyleSetPosition(root_child0, YGEdgeBottom, 10);
155 YGNodeStyleSetWidth(root_child0, 10);
156 YGNodeStyleSetHeight(root_child0, 10);
157 YGNodeInsertChild(root, root_child0, 0);
158 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
160 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
161 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
162 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
163 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
165 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));
166 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));
167 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
168 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
170 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
172 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
173 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
174 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
175 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
177 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));
178 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));
179 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
180 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
182 YGNodeFreeRecursive(root);
184 YGConfigFree(config);
187 TEST(YogaTest, do_not_clamp_height_of_absolute_node_to_height_of_its_overflow_hidden_parent) {
188 const YGConfigRef config = YGConfigNew();
190 const YGNodeRef root = YGNodeNewWithConfig(config);
191 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
192 YGNodeStyleSetOverflow(root, YGOverflowHidden);
193 YGNodeStyleSetWidth(root, 50);
194 YGNodeStyleSetHeight(root, 50);
196 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
197 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
198 YGNodeStyleSetPosition(root_child0, YGEdgeStart, 0);
199 YGNodeStyleSetPosition(root_child0, YGEdgeTop, 0);
200 YGNodeInsertChild(root, root_child0, 0);
202 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
203 YGNodeStyleSetWidth(root_child0_child0, 100);
204 YGNodeStyleSetHeight(root_child0_child0, 100);
205 YGNodeInsertChild(root_child0, root_child0_child0, 0);
206 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
208 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
209 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
210 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));
211 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));
213 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
214 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
215 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
216 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
218 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
219 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
220 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
221 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));
223 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
225 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
226 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
227 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));
228 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));
230 ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetLeft(root_child0));
231 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
232 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
233 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
235 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
236 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
237 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
238 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));
240 YGNodeFreeRecursive(root);
242 YGConfigFree(config);
245 TEST(YogaTest, absolute_layout_within_border) {
246 const YGConfigRef config = YGConfigNew();
248 const YGNodeRef root = YGNodeNewWithConfig(config);
249 YGNodeStyleSetMargin(root, YGEdgeLeft, 10);
250 YGNodeStyleSetMargin(root, YGEdgeTop, 10);
251 YGNodeStyleSetMargin(root, YGEdgeRight, 10);
252 YGNodeStyleSetMargin(root, YGEdgeBottom, 10);
253 YGNodeStyleSetPadding(root, YGEdgeLeft, 10);
254 YGNodeStyleSetPadding(root, YGEdgeTop, 10);
255 YGNodeStyleSetPadding(root, YGEdgeRight, 10);
256 YGNodeStyleSetPadding(root, YGEdgeBottom, 10);
257 YGNodeStyleSetBorder(root, YGEdgeLeft, 10);
258 YGNodeStyleSetBorder(root, YGEdgeTop, 10);
259 YGNodeStyleSetBorder(root, YGEdgeRight, 10);
260 YGNodeStyleSetBorder(root, YGEdgeBottom, 10);
261 YGNodeStyleSetWidth(root, 100);
262 YGNodeStyleSetHeight(root, 100);
264 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
265 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
266 YGNodeStyleSetPosition(root_child0, YGEdgeLeft, 0);
267 YGNodeStyleSetPosition(root_child0, YGEdgeTop, 0);
268 YGNodeStyleSetWidth(root_child0, 50);
269 YGNodeStyleSetHeight(root_child0, 50);
270 YGNodeInsertChild(root, root_child0, 0);
272 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
273 YGNodeStyleSetPositionType(root_child1, YGPositionTypeAbsolute);
274 YGNodeStyleSetPosition(root_child1, YGEdgeRight, 0);
275 YGNodeStyleSetPosition(root_child1, YGEdgeBottom, 0);
276 YGNodeStyleSetWidth(root_child1, 50);
277 YGNodeStyleSetHeight(root_child1, 50);
278 YGNodeInsertChild(root, root_child1, 1);
280 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
281 YGNodeStyleSetPositionType(root_child2, YGPositionTypeAbsolute);
282 YGNodeStyleSetPosition(root_child2, YGEdgeLeft, 0);
283 YGNodeStyleSetPosition(root_child2, YGEdgeTop, 0);
284 YGNodeStyleSetMargin(root_child2, YGEdgeLeft, 10);
285 YGNodeStyleSetMargin(root_child2, YGEdgeTop, 10);
286 YGNodeStyleSetMargin(root_child2, YGEdgeRight, 10);
287 YGNodeStyleSetMargin(root_child2, YGEdgeBottom, 10);
288 YGNodeStyleSetWidth(root_child2, 50);
289 YGNodeStyleSetHeight(root_child2, 50);
290 YGNodeInsertChild(root, root_child2, 2);
292 const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
293 YGNodeStyleSetPositionType(root_child3, YGPositionTypeAbsolute);
294 YGNodeStyleSetPosition(root_child3, YGEdgeRight, 0);
295 YGNodeStyleSetPosition(root_child3, YGEdgeBottom, 0);
296 YGNodeStyleSetMargin(root_child3, YGEdgeLeft, 10);
297 YGNodeStyleSetMargin(root_child3, YGEdgeTop, 10);
298 YGNodeStyleSetMargin(root_child3, YGEdgeRight, 10);
299 YGNodeStyleSetMargin(root_child3, YGEdgeBottom, 10);
300 YGNodeStyleSetWidth(root_child3, 50);
301 YGNodeStyleSetHeight(root_child3, 50);
302 YGNodeInsertChild(root, root_child3, 3);
303 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
305 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root));
306 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root));
307 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
308 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
310 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));
311 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));
312 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
313 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
315 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));
316 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
317 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
318 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
320 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));
321 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));
322 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));
323 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));
325 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child3));
326 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));
327 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
328 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));
330 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
332 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root));
333 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root));
334 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
335 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
337 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));
338 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));
339 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
340 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
342 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));
343 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
344 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
345 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
347 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));
348 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));
349 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));
350 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));
352 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child3));
353 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));
354 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
355 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));
357 YGNodeFreeRecursive(root);
359 YGConfigFree(config);
362 TEST(YogaTest, absolute_layout_align_items_and_justify_content_center) {
363 const YGConfigRef config = YGConfigNew();
365 const YGNodeRef root = YGNodeNewWithConfig(config);
366 YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
367 YGNodeStyleSetAlignItems(root, YGAlignCenter);
368 YGNodeStyleSetFlexGrow(root, 1);
369 YGNodeStyleSetWidth(root, 110);
370 YGNodeStyleSetHeight(root, 100);
372 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
373 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
374 YGNodeStyleSetWidth(root_child0, 60);
375 YGNodeStyleSetHeight(root_child0, 40);
376 YGNodeInsertChild(root, root_child0, 0);
377 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
379 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
380 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
381 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
382 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
384 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));
385 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));
386 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
387 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
389 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
391 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
392 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
393 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
394 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
396 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));
397 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));
398 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
399 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
401 YGNodeFreeRecursive(root);
403 YGConfigFree(config);
406 TEST(YogaTest, absolute_layout_align_items_and_justify_content_flex_end) {
407 const YGConfigRef config = YGConfigNew();
409 const YGNodeRef root = YGNodeNewWithConfig(config);
410 YGNodeStyleSetJustifyContent(root, YGJustifyFlexEnd);
411 YGNodeStyleSetAlignItems(root, YGAlignFlexEnd);
412 YGNodeStyleSetFlexGrow(root, 1);
413 YGNodeStyleSetWidth(root, 110);
414 YGNodeStyleSetHeight(root, 100);
416 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
417 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
418 YGNodeStyleSetWidth(root_child0, 60);
419 YGNodeStyleSetHeight(root_child0, 40);
420 YGNodeInsertChild(root, root_child0, 0);
421 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
423 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
424 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
425 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
426 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
428 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
429 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));
430 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
431 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
433 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
435 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
436 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
437 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
438 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
440 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
441 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));
442 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
443 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
445 YGNodeFreeRecursive(root);
447 YGConfigFree(config);
450 TEST(YogaTest, absolute_layout_justify_content_center) {
451 const YGConfigRef config = YGConfigNew();
453 const YGNodeRef root = YGNodeNewWithConfig(config);
454 YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
455 YGNodeStyleSetFlexGrow(root, 1);
456 YGNodeStyleSetWidth(root, 110);
457 YGNodeStyleSetHeight(root, 100);
459 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
460 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
461 YGNodeStyleSetWidth(root_child0, 60);
462 YGNodeStyleSetHeight(root_child0, 40);
463 YGNodeInsertChild(root, root_child0, 0);
464 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
466 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
467 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
468 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
469 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
471 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
472 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));
473 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
474 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
476 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
478 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
479 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
480 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
481 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
483 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
484 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));
485 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
486 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
488 YGNodeFreeRecursive(root);
490 YGConfigFree(config);
493 TEST(YogaTest, absolute_layout_align_items_center) {
494 const YGConfigRef config = YGConfigNew();
496 const YGNodeRef root = YGNodeNewWithConfig(config);
497 YGNodeStyleSetAlignItems(root, YGAlignCenter);
498 YGNodeStyleSetFlexGrow(root, 1);
499 YGNodeStyleSetWidth(root, 110);
500 YGNodeStyleSetHeight(root, 100);
502 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
503 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
504 YGNodeStyleSetWidth(root_child0, 60);
505 YGNodeStyleSetHeight(root_child0, 40);
506 YGNodeInsertChild(root, root_child0, 0);
507 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
509 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
510 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
511 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
512 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
514 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));
515 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
516 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
517 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
519 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
521 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
522 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
523 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
524 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
526 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));
527 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
528 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
529 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
531 YGNodeFreeRecursive(root);
533 YGConfigFree(config);
536 TEST(YogaTest, absolute_layout_align_items_center_on_child_only) {
537 const YGConfigRef config = YGConfigNew();
539 const YGNodeRef root = YGNodeNewWithConfig(config);
540 YGNodeStyleSetFlexGrow(root, 1);
541 YGNodeStyleSetWidth(root, 110);
542 YGNodeStyleSetHeight(root, 100);
544 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
545 YGNodeStyleSetAlignSelf(root_child0, YGAlignCenter);
546 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
547 YGNodeStyleSetWidth(root_child0, 60);
548 YGNodeStyleSetHeight(root_child0, 40);
549 YGNodeInsertChild(root, root_child0, 0);
550 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
552 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
553 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
554 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
555 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
557 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));
558 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
559 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
560 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
562 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
564 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
565 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
566 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
567 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
569 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));
570 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
571 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
572 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
574 YGNodeFreeRecursive(root);
576 YGConfigFree(config);
579 TEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_top_position) {
580 const YGConfigRef config = YGConfigNew();
582 const YGNodeRef root = YGNodeNewWithConfig(config);
583 YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
584 YGNodeStyleSetAlignItems(root, YGAlignCenter);
585 YGNodeStyleSetFlexGrow(root, 1);
586 YGNodeStyleSetWidth(root, 110);
587 YGNodeStyleSetHeight(root, 100);
589 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
590 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
591 YGNodeStyleSetPosition(root_child0, YGEdgeTop, 10);
592 YGNodeStyleSetWidth(root_child0, 60);
593 YGNodeStyleSetHeight(root_child0, 40);
594 YGNodeInsertChild(root, root_child0, 0);
595 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
597 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
598 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
599 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
600 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
602 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));
603 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));
604 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
605 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
607 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
609 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
610 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
611 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
612 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
614 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));
615 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));
616 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
617 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
619 YGNodeFreeRecursive(root);
621 YGConfigFree(config);
624 TEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_bottom_position) {
625 const YGConfigRef config = YGConfigNew();
627 const YGNodeRef root = YGNodeNewWithConfig(config);
628 YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
629 YGNodeStyleSetAlignItems(root, YGAlignCenter);
630 YGNodeStyleSetFlexGrow(root, 1);
631 YGNodeStyleSetWidth(root, 110);
632 YGNodeStyleSetHeight(root, 100);
634 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
635 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
636 YGNodeStyleSetPosition(root_child0, YGEdgeBottom, 10);
637 YGNodeStyleSetWidth(root_child0, 60);
638 YGNodeStyleSetHeight(root_child0, 40);
639 YGNodeInsertChild(root, root_child0, 0);
640 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
642 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
643 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
644 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
645 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
647 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));
648 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0));
649 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
650 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
652 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
654 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
655 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
656 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
657 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
659 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));
660 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0));
661 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
662 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
664 YGNodeFreeRecursive(root);
666 YGConfigFree(config);
669 TEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_left_position) {
670 const YGConfigRef config = YGConfigNew();
672 const YGNodeRef root = YGNodeNewWithConfig(config);
673 YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
674 YGNodeStyleSetAlignItems(root, YGAlignCenter);
675 YGNodeStyleSetFlexGrow(root, 1);
676 YGNodeStyleSetWidth(root, 110);
677 YGNodeStyleSetHeight(root, 100);
679 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
680 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
681 YGNodeStyleSetPosition(root_child0, YGEdgeLeft, 5);
682 YGNodeStyleSetWidth(root_child0, 60);
683 YGNodeStyleSetHeight(root_child0, 40);
684 YGNodeInsertChild(root, root_child0, 0);
685 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
687 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
688 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
689 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
690 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
692 ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0));
693 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));
694 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
695 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
697 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
699 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
700 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
701 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
702 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
704 ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0));
705 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));
706 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
707 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
709 YGNodeFreeRecursive(root);
711 YGConfigFree(config);
714 TEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_right_position) {
715 const YGConfigRef config = YGConfigNew();
717 const YGNodeRef root = YGNodeNewWithConfig(config);
718 YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
719 YGNodeStyleSetAlignItems(root, YGAlignCenter);
720 YGNodeStyleSetFlexGrow(root, 1);
721 YGNodeStyleSetWidth(root, 110);
722 YGNodeStyleSetHeight(root, 100);
724 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
725 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
726 YGNodeStyleSetPosition(root_child0, YGEdgeRight, 5);
727 YGNodeStyleSetWidth(root_child0, 60);
728 YGNodeStyleSetHeight(root_child0, 40);
729 YGNodeInsertChild(root, root_child0, 0);
730 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
732 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
733 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
734 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
735 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
737 ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));
738 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));
739 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
740 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
742 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
744 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
745 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
746 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));
747 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
749 ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));
750 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));
751 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
752 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));
754 YGNodeFreeRecursive(root);
756 YGConfigFree(config);
759 TEST(YogaTest, position_root_with_rtl_should_position_withoutdirection) {
760 const YGConfigRef config = YGConfigNew();
762 const YGNodeRef root = YGNodeNewWithConfig(config);
763 YGNodeStyleSetPosition(root, YGEdgeLeft, 72);
764 YGNodeStyleSetWidth(root, 52);
765 YGNodeStyleSetHeight(root, 52);
766 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
768 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetLeft(root));
769 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
770 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
771 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
773 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
775 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetLeft(root));
776 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
777 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
778 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
780 YGNodeFreeRecursive(root);
782 YGConfigFree(config);
785 TEST(YogaTest, absolute_layout_percentage_bottom_based_on_parent_height) {
786 const YGConfigRef config = YGConfigNew();
788 const YGNodeRef root = YGNodeNewWithConfig(config);
789 YGNodeStyleSetWidth(root, 100);
790 YGNodeStyleSetHeight(root, 200);
792 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
793 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
794 YGNodeStyleSetPositionPercent(root_child0, YGEdgeTop, 50);
795 YGNodeStyleSetWidth(root_child0, 10);
796 YGNodeStyleSetHeight(root_child0, 10);
797 YGNodeInsertChild(root, root_child0, 0);
799 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
800 YGNodeStyleSetPositionType(root_child1, YGPositionTypeAbsolute);
801 YGNodeStyleSetPositionPercent(root_child1, YGEdgeBottom, 50);
802 YGNodeStyleSetWidth(root_child1, 10);
803 YGNodeStyleSetHeight(root_child1, 10);
804 YGNodeInsertChild(root, root_child1, 1);
806 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
807 YGNodeStyleSetPositionType(root_child2, YGPositionTypeAbsolute);
808 YGNodeStyleSetPositionPercent(root_child2, YGEdgeTop, 10);
809 YGNodeStyleSetPositionPercent(root_child2, YGEdgeBottom, 10);
810 YGNodeStyleSetWidth(root_child2, 10);
811 YGNodeInsertChild(root, root_child2, 2);
812 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
814 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
815 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
816 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
817 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));
819 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
820 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));
821 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
822 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
824 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
825 ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child1));
826 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));
827 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
829 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
830 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));
831 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));
832 ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child2));
834 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
836 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
837 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
838 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
839 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));
841 ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));
842 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));
843 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
844 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
846 ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child1));
847 ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child1));
848 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));
849 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
851 ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child2));
852 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));
853 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));
854 ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child2));
856 YGNodeFreeRecursive(root);
858 YGConfigFree(config);
861 TEST(YogaTest, absolute_layout_in_wrap_reverse_column_container) {
862 const YGConfigRef config = YGConfigNew();
864 const YGNodeRef root = YGNodeNewWithConfig(config);
865 YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);
866 YGNodeStyleSetWidth(root, 100);
867 YGNodeStyleSetHeight(root, 100);
869 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
870 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
871 YGNodeStyleSetWidth(root_child0, 20);
872 YGNodeStyleSetHeight(root_child0, 20);
873 YGNodeInsertChild(root, root_child0, 0);
874 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
876 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
877 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
878 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
879 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
881 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));
882 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
883 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
884 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
886 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
888 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
889 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
890 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
891 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
893 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
894 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
895 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
896 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
898 YGNodeFreeRecursive(root);
900 YGConfigFree(config);
903 TEST(YogaTest, absolute_layout_in_wrap_reverse_row_container) {
904 const YGConfigRef config = YGConfigNew();
906 const YGNodeRef root = YGNodeNewWithConfig(config);
907 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
908 YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);
909 YGNodeStyleSetWidth(root, 100);
910 YGNodeStyleSetHeight(root, 100);
912 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
913 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
914 YGNodeStyleSetWidth(root_child0, 20);
915 YGNodeStyleSetHeight(root_child0, 20);
916 YGNodeInsertChild(root, root_child0, 0);
917 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
919 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
920 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
921 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
922 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
924 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
925 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0));
926 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
927 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
929 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
931 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
932 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
933 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
934 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
936 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));
937 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0));
938 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
939 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
941 YGNodeFreeRecursive(root);
943 YGConfigFree(config);
946 TEST(YogaTest, absolute_layout_in_wrap_reverse_column_container_flex_end) {
947 const YGConfigRef config = YGConfigNew();
949 const YGNodeRef root = YGNodeNewWithConfig(config);
950 YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);
951 YGNodeStyleSetWidth(root, 100);
952 YGNodeStyleSetHeight(root, 100);
954 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
955 YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexEnd);
956 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
957 YGNodeStyleSetWidth(root_child0, 20);
958 YGNodeStyleSetHeight(root_child0, 20);
959 YGNodeInsertChild(root, root_child0, 0);
960 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
962 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
963 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
964 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
965 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
967 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
968 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
969 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
970 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
972 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
974 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
975 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
976 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
977 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
979 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));
980 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
981 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
982 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
984 YGNodeFreeRecursive(root);
986 YGConfigFree(config);
989 TEST(YogaTest, absolute_layout_in_wrap_reverse_row_container_flex_end) {
990 const YGConfigRef config = YGConfigNew();
992 const YGNodeRef root = YGNodeNewWithConfig(config);
993 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
994 YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);
995 YGNodeStyleSetWidth(root, 100);
996 YGNodeStyleSetHeight(root, 100);
998 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
999 YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexEnd);
1000 YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
1001 YGNodeStyleSetWidth(root_child0, 20);
1002 YGNodeStyleSetHeight(root_child0, 20);
1003 YGNodeInsertChild(root, root_child0, 0);
1004 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1006 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1007 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1008 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1009 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1011 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1012 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1013 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
1014 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
1016 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1018 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1019 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1020 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1021 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1023 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));
1024 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1025 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
1026 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
1028 YGNodeFreeRecursive(root);
1030 YGConfigFree(config);