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/YGAlignItemsTest.html
10 #include <gtest/gtest.h>
11 #include <yoga/Yoga.h>
13 TEST(YogaTest, align_items_stretch) {
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 YGNodeStyleSetHeight(root_child0, 10);
22 YGNodeInsertChild(root, root_child0, 0);
23 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
25 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
26 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
27 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
28 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
30 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
31 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
32 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
33 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
35 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
37 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
38 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
39 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
40 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
42 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
43 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
44 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
45 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
47 YGNodeFreeRecursive(root);
52 TEST(YogaTest, align_items_center) {
53 const YGConfigRef config = YGConfigNew();
55 const YGNodeRef root = YGNodeNewWithConfig(config);
56 YGNodeStyleSetAlignItems(root, YGAlignCenter);
57 YGNodeStyleSetWidth(root, 100);
58 YGNodeStyleSetHeight(root, 100);
60 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
61 YGNodeStyleSetWidth(root_child0, 10);
62 YGNodeStyleSetHeight(root_child0, 10);
63 YGNodeInsertChild(root, root_child0, 0);
64 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
66 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
67 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
68 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
69 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
71 ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));
72 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
73 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
74 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
76 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
78 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
79 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
80 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
81 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
83 ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));
84 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
85 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
86 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
88 YGNodeFreeRecursive(root);
93 TEST(YogaTest, align_items_flex_start) {
94 const YGConfigRef config = YGConfigNew();
96 const YGNodeRef root = YGNodeNewWithConfig(config);
97 YGNodeStyleSetAlignItems(root, YGAlignFlexStart);
98 YGNodeStyleSetWidth(root, 100);
99 YGNodeStyleSetHeight(root, 100);
101 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
102 YGNodeStyleSetWidth(root_child0, 10);
103 YGNodeStyleSetHeight(root_child0, 10);
104 YGNodeInsertChild(root, root_child0, 0);
105 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
107 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
108 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
109 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
110 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
112 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
113 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
114 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
115 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
117 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
119 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
120 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
121 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
122 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
124 ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));
125 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
126 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
127 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
129 YGNodeFreeRecursive(root);
131 YGConfigFree(config);
134 TEST(YogaTest, align_items_flex_end) {
135 const YGConfigRef config = YGConfigNew();
137 const YGNodeRef root = YGNodeNewWithConfig(config);
138 YGNodeStyleSetAlignItems(root, YGAlignFlexEnd);
139 YGNodeStyleSetWidth(root, 100);
140 YGNodeStyleSetHeight(root, 100);
142 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
143 YGNodeStyleSetWidth(root_child0, 10);
144 YGNodeStyleSetHeight(root_child0, 10);
145 YGNodeInsertChild(root, root_child0, 0);
146 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
148 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
149 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
150 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
151 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
153 ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));
154 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
155 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
156 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
158 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
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(0, YGNodeLayoutGetLeft(root_child0));
166 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
167 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
168 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
170 YGNodeFreeRecursive(root);
172 YGConfigFree(config);
175 TEST(YogaTest, align_baseline) {
176 const YGConfigRef config = YGConfigNew();
178 const YGNodeRef root = YGNodeNewWithConfig(config);
179 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
180 YGNodeStyleSetAlignItems(root, YGAlignBaseline);
181 YGNodeStyleSetWidth(root, 100);
182 YGNodeStyleSetHeight(root, 100);
184 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
185 YGNodeStyleSetWidth(root_child0, 50);
186 YGNodeStyleSetHeight(root_child0, 50);
187 YGNodeInsertChild(root, root_child0, 0);
189 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
190 YGNodeStyleSetWidth(root_child1, 50);
191 YGNodeStyleSetHeight(root_child1, 20);
192 YGNodeInsertChild(root, root_child1, 1);
193 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
195 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
196 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
197 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
198 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
200 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
201 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
202 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
203 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
205 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
206 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));
207 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
208 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
210 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
212 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
213 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
214 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
215 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
217 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
218 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
219 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
220 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
222 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
223 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));
224 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
225 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
227 YGNodeFreeRecursive(root);
229 YGConfigFree(config);
232 TEST(YogaTest, align_baseline_child) {
233 const YGConfigRef config = YGConfigNew();
235 const YGNodeRef root = YGNodeNewWithConfig(config);
236 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
237 YGNodeStyleSetAlignItems(root, YGAlignBaseline);
238 YGNodeStyleSetWidth(root, 100);
239 YGNodeStyleSetHeight(root, 100);
241 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
242 YGNodeStyleSetWidth(root_child0, 50);
243 YGNodeStyleSetHeight(root_child0, 50);
244 YGNodeInsertChild(root, root_child0, 0);
246 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
247 YGNodeStyleSetWidth(root_child1, 50);
248 YGNodeStyleSetHeight(root_child1, 20);
249 YGNodeInsertChild(root, root_child1, 1);
251 const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
252 YGNodeStyleSetWidth(root_child1_child0, 50);
253 YGNodeStyleSetHeight(root_child1_child0, 10);
254 YGNodeInsertChild(root_child1, root_child1_child0, 0);
255 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
257 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
258 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
259 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
260 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
262 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
263 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
264 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
265 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
267 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
268 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
269 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
270 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
272 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
273 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
274 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
275 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
277 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
279 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
280 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
281 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
282 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
284 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
285 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
286 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
287 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
289 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
290 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
291 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
292 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
294 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
295 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
296 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
297 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
299 YGNodeFreeRecursive(root);
301 YGConfigFree(config);
304 TEST(YogaTest, align_baseline_child_multiline) {
305 const YGConfigRef config = YGConfigNew();
307 const YGNodeRef root = YGNodeNewWithConfig(config);
308 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
309 YGNodeStyleSetAlignItems(root, YGAlignBaseline);
310 YGNodeStyleSetWidth(root, 100);
311 YGNodeStyleSetHeight(root, 100);
313 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
314 YGNodeStyleSetWidth(root_child0, 50);
315 YGNodeStyleSetHeight(root_child0, 60);
316 YGNodeInsertChild(root, root_child0, 0);
318 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
319 YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow);
320 YGNodeStyleSetFlexWrap(root_child1, YGWrapWrap);
321 YGNodeStyleSetWidth(root_child1, 50);
322 YGNodeStyleSetHeight(root_child1, 25);
323 YGNodeInsertChild(root, root_child1, 1);
325 const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
326 YGNodeStyleSetWidth(root_child1_child0, 25);
327 YGNodeStyleSetHeight(root_child1_child0, 20);
328 YGNodeInsertChild(root_child1, root_child1_child0, 0);
330 const YGNodeRef root_child1_child1 = YGNodeNewWithConfig(config);
331 YGNodeStyleSetWidth(root_child1_child1, 25);
332 YGNodeStyleSetHeight(root_child1_child1, 10);
333 YGNodeInsertChild(root_child1, root_child1_child1, 1);
335 const YGNodeRef root_child1_child2 = YGNodeNewWithConfig(config);
336 YGNodeStyleSetWidth(root_child1_child2, 25);
337 YGNodeStyleSetHeight(root_child1_child2, 20);
338 YGNodeInsertChild(root_child1, root_child1_child2, 2);
340 const YGNodeRef root_child1_child3 = YGNodeNewWithConfig(config);
341 YGNodeStyleSetWidth(root_child1_child3, 25);
342 YGNodeStyleSetHeight(root_child1_child3, 10);
343 YGNodeInsertChild(root_child1, root_child1_child3, 3);
344 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
346 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
347 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
348 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
349 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
351 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
352 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
353 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
354 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
356 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
357 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
358 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
359 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
361 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
362 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
363 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));
364 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
366 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child1));
367 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));
368 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));
369 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));
371 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child2));
372 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));
373 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));
374 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));
376 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child3));
377 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));
378 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));
379 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));
381 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
383 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
384 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
385 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
386 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
388 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
389 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
390 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
391 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
393 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
394 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
395 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
396 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
398 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child0));
399 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
400 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));
401 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
403 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));
404 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));
405 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));
406 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));
408 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child2));
409 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));
410 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));
411 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));
413 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child3));
414 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));
415 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));
416 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));
418 YGNodeFreeRecursive(root);
420 YGConfigFree(config);
423 TEST(YogaTest, align_baseline_child_multiline_override) {
424 const YGConfigRef config = YGConfigNew();
426 const YGNodeRef root = YGNodeNewWithConfig(config);
427 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
428 YGNodeStyleSetAlignItems(root, YGAlignBaseline);
429 YGNodeStyleSetWidth(root, 100);
430 YGNodeStyleSetHeight(root, 100);
432 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
433 YGNodeStyleSetWidth(root_child0, 50);
434 YGNodeStyleSetHeight(root_child0, 60);
435 YGNodeInsertChild(root, root_child0, 0);
437 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
438 YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow);
439 YGNodeStyleSetFlexWrap(root_child1, YGWrapWrap);
440 YGNodeStyleSetWidth(root_child1, 50);
441 YGNodeStyleSetHeight(root_child1, 25);
442 YGNodeInsertChild(root, root_child1, 1);
444 const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
445 YGNodeStyleSetWidth(root_child1_child0, 25);
446 YGNodeStyleSetHeight(root_child1_child0, 20);
447 YGNodeInsertChild(root_child1, root_child1_child0, 0);
449 const YGNodeRef root_child1_child1 = YGNodeNewWithConfig(config);
450 YGNodeStyleSetAlignSelf(root_child1_child1, YGAlignBaseline);
451 YGNodeStyleSetWidth(root_child1_child1, 25);
452 YGNodeStyleSetHeight(root_child1_child1, 10);
453 YGNodeInsertChild(root_child1, root_child1_child1, 1);
455 const YGNodeRef root_child1_child2 = YGNodeNewWithConfig(config);
456 YGNodeStyleSetWidth(root_child1_child2, 25);
457 YGNodeStyleSetHeight(root_child1_child2, 20);
458 YGNodeInsertChild(root_child1, root_child1_child2, 2);
460 const YGNodeRef root_child1_child3 = YGNodeNewWithConfig(config);
461 YGNodeStyleSetAlignSelf(root_child1_child3, YGAlignBaseline);
462 YGNodeStyleSetWidth(root_child1_child3, 25);
463 YGNodeStyleSetHeight(root_child1_child3, 10);
464 YGNodeInsertChild(root_child1, root_child1_child3, 3);
465 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
467 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
468 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
469 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
470 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
472 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
473 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
474 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
475 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
477 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
478 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
479 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
480 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
482 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
483 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
484 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));
485 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
487 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child1));
488 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));
489 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));
490 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));
492 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child2));
493 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));
494 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));
495 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));
497 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child3));
498 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));
499 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));
500 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));
502 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
504 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
505 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
506 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
507 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
509 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
510 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
511 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
512 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
514 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
515 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
516 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
517 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
519 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child0));
520 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
521 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));
522 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
524 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));
525 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));
526 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));
527 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));
529 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child2));
530 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));
531 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));
532 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));
534 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child3));
535 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));
536 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));
537 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));
539 YGNodeFreeRecursive(root);
541 YGConfigFree(config);
544 TEST(YogaTest, align_baseline_child_multiline_no_override_on_secondline) {
545 const YGConfigRef config = YGConfigNew();
547 const YGNodeRef root = YGNodeNewWithConfig(config);
548 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
549 YGNodeStyleSetAlignItems(root, YGAlignBaseline);
550 YGNodeStyleSetWidth(root, 100);
551 YGNodeStyleSetHeight(root, 100);
553 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
554 YGNodeStyleSetWidth(root_child0, 50);
555 YGNodeStyleSetHeight(root_child0, 60);
556 YGNodeInsertChild(root, root_child0, 0);
558 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
559 YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow);
560 YGNodeStyleSetFlexWrap(root_child1, YGWrapWrap);
561 YGNodeStyleSetWidth(root_child1, 50);
562 YGNodeStyleSetHeight(root_child1, 25);
563 YGNodeInsertChild(root, root_child1, 1);
565 const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
566 YGNodeStyleSetWidth(root_child1_child0, 25);
567 YGNodeStyleSetHeight(root_child1_child0, 20);
568 YGNodeInsertChild(root_child1, root_child1_child0, 0);
570 const YGNodeRef root_child1_child1 = YGNodeNewWithConfig(config);
571 YGNodeStyleSetWidth(root_child1_child1, 25);
572 YGNodeStyleSetHeight(root_child1_child1, 10);
573 YGNodeInsertChild(root_child1, root_child1_child1, 1);
575 const YGNodeRef root_child1_child2 = YGNodeNewWithConfig(config);
576 YGNodeStyleSetWidth(root_child1_child2, 25);
577 YGNodeStyleSetHeight(root_child1_child2, 20);
578 YGNodeInsertChild(root_child1, root_child1_child2, 2);
580 const YGNodeRef root_child1_child3 = YGNodeNewWithConfig(config);
581 YGNodeStyleSetAlignSelf(root_child1_child3, YGAlignBaseline);
582 YGNodeStyleSetWidth(root_child1_child3, 25);
583 YGNodeStyleSetHeight(root_child1_child3, 10);
584 YGNodeInsertChild(root_child1, root_child1_child3, 3);
585 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
587 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
588 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
589 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
590 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
592 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
593 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
594 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
595 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
597 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
598 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
599 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
600 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
602 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
603 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
604 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));
605 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
607 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child1));
608 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));
609 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));
610 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));
612 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child2));
613 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));
614 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));
615 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));
617 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child3));
618 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));
619 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));
620 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));
622 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
624 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
625 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
626 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
627 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
629 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
630 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
631 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
632 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
634 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
635 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
636 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
637 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
639 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child0));
640 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
641 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));
642 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
644 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));
645 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));
646 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));
647 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));
649 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child2));
650 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));
651 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));
652 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));
654 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child3));
655 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));
656 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));
657 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));
659 YGNodeFreeRecursive(root);
661 YGConfigFree(config);
664 TEST(YogaTest, align_baseline_child_top) {
665 const YGConfigRef config = YGConfigNew();
667 const YGNodeRef root = YGNodeNewWithConfig(config);
668 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
669 YGNodeStyleSetAlignItems(root, YGAlignBaseline);
670 YGNodeStyleSetWidth(root, 100);
671 YGNodeStyleSetHeight(root, 100);
673 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
674 YGNodeStyleSetPosition(root_child0, YGEdgeTop, 10);
675 YGNodeStyleSetWidth(root_child0, 50);
676 YGNodeStyleSetHeight(root_child0, 50);
677 YGNodeInsertChild(root, root_child0, 0);
679 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
680 YGNodeStyleSetWidth(root_child1, 50);
681 YGNodeStyleSetHeight(root_child1, 20);
682 YGNodeInsertChild(root, root_child1, 1);
684 const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
685 YGNodeStyleSetWidth(root_child1_child0, 50);
686 YGNodeStyleSetHeight(root_child1_child0, 10);
687 YGNodeInsertChild(root_child1, root_child1_child0, 0);
688 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
690 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
691 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
692 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
693 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
695 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
696 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));
697 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
698 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
700 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
701 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
702 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
703 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
705 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
706 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
707 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
708 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
710 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
712 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
713 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
714 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
715 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
717 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
718 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));
719 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
720 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
722 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
723 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
724 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
725 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
727 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
728 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
729 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
730 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
732 YGNodeFreeRecursive(root);
734 YGConfigFree(config);
737 TEST(YogaTest, align_baseline_child_top2) {
738 const YGConfigRef config = YGConfigNew();
740 const YGNodeRef root = YGNodeNewWithConfig(config);
741 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
742 YGNodeStyleSetAlignItems(root, YGAlignBaseline);
743 YGNodeStyleSetWidth(root, 100);
744 YGNodeStyleSetHeight(root, 100);
746 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
747 YGNodeStyleSetWidth(root_child0, 50);
748 YGNodeStyleSetHeight(root_child0, 50);
749 YGNodeInsertChild(root, root_child0, 0);
751 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
752 YGNodeStyleSetPosition(root_child1, YGEdgeTop, 5);
753 YGNodeStyleSetWidth(root_child1, 50);
754 YGNodeStyleSetHeight(root_child1, 20);
755 YGNodeInsertChild(root, root_child1, 1);
757 const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
758 YGNodeStyleSetWidth(root_child1_child0, 50);
759 YGNodeStyleSetHeight(root_child1_child0, 10);
760 YGNodeInsertChild(root_child1, root_child1_child0, 0);
761 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
763 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
764 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
765 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
766 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
768 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
769 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
770 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
771 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
773 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
774 ASSERT_FLOAT_EQ(45, YGNodeLayoutGetTop(root_child1));
775 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
776 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
778 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
779 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
780 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
781 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
783 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
785 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
786 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
787 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
788 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
790 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
791 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
792 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
793 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
795 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
796 ASSERT_FLOAT_EQ(45, YGNodeLayoutGetTop(root_child1));
797 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
798 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
800 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
801 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
802 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
803 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
805 YGNodeFreeRecursive(root);
807 YGConfigFree(config);
810 TEST(YogaTest, align_baseline_double_nested_child) {
811 const YGConfigRef config = YGConfigNew();
813 const YGNodeRef root = YGNodeNewWithConfig(config);
814 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
815 YGNodeStyleSetAlignItems(root, YGAlignBaseline);
816 YGNodeStyleSetWidth(root, 100);
817 YGNodeStyleSetHeight(root, 100);
819 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
820 YGNodeStyleSetWidth(root_child0, 50);
821 YGNodeStyleSetHeight(root_child0, 50);
822 YGNodeInsertChild(root, root_child0, 0);
824 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
825 YGNodeStyleSetWidth(root_child0_child0, 50);
826 YGNodeStyleSetHeight(root_child0_child0, 20);
827 YGNodeInsertChild(root_child0, root_child0_child0, 0);
829 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
830 YGNodeStyleSetWidth(root_child1, 50);
831 YGNodeStyleSetHeight(root_child1, 20);
832 YGNodeInsertChild(root, root_child1, 1);
834 const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
835 YGNodeStyleSetWidth(root_child1_child0, 50);
836 YGNodeStyleSetHeight(root_child1_child0, 15);
837 YGNodeInsertChild(root_child1, root_child1_child0, 0);
838 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
840 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
841 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
842 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
843 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
845 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
846 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
847 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
848 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
850 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
851 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
852 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));
853 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
855 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
856 ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child1));
857 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
858 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
860 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
861 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
862 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
863 ASSERT_FLOAT_EQ(15, YGNodeLayoutGetHeight(root_child1_child0));
865 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
867 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
868 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
869 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
870 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
872 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
873 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
874 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
875 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
877 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
878 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
879 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));
880 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
882 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
883 ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child1));
884 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
885 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
887 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
888 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
889 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
890 ASSERT_FLOAT_EQ(15, YGNodeLayoutGetHeight(root_child1_child0));
892 YGNodeFreeRecursive(root);
894 YGConfigFree(config);
897 TEST(YogaTest, align_baseline_column) {
898 const YGConfigRef config = YGConfigNew();
900 const YGNodeRef root = YGNodeNewWithConfig(config);
901 YGNodeStyleSetAlignItems(root, YGAlignBaseline);
902 YGNodeStyleSetWidth(root, 100);
903 YGNodeStyleSetHeight(root, 100);
905 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
906 YGNodeStyleSetWidth(root_child0, 50);
907 YGNodeStyleSetHeight(root_child0, 50);
908 YGNodeInsertChild(root, root_child0, 0);
910 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
911 YGNodeStyleSetWidth(root_child1, 50);
912 YGNodeStyleSetHeight(root_child1, 20);
913 YGNodeInsertChild(root, root_child1, 1);
914 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
916 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
917 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
918 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
919 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
921 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
922 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
923 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
924 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
926 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
927 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
928 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
929 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
931 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
933 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
934 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
935 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
936 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
938 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
939 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
940 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
941 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
943 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
944 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
945 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
946 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
948 YGNodeFreeRecursive(root);
950 YGConfigFree(config);
953 TEST(YogaTest, align_baseline_child_margin) {
954 const YGConfigRef config = YGConfigNew();
956 const YGNodeRef root = YGNodeNewWithConfig(config);
957 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
958 YGNodeStyleSetAlignItems(root, YGAlignBaseline);
959 YGNodeStyleSetWidth(root, 100);
960 YGNodeStyleSetHeight(root, 100);
962 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
963 YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 5);
964 YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);
965 YGNodeStyleSetMargin(root_child0, YGEdgeRight, 5);
966 YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 5);
967 YGNodeStyleSetWidth(root_child0, 50);
968 YGNodeStyleSetHeight(root_child0, 50);
969 YGNodeInsertChild(root, root_child0, 0);
971 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
972 YGNodeStyleSetWidth(root_child1, 50);
973 YGNodeStyleSetHeight(root_child1, 20);
974 YGNodeInsertChild(root, root_child1, 1);
976 const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
977 YGNodeStyleSetMargin(root_child1_child0, YGEdgeLeft, 1);
978 YGNodeStyleSetMargin(root_child1_child0, YGEdgeTop, 1);
979 YGNodeStyleSetMargin(root_child1_child0, YGEdgeRight, 1);
980 YGNodeStyleSetMargin(root_child1_child0, YGEdgeBottom, 1);
981 YGNodeStyleSetWidth(root_child1_child0, 50);
982 YGNodeStyleSetHeight(root_child1_child0, 10);
983 YGNodeInsertChild(root_child1, root_child1_child0, 0);
984 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
986 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
987 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
988 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
989 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
991 ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0));
992 ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));
993 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
994 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
996 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child1));
997 ASSERT_FLOAT_EQ(44, YGNodeLayoutGetTop(root_child1));
998 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
999 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
1001 ASSERT_FLOAT_EQ(1, YGNodeLayoutGetLeft(root_child1_child0));
1002 ASSERT_FLOAT_EQ(1, YGNodeLayoutGetTop(root_child1_child0));
1003 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
1004 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
1006 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1008 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1009 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1010 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1011 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1013 ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));
1014 ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));
1015 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1016 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1018 ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child1));
1019 ASSERT_FLOAT_EQ(44, YGNodeLayoutGetTop(root_child1));
1020 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
1021 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
1023 ASSERT_FLOAT_EQ(-1, YGNodeLayoutGetLeft(root_child1_child0));
1024 ASSERT_FLOAT_EQ(1, YGNodeLayoutGetTop(root_child1_child0));
1025 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
1026 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
1028 YGNodeFreeRecursive(root);
1030 YGConfigFree(config);
1033 TEST(YogaTest, align_baseline_child_padding) {
1034 const YGConfigRef config = YGConfigNew();
1036 const YGNodeRef root = YGNodeNewWithConfig(config);
1037 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
1038 YGNodeStyleSetAlignItems(root, YGAlignBaseline);
1039 YGNodeStyleSetPadding(root, YGEdgeLeft, 5);
1040 YGNodeStyleSetPadding(root, YGEdgeTop, 5);
1041 YGNodeStyleSetPadding(root, YGEdgeRight, 5);
1042 YGNodeStyleSetPadding(root, YGEdgeBottom, 5);
1043 YGNodeStyleSetWidth(root, 100);
1044 YGNodeStyleSetHeight(root, 100);
1046 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1047 YGNodeStyleSetWidth(root_child0, 50);
1048 YGNodeStyleSetHeight(root_child0, 50);
1049 YGNodeInsertChild(root, root_child0, 0);
1051 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
1052 YGNodeStyleSetPadding(root_child1, YGEdgeLeft, 5);
1053 YGNodeStyleSetPadding(root_child1, YGEdgeTop, 5);
1054 YGNodeStyleSetPadding(root_child1, YGEdgeRight, 5);
1055 YGNodeStyleSetPadding(root_child1, YGEdgeBottom, 5);
1056 YGNodeStyleSetWidth(root_child1, 50);
1057 YGNodeStyleSetHeight(root_child1, 20);
1058 YGNodeInsertChild(root, root_child1, 1);
1060 const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
1061 YGNodeStyleSetWidth(root_child1_child0, 50);
1062 YGNodeStyleSetHeight(root_child1_child0, 10);
1063 YGNodeInsertChild(root_child1, root_child1_child0, 0);
1064 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1066 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1067 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1068 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1069 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1071 ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0));
1072 ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));
1073 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1074 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1076 ASSERT_FLOAT_EQ(55, YGNodeLayoutGetLeft(root_child1));
1077 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
1078 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
1079 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
1081 ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child1_child0));
1082 ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child1_child0));
1083 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
1084 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
1086 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1088 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1089 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1090 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1091 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1093 ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));
1094 ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));
1095 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1096 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1098 ASSERT_FLOAT_EQ(-5, YGNodeLayoutGetLeft(root_child1));
1099 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
1100 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
1101 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
1103 ASSERT_FLOAT_EQ(-5, YGNodeLayoutGetLeft(root_child1_child0));
1104 ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child1_child0));
1105 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
1106 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
1108 YGNodeFreeRecursive(root);
1110 YGConfigFree(config);
1113 TEST(YogaTest, align_baseline_multiline) {
1114 const YGConfigRef config = YGConfigNew();
1116 const YGNodeRef root = YGNodeNewWithConfig(config);
1117 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
1118 YGNodeStyleSetAlignItems(root, YGAlignBaseline);
1119 YGNodeStyleSetFlexWrap(root, YGWrapWrap);
1120 YGNodeStyleSetWidth(root, 100);
1121 YGNodeStyleSetHeight(root, 100);
1123 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1124 YGNodeStyleSetWidth(root_child0, 50);
1125 YGNodeStyleSetHeight(root_child0, 50);
1126 YGNodeInsertChild(root, root_child0, 0);
1128 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
1129 YGNodeStyleSetWidth(root_child1, 50);
1130 YGNodeStyleSetHeight(root_child1, 20);
1131 YGNodeInsertChild(root, root_child1, 1);
1133 const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
1134 YGNodeStyleSetWidth(root_child1_child0, 50);
1135 YGNodeStyleSetHeight(root_child1_child0, 10);
1136 YGNodeInsertChild(root_child1, root_child1_child0, 0);
1138 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
1139 YGNodeStyleSetWidth(root_child2, 50);
1140 YGNodeStyleSetHeight(root_child2, 20);
1141 YGNodeInsertChild(root, root_child2, 2);
1143 const YGNodeRef root_child2_child0 = YGNodeNewWithConfig(config);
1144 YGNodeStyleSetWidth(root_child2_child0, 50);
1145 YGNodeStyleSetHeight(root_child2_child0, 10);
1146 YGNodeInsertChild(root_child2, root_child2_child0, 0);
1148 const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
1149 YGNodeStyleSetWidth(root_child3, 50);
1150 YGNodeStyleSetHeight(root_child3, 50);
1151 YGNodeInsertChild(root, root_child3, 3);
1152 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1154 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1155 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1156 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1157 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1159 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1160 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1161 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1162 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1164 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
1165 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
1166 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
1167 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
1169 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
1170 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1171 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
1172 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
1174 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
1175 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));
1176 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));
1177 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));
1179 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));
1180 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));
1181 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2_child0));
1182 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));
1184 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));
1185 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child3));
1186 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
1187 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));
1189 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1191 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1192 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1193 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1194 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1196 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
1197 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1198 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1199 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1201 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
1202 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
1203 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
1204 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
1206 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
1207 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1208 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
1209 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
1211 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));
1212 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));
1213 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));
1214 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));
1216 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));
1217 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));
1218 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2_child0));
1219 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));
1221 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
1222 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child3));
1223 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
1224 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));
1226 YGNodeFreeRecursive(root);
1228 YGConfigFree(config);
1231 TEST(YogaTest, align_baseline_multiline_column) {
1232 const YGConfigRef config = YGConfigNew();
1234 const YGNodeRef root = YGNodeNewWithConfig(config);
1235 YGNodeStyleSetAlignItems(root, YGAlignBaseline);
1236 YGNodeStyleSetFlexWrap(root, YGWrapWrap);
1237 YGNodeStyleSetWidth(root, 100);
1238 YGNodeStyleSetHeight(root, 100);
1240 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1241 YGNodeStyleSetWidth(root_child0, 50);
1242 YGNodeStyleSetHeight(root_child0, 50);
1243 YGNodeInsertChild(root, root_child0, 0);
1245 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
1246 YGNodeStyleSetWidth(root_child1, 30);
1247 YGNodeStyleSetHeight(root_child1, 50);
1248 YGNodeInsertChild(root, root_child1, 1);
1250 const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
1251 YGNodeStyleSetWidth(root_child1_child0, 20);
1252 YGNodeStyleSetHeight(root_child1_child0, 20);
1253 YGNodeInsertChild(root_child1, root_child1_child0, 0);
1255 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
1256 YGNodeStyleSetWidth(root_child2, 40);
1257 YGNodeStyleSetHeight(root_child2, 70);
1258 YGNodeInsertChild(root, root_child2, 2);
1260 const YGNodeRef root_child2_child0 = YGNodeNewWithConfig(config);
1261 YGNodeStyleSetWidth(root_child2_child0, 10);
1262 YGNodeStyleSetHeight(root_child2_child0, 10);
1263 YGNodeInsertChild(root_child2, root_child2_child0, 0);
1265 const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
1266 YGNodeStyleSetWidth(root_child3, 50);
1267 YGNodeStyleSetHeight(root_child3, 20);
1268 YGNodeInsertChild(root, root_child3, 3);
1269 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1271 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1272 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1273 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1274 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1276 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1277 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1278 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1279 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1281 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
1282 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
1283 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
1284 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
1286 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
1287 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1288 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1_child0));
1289 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
1291 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));
1292 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
1293 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));
1294 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root_child2));
1296 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));
1297 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));
1298 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2_child0));
1299 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));
1301 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));
1302 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child3));
1303 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
1304 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));
1306 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1308 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1309 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1310 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1311 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1313 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
1314 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1315 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1316 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1318 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child1));
1319 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
1320 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
1321 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
1323 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1_child0));
1324 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1325 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1_child0));
1326 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
1328 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));
1329 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
1330 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));
1331 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root_child2));
1333 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child2_child0));
1334 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));
1335 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2_child0));
1336 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));
1338 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
1339 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child3));
1340 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
1341 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));
1343 YGNodeFreeRecursive(root);
1345 YGConfigFree(config);
1348 TEST(YogaTest, align_baseline_multiline_column2) {
1349 const YGConfigRef config = YGConfigNew();
1351 const YGNodeRef root = YGNodeNewWithConfig(config);
1352 YGNodeStyleSetAlignItems(root, YGAlignBaseline);
1353 YGNodeStyleSetFlexWrap(root, YGWrapWrap);
1354 YGNodeStyleSetWidth(root, 100);
1355 YGNodeStyleSetHeight(root, 100);
1357 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1358 YGNodeStyleSetWidth(root_child0, 50);
1359 YGNodeStyleSetHeight(root_child0, 50);
1360 YGNodeInsertChild(root, root_child0, 0);
1362 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
1363 YGNodeStyleSetWidth(root_child1, 30);
1364 YGNodeStyleSetHeight(root_child1, 50);
1365 YGNodeInsertChild(root, root_child1, 1);
1367 const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
1368 YGNodeStyleSetWidth(root_child1_child0, 20);
1369 YGNodeStyleSetHeight(root_child1_child0, 20);
1370 YGNodeInsertChild(root_child1, root_child1_child0, 0);
1372 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
1373 YGNodeStyleSetWidth(root_child2, 40);
1374 YGNodeStyleSetHeight(root_child2, 70);
1375 YGNodeInsertChild(root, root_child2, 2);
1377 const YGNodeRef root_child2_child0 = YGNodeNewWithConfig(config);
1378 YGNodeStyleSetWidth(root_child2_child0, 10);
1379 YGNodeStyleSetHeight(root_child2_child0, 10);
1380 YGNodeInsertChild(root_child2, root_child2_child0, 0);
1382 const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
1383 YGNodeStyleSetWidth(root_child3, 50);
1384 YGNodeStyleSetHeight(root_child3, 20);
1385 YGNodeInsertChild(root, root_child3, 3);
1386 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1388 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1389 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1390 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1391 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1393 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1394 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1395 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1396 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1398 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
1399 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
1400 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
1401 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
1403 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
1404 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1405 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1_child0));
1406 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
1408 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));
1409 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
1410 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));
1411 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root_child2));
1413 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));
1414 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));
1415 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2_child0));
1416 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));
1418 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));
1419 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child3));
1420 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
1421 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));
1423 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1425 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1426 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1427 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1428 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1430 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
1431 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1432 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1433 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1435 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child1));
1436 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
1437 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
1438 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
1440 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1_child0));
1441 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1442 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1_child0));
1443 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
1445 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));
1446 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
1447 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));
1448 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root_child2));
1450 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child2_child0));
1451 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));
1452 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2_child0));
1453 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));
1455 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
1456 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child3));
1457 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
1458 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));
1460 YGNodeFreeRecursive(root);
1462 YGConfigFree(config);
1465 TEST(YogaTest, align_baseline_multiline_row_and_column) {
1466 const YGConfigRef config = YGConfigNew();
1468 const YGNodeRef root = YGNodeNewWithConfig(config);
1469 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
1470 YGNodeStyleSetAlignItems(root, YGAlignBaseline);
1471 YGNodeStyleSetFlexWrap(root, YGWrapWrap);
1472 YGNodeStyleSetWidth(root, 100);
1473 YGNodeStyleSetHeight(root, 100);
1475 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1476 YGNodeStyleSetWidth(root_child0, 50);
1477 YGNodeStyleSetHeight(root_child0, 50);
1478 YGNodeInsertChild(root, root_child0, 0);
1480 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
1481 YGNodeStyleSetWidth(root_child1, 50);
1482 YGNodeStyleSetHeight(root_child1, 50);
1483 YGNodeInsertChild(root, root_child1, 1);
1485 const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
1486 YGNodeStyleSetWidth(root_child1_child0, 50);
1487 YGNodeStyleSetHeight(root_child1_child0, 10);
1488 YGNodeInsertChild(root_child1, root_child1_child0, 0);
1490 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
1491 YGNodeStyleSetWidth(root_child2, 50);
1492 YGNodeStyleSetHeight(root_child2, 20);
1493 YGNodeInsertChild(root, root_child2, 2);
1495 const YGNodeRef root_child2_child0 = YGNodeNewWithConfig(config);
1496 YGNodeStyleSetWidth(root_child2_child0, 50);
1497 YGNodeStyleSetHeight(root_child2_child0, 10);
1498 YGNodeInsertChild(root_child2, root_child2_child0, 0);
1500 const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
1501 YGNodeStyleSetWidth(root_child3, 50);
1502 YGNodeStyleSetHeight(root_child3, 20);
1503 YGNodeInsertChild(root, root_child3, 3);
1504 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1506 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1507 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1508 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1509 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1511 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1512 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1513 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1514 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1516 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
1517 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
1518 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
1519 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
1521 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
1522 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1523 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
1524 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
1526 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
1527 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));
1528 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));
1529 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));
1531 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));
1532 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));
1533 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2_child0));
1534 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));
1536 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));
1537 ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child3));
1538 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
1539 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));
1541 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1543 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1544 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1545 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1546 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1548 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
1549 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1550 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1551 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1553 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
1554 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
1555 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
1556 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
1558 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
1559 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1560 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
1561 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
1563 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));
1564 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));
1565 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));
1566 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));
1568 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));
1569 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));
1570 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2_child0));
1571 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));
1573 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
1574 ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child3));
1575 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
1576 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));
1578 YGNodeFreeRecursive(root);
1580 YGConfigFree(config);
1583 TEST(YogaTest, align_items_center_child_with_margin_bigger_than_parent) {
1584 const YGConfigRef config = YGConfigNew();
1586 const YGNodeRef root = YGNodeNewWithConfig(config);
1587 YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
1588 YGNodeStyleSetAlignItems(root, YGAlignCenter);
1589 YGNodeStyleSetWidth(root, 52);
1590 YGNodeStyleSetHeight(root, 52);
1592 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1593 YGNodeStyleSetAlignItems(root_child0, YGAlignCenter);
1594 YGNodeInsertChild(root, root_child0, 0);
1596 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1597 YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 10);
1598 YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 10);
1599 YGNodeStyleSetWidth(root_child0_child0, 52);
1600 YGNodeStyleSetHeight(root_child0_child0, 52);
1601 YGNodeInsertChild(root_child0, root_child0_child0, 0);
1602 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1604 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1605 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1606 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
1607 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
1609 ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));
1610 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1611 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));
1612 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0));
1614 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));
1615 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1616 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root_child0_child0));
1617 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0_child0));
1619 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1621 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1622 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1623 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
1624 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
1626 ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));
1627 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1628 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));
1629 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0));
1631 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));
1632 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1633 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root_child0_child0));
1634 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0_child0));
1636 YGNodeFreeRecursive(root);
1638 YGConfigFree(config);
1641 TEST(YogaTest, align_items_flex_end_child_with_margin_bigger_than_parent) {
1642 const YGConfigRef config = YGConfigNew();
1644 const YGNodeRef root = YGNodeNewWithConfig(config);
1645 YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
1646 YGNodeStyleSetAlignItems(root, YGAlignCenter);
1647 YGNodeStyleSetWidth(root, 52);
1648 YGNodeStyleSetHeight(root, 52);
1650 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1651 YGNodeStyleSetAlignItems(root_child0, YGAlignFlexEnd);
1652 YGNodeInsertChild(root, root_child0, 0);
1654 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1655 YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 10);
1656 YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 10);
1657 YGNodeStyleSetWidth(root_child0_child0, 52);
1658 YGNodeStyleSetHeight(root_child0_child0, 52);
1659 YGNodeInsertChild(root_child0, root_child0_child0, 0);
1660 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1662 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1663 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1664 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
1665 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
1667 ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));
1668 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1669 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));
1670 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0));
1672 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));
1673 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1674 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root_child0_child0));
1675 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0_child0));
1677 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1679 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1680 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1681 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
1682 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
1684 ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));
1685 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1686 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));
1687 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0));
1689 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));
1690 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1691 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root_child0_child0));
1692 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0_child0));
1694 YGNodeFreeRecursive(root);
1696 YGConfigFree(config);
1699 TEST(YogaTest, align_items_center_child_without_margin_bigger_than_parent) {
1700 const YGConfigRef config = YGConfigNew();
1702 const YGNodeRef root = YGNodeNewWithConfig(config);
1703 YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
1704 YGNodeStyleSetAlignItems(root, YGAlignCenter);
1705 YGNodeStyleSetWidth(root, 52);
1706 YGNodeStyleSetHeight(root, 52);
1708 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1709 YGNodeStyleSetAlignItems(root_child0, YGAlignCenter);
1710 YGNodeInsertChild(root, root_child0, 0);
1712 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1713 YGNodeStyleSetWidth(root_child0_child0, 72);
1714 YGNodeStyleSetHeight(root_child0_child0, 72);
1715 YGNodeInsertChild(root_child0, root_child0_child0, 0);
1716 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1718 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1719 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1720 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
1721 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
1723 ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));
1724 ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));
1725 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));
1726 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));
1728 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1729 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1730 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0));
1731 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0));
1733 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1735 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1736 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1737 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
1738 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
1740 ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));
1741 ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));
1742 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));
1743 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));
1745 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1746 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1747 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0));
1748 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0));
1750 YGNodeFreeRecursive(root);
1752 YGConfigFree(config);
1755 TEST(YogaTest, align_items_flex_end_child_without_margin_bigger_than_parent) {
1756 const YGConfigRef config = YGConfigNew();
1758 const YGNodeRef root = YGNodeNewWithConfig(config);
1759 YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
1760 YGNodeStyleSetAlignItems(root, YGAlignCenter);
1761 YGNodeStyleSetWidth(root, 52);
1762 YGNodeStyleSetHeight(root, 52);
1764 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1765 YGNodeStyleSetAlignItems(root_child0, YGAlignFlexEnd);
1766 YGNodeInsertChild(root, root_child0, 0);
1768 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1769 YGNodeStyleSetWidth(root_child0_child0, 72);
1770 YGNodeStyleSetHeight(root_child0_child0, 72);
1771 YGNodeInsertChild(root_child0, root_child0_child0, 0);
1772 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1774 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1775 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1776 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
1777 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
1779 ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));
1780 ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));
1781 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));
1782 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));
1784 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1785 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1786 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0));
1787 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0));
1789 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1791 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1792 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1793 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
1794 ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
1796 ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));
1797 ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));
1798 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));
1799 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));
1801 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1802 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1803 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0));
1804 ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0));
1806 YGNodeFreeRecursive(root);
1808 YGConfigFree(config);
1811 TEST(YogaTest, align_center_should_size_based_on_content) {
1812 const YGConfigRef config = YGConfigNew();
1814 const YGNodeRef root = YGNodeNewWithConfig(config);
1815 YGNodeStyleSetAlignItems(root, YGAlignCenter);
1816 YGNodeStyleSetMargin(root, YGEdgeTop, 20);
1817 YGNodeStyleSetWidth(root, 100);
1818 YGNodeStyleSetHeight(root, 100);
1820 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1821 YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);
1822 YGNodeStyleSetFlexShrink(root_child0, 1);
1823 YGNodeInsertChild(root, root_child0, 0);
1825 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1826 YGNodeStyleSetFlexGrow(root_child0_child0, 1);
1827 YGNodeStyleSetFlexShrink(root_child0_child0, 1);
1828 YGNodeInsertChild(root_child0, root_child0_child0, 0);
1830 const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
1831 YGNodeStyleSetWidth(root_child0_child0_child0, 20);
1832 YGNodeStyleSetHeight(root_child0_child0_child0, 20);
1833 YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
1834 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1836 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1837 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
1838 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1839 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1841 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0));
1842 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1843 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
1844 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
1846 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1847 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1848 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));
1849 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
1851 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
1852 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
1853 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));
1854 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child0));
1856 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1858 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1859 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
1860 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1861 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1863 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0));
1864 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1865 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
1866 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
1868 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1869 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1870 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));
1871 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
1873 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
1874 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
1875 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));
1876 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child0));
1878 YGNodeFreeRecursive(root);
1880 YGConfigFree(config);
1883 TEST(YogaTest, align_strech_should_size_based_on_parent) {
1884 const YGConfigRef config = YGConfigNew();
1886 const YGNodeRef root = YGNodeNewWithConfig(config);
1887 YGNodeStyleSetMargin(root, YGEdgeTop, 20);
1888 YGNodeStyleSetWidth(root, 100);
1889 YGNodeStyleSetHeight(root, 100);
1891 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1892 YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);
1893 YGNodeStyleSetFlexShrink(root_child0, 1);
1894 YGNodeInsertChild(root, root_child0, 0);
1896 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1897 YGNodeStyleSetFlexGrow(root_child0_child0, 1);
1898 YGNodeStyleSetFlexShrink(root_child0_child0, 1);
1899 YGNodeInsertChild(root_child0, root_child0_child0, 0);
1901 const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
1902 YGNodeStyleSetWidth(root_child0_child0_child0, 20);
1903 YGNodeStyleSetHeight(root_child0_child0_child0, 20);
1904 YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
1905 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1907 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1908 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
1909 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1910 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1912 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1913 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1914 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
1915 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
1917 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1918 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1919 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
1920 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
1922 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
1923 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
1924 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));
1925 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child0));
1927 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1929 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1930 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
1931 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1932 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1934 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1935 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1936 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
1937 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
1939 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1940 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1941 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
1942 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
1944 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child0_child0));
1945 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
1946 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));
1947 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child0));
1949 YGNodeFreeRecursive(root);
1951 YGConfigFree(config);
1954 TEST(YogaTest, align_flex_start_with_shrinking_children) {
1955 const YGConfigRef config = YGConfigNew();
1957 const YGNodeRef root = YGNodeNewWithConfig(config);
1958 YGNodeStyleSetWidth(root, 500);
1959 YGNodeStyleSetHeight(root, 500);
1961 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1962 YGNodeStyleSetAlignItems(root_child0, YGAlignFlexStart);
1963 YGNodeInsertChild(root, root_child0, 0);
1965 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1966 YGNodeStyleSetFlexGrow(root_child0_child0, 1);
1967 YGNodeStyleSetFlexShrink(root_child0_child0, 1);
1968 YGNodeInsertChild(root_child0, root_child0_child0, 0);
1970 const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
1971 YGNodeStyleSetFlexGrow(root_child0_child0_child0, 1);
1972 YGNodeStyleSetFlexShrink(root_child0_child0_child0, 1);
1973 YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
1974 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1976 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1977 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1978 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
1979 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
1981 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1982 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1983 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));
1984 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
1986 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1987 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1988 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));
1989 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));
1991 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
1992 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
1993 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));
1994 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));
1996 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1998 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1999 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
2000 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
2001 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
2003 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
2004 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
2005 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));
2006 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
2008 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child0_child0));
2009 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
2010 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));
2011 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));
2013 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
2014 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
2015 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));
2016 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));
2018 YGNodeFreeRecursive(root);
2020 YGConfigFree(config);
2023 TEST(YogaTest, align_flex_start_with_stretching_children) {
2024 const YGConfigRef config = YGConfigNew();
2026 const YGNodeRef root = YGNodeNewWithConfig(config);
2027 YGNodeStyleSetWidth(root, 500);
2028 YGNodeStyleSetHeight(root, 500);
2030 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
2031 YGNodeInsertChild(root, root_child0, 0);
2033 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
2034 YGNodeStyleSetFlexGrow(root_child0_child0, 1);
2035 YGNodeStyleSetFlexShrink(root_child0_child0, 1);
2036 YGNodeInsertChild(root_child0, root_child0_child0, 0);
2038 const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
2039 YGNodeStyleSetFlexGrow(root_child0_child0_child0, 1);
2040 YGNodeStyleSetFlexShrink(root_child0_child0_child0, 1);
2041 YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
2042 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
2044 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
2045 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
2046 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
2047 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
2049 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
2050 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
2051 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));
2052 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
2054 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
2055 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
2056 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0_child0));
2057 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));
2059 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
2060 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
2061 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0_child0_child0));
2062 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));
2064 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
2066 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
2067 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
2068 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
2069 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
2071 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
2072 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
2073 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));
2074 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
2076 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
2077 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
2078 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0_child0));
2079 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));
2081 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
2082 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
2083 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0_child0_child0));
2084 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));
2086 YGNodeFreeRecursive(root);
2088 YGConfigFree(config);
2091 TEST(YogaTest, align_flex_start_with_shrinking_children_with_stretch) {
2092 const YGConfigRef config = YGConfigNew();
2094 const YGNodeRef root = YGNodeNewWithConfig(config);
2095 YGNodeStyleSetWidth(root, 500);
2096 YGNodeStyleSetHeight(root, 500);
2098 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
2099 YGNodeStyleSetAlignItems(root_child0, YGAlignFlexStart);
2100 YGNodeInsertChild(root, root_child0, 0);
2102 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
2103 YGNodeStyleSetFlexGrow(root_child0_child0, 1);
2104 YGNodeStyleSetFlexShrink(root_child0_child0, 1);
2105 YGNodeInsertChild(root_child0, root_child0_child0, 0);
2107 const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
2108 YGNodeStyleSetFlexGrow(root_child0_child0_child0, 1);
2109 YGNodeStyleSetFlexShrink(root_child0_child0_child0, 1);
2110 YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
2111 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
2113 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
2114 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
2115 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
2116 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
2118 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
2119 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
2120 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));
2121 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
2123 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
2124 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
2125 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));
2126 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));
2128 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
2129 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
2130 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));
2131 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));
2133 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
2135 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
2136 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
2137 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
2138 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
2140 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
2141 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
2142 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));
2143 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
2145 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child0_child0));
2146 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
2147 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));
2148 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));
2150 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
2151 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
2152 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));
2153 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));
2155 YGNodeFreeRecursive(root);
2157 YGConfigFree(config);