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/YGMinMaxDimensionTest.html
10 #include <gtest/gtest.h>
11 #include <yoga/Yoga.h>
13 TEST(YogaTest, max_width) {
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 YGNodeStyleSetMaxWidth(root_child0, 50);
22 YGNodeStyleSetHeight(root_child0, 10);
23 YGNodeInsertChild(root, root_child0, 0);
24 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
26 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
27 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
28 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
29 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
31 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
32 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
33 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
34 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
36 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
38 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
39 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
40 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
41 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
43 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
44 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
45 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
46 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
48 YGNodeFreeRecursive(root);
53 TEST(YogaTest, max_height) {
54 const YGConfigRef config = YGConfigNew();
56 const YGNodeRef root = YGNodeNewWithConfig(config);
57 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
58 YGNodeStyleSetWidth(root, 100);
59 YGNodeStyleSetHeight(root, 100);
61 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
62 YGNodeStyleSetWidth(root_child0, 10);
63 YGNodeStyleSetMaxHeight(root_child0, 50);
64 YGNodeInsertChild(root, root_child0, 0);
65 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
67 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
68 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
69 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
70 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
72 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
73 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
74 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
75 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
77 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
79 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
80 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
81 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
82 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
84 ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));
85 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
86 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
87 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
89 YGNodeFreeRecursive(root);
94 TEST(YogaTest, min_height) {
95 const YGConfigRef config = YGConfigNew();
97 const YGNodeRef root = YGNodeNewWithConfig(config);
98 YGNodeStyleSetWidth(root, 100);
99 YGNodeStyleSetHeight(root, 100);
101 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
102 YGNodeStyleSetFlexGrow(root_child0, 1);
103 YGNodeStyleSetMinHeight(root_child0, 60);
104 YGNodeInsertChild(root, root_child0, 0);
106 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
107 YGNodeStyleSetFlexGrow(root_child1, 1);
108 YGNodeInsertChild(root, root_child1, 1);
109 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
111 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
112 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
113 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
114 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
116 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
117 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
118 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
119 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));
121 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
122 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child1));
123 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
124 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
126 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
128 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
129 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
130 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
131 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
133 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
134 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
135 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
136 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));
138 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
139 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child1));
140 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
141 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
143 YGNodeFreeRecursive(root);
145 YGConfigFree(config);
148 TEST(YogaTest, min_width) {
149 const YGConfigRef config = YGConfigNew();
151 const YGNodeRef root = YGNodeNewWithConfig(config);
152 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
153 YGNodeStyleSetWidth(root, 100);
154 YGNodeStyleSetHeight(root, 100);
156 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
157 YGNodeStyleSetFlexGrow(root_child0, 1);
158 YGNodeStyleSetMinWidth(root_child0, 60);
159 YGNodeInsertChild(root, root_child0, 0);
161 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
162 YGNodeStyleSetFlexGrow(root_child1, 1);
163 YGNodeInsertChild(root, root_child1, 1);
164 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
166 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
167 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
168 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
169 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
171 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
172 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
173 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));
174 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
176 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child1));
177 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
178 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));
179 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
181 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
183 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
184 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
185 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
186 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
188 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));
189 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
190 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));
191 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
193 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
194 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
195 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));
196 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
198 YGNodeFreeRecursive(root);
200 YGConfigFree(config);
203 TEST(YogaTest, justify_content_min_max) {
204 const YGConfigRef config = YGConfigNew();
206 const YGNodeRef root = YGNodeNewWithConfig(config);
207 YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
208 YGNodeStyleSetWidth(root, 100);
209 YGNodeStyleSetMinHeight(root, 100);
210 YGNodeStyleSetMaxHeight(root, 200);
212 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
213 YGNodeStyleSetWidth(root_child0, 60);
214 YGNodeStyleSetHeight(root_child0, 60);
215 YGNodeInsertChild(root, root_child0, 0);
216 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
218 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
219 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
220 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
221 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
223 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
224 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));
225 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
226 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
228 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
230 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
231 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
232 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
233 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
235 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0));
236 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));
237 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
238 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
240 YGNodeFreeRecursive(root);
242 YGConfigFree(config);
245 TEST(YogaTest, align_items_min_max) {
246 const YGConfigRef config = YGConfigNew();
248 const YGNodeRef root = YGNodeNewWithConfig(config);
249 YGNodeStyleSetAlignItems(root, YGAlignCenter);
250 YGNodeStyleSetMinWidth(root, 100);
251 YGNodeStyleSetMaxWidth(root, 200);
252 YGNodeStyleSetHeight(root, 100);
254 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
255 YGNodeStyleSetWidth(root_child0, 60);
256 YGNodeStyleSetHeight(root_child0, 60);
257 YGNodeInsertChild(root, root_child0, 0);
258 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
260 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
261 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
262 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
263 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
265 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));
266 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
267 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
268 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
270 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
272 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
273 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
274 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
275 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
277 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));
278 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
279 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));
280 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
282 YGNodeFreeRecursive(root);
284 YGConfigFree(config);
287 TEST(YogaTest, justify_content_overflow_min_max) {
288 const YGConfigRef config = YGConfigNew();
290 const YGNodeRef root = YGNodeNewWithConfig(config);
291 YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
292 YGNodeStyleSetMinHeight(root, 100);
293 YGNodeStyleSetMaxHeight(root, 110);
295 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
296 YGNodeStyleSetWidth(root_child0, 50);
297 YGNodeStyleSetHeight(root_child0, 50);
298 YGNodeInsertChild(root, root_child0, 0);
300 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
301 YGNodeStyleSetWidth(root_child1, 50);
302 YGNodeStyleSetHeight(root_child1, 50);
303 YGNodeInsertChild(root, root_child1, 1);
305 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
306 YGNodeStyleSetWidth(root_child2, 50);
307 YGNodeStyleSetHeight(root_child2, 50);
308 YGNodeInsertChild(root, root_child2, 2);
309 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
311 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
312 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
313 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));
314 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetHeight(root));
316 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
317 ASSERT_FLOAT_EQ(-20, YGNodeLayoutGetTop(root_child0));
318 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
319 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
321 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
322 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));
323 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
324 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
326 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
327 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child2));
328 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));
329 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));
331 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
333 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
334 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
335 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));
336 ASSERT_FLOAT_EQ(110, YGNodeLayoutGetHeight(root));
338 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
339 ASSERT_FLOAT_EQ(-20, YGNodeLayoutGetTop(root_child0));
340 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
341 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
343 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
344 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));
345 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
346 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
348 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
349 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child2));
350 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));
351 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));
353 YGNodeFreeRecursive(root);
355 YGConfigFree(config);
358 TEST(YogaTest, flex_grow_to_min) {
359 const YGConfigRef config = YGConfigNew();
361 const YGNodeRef root = YGNodeNewWithConfig(config);
362 YGNodeStyleSetWidth(root, 100);
363 YGNodeStyleSetMinHeight(root, 100);
364 YGNodeStyleSetMaxHeight(root, 500);
366 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
367 YGNodeStyleSetFlexGrow(root_child0, 1);
368 YGNodeStyleSetFlexShrink(root_child0, 1);
369 YGNodeInsertChild(root, root_child0, 0);
371 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
372 YGNodeStyleSetHeight(root_child1, 50);
373 YGNodeInsertChild(root, root_child1, 1);
374 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
376 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
377 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
378 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
379 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
381 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
382 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
383 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
384 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
386 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
387 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
388 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
389 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
391 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
393 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
394 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
395 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
396 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
398 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
399 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
400 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
401 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
403 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
404 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
405 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
406 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
408 YGNodeFreeRecursive(root);
410 YGConfigFree(config);
413 TEST(YogaTest, flex_grow_in_at_most_container) {
414 const YGConfigRef config = YGConfigNew();
416 const YGNodeRef root = YGNodeNewWithConfig(config);
417 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
418 YGNodeStyleSetAlignItems(root, YGAlignFlexStart);
419 YGNodeStyleSetWidth(root, 100);
420 YGNodeStyleSetHeight(root, 100);
422 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
423 YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);
424 YGNodeInsertChild(root, root_child0, 0);
426 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
427 YGNodeStyleSetFlexGrow(root_child0_child0, 1);
428 YGNodeStyleSetFlexBasis(root_child0_child0, 0);
429 YGNodeInsertChild(root_child0, root_child0_child0, 0);
430 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
432 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
433 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
434 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
435 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
437 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
438 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
439 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));
440 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
442 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
443 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
444 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));
445 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));
447 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
449 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
450 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
451 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
452 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
454 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));
455 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
456 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));
457 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
459 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
460 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
461 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));
462 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));
464 YGNodeFreeRecursive(root);
466 YGConfigFree(config);
469 TEST(YogaTest, flex_grow_child) {
470 const YGConfigRef config = YGConfigNew();
472 const YGNodeRef root = YGNodeNewWithConfig(config);
473 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
475 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
476 YGNodeStyleSetFlexGrow(root_child0, 1);
477 YGNodeStyleSetFlexBasis(root_child0, 0);
478 YGNodeStyleSetHeight(root_child0, 100);
479 YGNodeInsertChild(root, root_child0, 0);
480 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
482 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
483 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
484 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));
485 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
487 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
488 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
489 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));
490 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
492 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
494 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
495 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
496 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));
497 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
499 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
500 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
501 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));
502 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
504 YGNodeFreeRecursive(root);
506 YGConfigFree(config);
509 TEST(YogaTest, flex_grow_within_constrained_min_max_column) {
510 const YGConfigRef config = YGConfigNew();
512 const YGNodeRef root = YGNodeNewWithConfig(config);
513 YGNodeStyleSetMinHeight(root, 100);
514 YGNodeStyleSetMaxHeight(root, 200);
516 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
517 YGNodeStyleSetFlexGrow(root_child0, 1);
518 YGNodeInsertChild(root, root_child0, 0);
520 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
521 YGNodeStyleSetHeight(root_child1, 50);
522 YGNodeInsertChild(root, root_child1, 1);
523 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
525 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
526 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
527 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));
528 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
530 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
531 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
532 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));
533 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
535 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
536 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
537 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));
538 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
540 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
542 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
543 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
544 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));
545 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
547 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
548 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
549 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));
550 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
552 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
553 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
554 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));
555 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
557 YGNodeFreeRecursive(root);
559 YGConfigFree(config);
562 TEST(YogaTest, flex_grow_within_max_width) {
563 const YGConfigRef config = YGConfigNew();
565 const YGNodeRef root = YGNodeNewWithConfig(config);
566 YGNodeStyleSetWidth(root, 200);
567 YGNodeStyleSetHeight(root, 100);
569 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
570 YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);
571 YGNodeStyleSetMaxWidth(root_child0, 100);
572 YGNodeInsertChild(root, root_child0, 0);
574 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
575 YGNodeStyleSetFlexGrow(root_child0_child0, 1);
576 YGNodeStyleSetHeight(root_child0_child0, 20);
577 YGNodeInsertChild(root_child0, root_child0_child0, 0);
578 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
580 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
581 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
582 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
583 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
585 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
586 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
587 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
588 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
590 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
591 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
592 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
593 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
595 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
597 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
598 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
599 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
600 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
602 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));
603 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
604 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
605 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
607 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
608 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
609 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
610 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
612 YGNodeFreeRecursive(root);
614 YGConfigFree(config);
617 TEST(YogaTest, flex_grow_within_constrained_max_width) {
618 const YGConfigRef config = YGConfigNew();
620 const YGNodeRef root = YGNodeNewWithConfig(config);
621 YGNodeStyleSetWidth(root, 200);
622 YGNodeStyleSetHeight(root, 100);
624 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
625 YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);
626 YGNodeStyleSetMaxWidth(root_child0, 300);
627 YGNodeInsertChild(root, root_child0, 0);
629 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
630 YGNodeStyleSetFlexGrow(root_child0_child0, 1);
631 YGNodeStyleSetHeight(root_child0_child0, 20);
632 YGNodeInsertChild(root_child0, root_child0_child0, 0);
633 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
635 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
636 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
637 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
638 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
640 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
641 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
642 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));
643 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
645 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
646 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
647 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));
648 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
650 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
652 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
653 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
654 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
655 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
657 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
658 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
659 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));
660 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
662 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
663 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
664 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));
665 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
667 YGNodeFreeRecursive(root);
669 YGConfigFree(config);
672 TEST(YogaTest, flex_root_ignored) {
673 const YGConfigRef config = YGConfigNew();
675 const YGNodeRef root = YGNodeNewWithConfig(config);
676 YGNodeStyleSetFlexGrow(root, 1);
677 YGNodeStyleSetWidth(root, 100);
678 YGNodeStyleSetMinHeight(root, 100);
679 YGNodeStyleSetMaxHeight(root, 500);
681 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
682 YGNodeStyleSetFlexGrow(root_child0, 1);
683 YGNodeStyleSetFlexBasis(root_child0, 200);
684 YGNodeInsertChild(root, root_child0, 0);
686 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
687 YGNodeStyleSetHeight(root_child1, 100);
688 YGNodeInsertChild(root, root_child1, 1);
689 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
691 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
692 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
693 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
694 ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));
696 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
697 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
698 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
699 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));
701 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
702 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));
703 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
704 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
706 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
708 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
709 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
710 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
711 ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));
713 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
714 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
715 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
716 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));
718 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
719 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));
720 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
721 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
723 YGNodeFreeRecursive(root);
725 YGConfigFree(config);
728 TEST(YogaTest, flex_grow_root_minimized) {
729 const YGConfigRef config = YGConfigNew();
731 const YGNodeRef root = YGNodeNewWithConfig(config);
732 YGNodeStyleSetWidth(root, 100);
733 YGNodeStyleSetMinHeight(root, 100);
734 YGNodeStyleSetMaxHeight(root, 500);
736 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
737 YGNodeStyleSetFlexGrow(root_child0, 1);
738 YGNodeStyleSetMinHeight(root_child0, 100);
739 YGNodeStyleSetMaxHeight(root_child0, 500);
740 YGNodeInsertChild(root, root_child0, 0);
742 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
743 YGNodeStyleSetFlexGrow(root_child0_child0, 1);
744 YGNodeStyleSetFlexBasis(root_child0_child0, 200);
745 YGNodeInsertChild(root_child0, root_child0_child0, 0);
747 const YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);
748 YGNodeStyleSetHeight(root_child0_child1, 100);
749 YGNodeInsertChild(root_child0, root_child0_child1, 1);
750 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
752 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
753 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
754 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
755 ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));
757 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
758 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
759 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
760 ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0));
762 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
763 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
764 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
765 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));
767 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
768 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child0_child1));
769 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));
770 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));
772 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
774 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
775 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
776 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
777 ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));
779 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
780 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
781 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
782 ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0));
784 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
785 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
786 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
787 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));
789 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
790 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child0_child1));
791 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));
792 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));
794 YGNodeFreeRecursive(root);
796 YGConfigFree(config);
799 TEST(YogaTest, flex_grow_height_maximized) {
800 const YGConfigRef config = YGConfigNew();
802 const YGNodeRef root = YGNodeNewWithConfig(config);
803 YGNodeStyleSetWidth(root, 100);
804 YGNodeStyleSetHeight(root, 500);
806 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
807 YGNodeStyleSetFlexGrow(root_child0, 1);
808 YGNodeStyleSetMinHeight(root_child0, 100);
809 YGNodeStyleSetMaxHeight(root_child0, 500);
810 YGNodeInsertChild(root, root_child0, 0);
812 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
813 YGNodeStyleSetFlexGrow(root_child0_child0, 1);
814 YGNodeStyleSetFlexBasis(root_child0_child0, 200);
815 YGNodeInsertChild(root_child0, root_child0_child0, 0);
817 const YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);
818 YGNodeStyleSetHeight(root_child0_child1, 100);
819 YGNodeInsertChild(root_child0, root_child0_child1, 1);
820 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
822 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
823 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
824 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
825 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
827 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
828 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
829 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
830 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));
832 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
833 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
834 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
835 ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0_child0));
837 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
838 ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child0_child1));
839 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));
840 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));
842 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
844 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
845 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
846 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
847 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
849 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
850 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
851 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
852 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));
854 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
855 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
856 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
857 ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0_child0));
859 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
860 ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child0_child1));
861 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));
862 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));
864 YGNodeFreeRecursive(root);
866 YGConfigFree(config);
869 TEST(YogaTest, flex_grow_within_constrained_min_row) {
870 const YGConfigRef config = YGConfigNew();
872 const YGNodeRef root = YGNodeNewWithConfig(config);
873 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
874 YGNodeStyleSetMinWidth(root, 100);
875 YGNodeStyleSetHeight(root, 100);
877 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
878 YGNodeStyleSetFlexGrow(root_child0, 1);
879 YGNodeInsertChild(root, root_child0, 0);
881 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
882 YGNodeStyleSetWidth(root_child1, 50);
883 YGNodeInsertChild(root, root_child1, 1);
884 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
886 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
887 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
888 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
889 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
891 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
892 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
893 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
894 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
896 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
897 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
898 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
899 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
901 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
903 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
904 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
905 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
906 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
908 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
909 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
910 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
911 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
913 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
914 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
915 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
916 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
918 YGNodeFreeRecursive(root);
920 YGConfigFree(config);
923 TEST(YogaTest, flex_grow_within_constrained_min_column) {
924 const YGConfigRef config = YGConfigNew();
926 const YGNodeRef root = YGNodeNewWithConfig(config);
927 YGNodeStyleSetMinHeight(root, 100);
929 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
930 YGNodeStyleSetFlexGrow(root_child0, 1);
931 YGNodeInsertChild(root, root_child0, 0);
933 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
934 YGNodeStyleSetHeight(root_child1, 50);
935 YGNodeInsertChild(root, root_child1, 1);
936 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
938 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
939 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
940 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));
941 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
943 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
944 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
945 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));
946 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
948 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
949 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
950 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));
951 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
953 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
955 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
956 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
957 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));
958 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
960 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
961 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
962 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));
963 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
965 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
966 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
967 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));
968 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
970 YGNodeFreeRecursive(root);
972 YGConfigFree(config);
975 TEST(YogaTest, flex_grow_within_constrained_max_row) {
976 const YGConfigRef config = YGConfigNew();
978 const YGNodeRef root = YGNodeNewWithConfig(config);
979 YGNodeStyleSetWidth(root, 200);
981 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
982 YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);
983 YGNodeStyleSetMaxWidth(root_child0, 100);
984 YGNodeStyleSetHeight(root_child0, 100);
985 YGNodeInsertChild(root, root_child0, 0);
987 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
988 YGNodeStyleSetFlexShrink(root_child0_child0, 1);
989 YGNodeStyleSetFlexBasis(root_child0_child0, 100);
990 YGNodeInsertChild(root_child0, root_child0_child0, 0);
992 const YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);
993 YGNodeStyleSetWidth(root_child0_child1, 50);
994 YGNodeInsertChild(root_child0, root_child0_child1, 1);
995 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
997 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
998 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
999 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
1000 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1002 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1003 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1004 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
1005 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
1007 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1008 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1009 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));
1010 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));
1012 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child1));
1013 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));
1014 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));
1015 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));
1017 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1019 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1020 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1021 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
1022 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1024 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));
1025 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1026 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
1027 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
1029 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));
1030 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1031 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));
1032 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));
1034 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
1035 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));
1036 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));
1037 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));
1039 YGNodeFreeRecursive(root);
1041 YGConfigFree(config);
1044 TEST(YogaTest, flex_grow_within_constrained_max_column) {
1045 const YGConfigRef config = YGConfigNew();
1047 const YGNodeRef root = YGNodeNewWithConfig(config);
1048 YGNodeStyleSetWidth(root, 100);
1049 YGNodeStyleSetMaxHeight(root, 100);
1051 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1052 YGNodeStyleSetFlexShrink(root_child0, 1);
1053 YGNodeStyleSetFlexBasis(root_child0, 100);
1054 YGNodeInsertChild(root, root_child0, 0);
1056 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
1057 YGNodeStyleSetHeight(root_child1, 50);
1058 YGNodeInsertChild(root, root_child1, 1);
1059 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1061 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1062 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1063 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1064 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1066 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1067 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1068 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
1069 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1071 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
1072 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
1073 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
1074 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
1076 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1078 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1079 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1080 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1081 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1083 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1084 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1085 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
1086 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1088 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
1089 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
1090 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
1091 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
1093 YGNodeFreeRecursive(root);
1095 YGConfigFree(config);
1098 TEST(YogaTest, child_min_max_width_flexing) {
1099 const YGConfigRef config = YGConfigNew();
1101 const YGNodeRef root = YGNodeNewWithConfig(config);
1102 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
1103 YGNodeStyleSetWidth(root, 120);
1104 YGNodeStyleSetHeight(root, 50);
1106 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1107 YGNodeStyleSetFlexGrow(root_child0, 1);
1108 YGNodeStyleSetFlexBasis(root_child0, 0);
1109 YGNodeStyleSetMinWidth(root_child0, 60);
1110 YGNodeInsertChild(root, root_child0, 0);
1112 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
1113 YGNodeStyleSetFlexGrow(root_child1, 1);
1114 YGNodeStyleSetFlexBasisPercent(root_child1, 50);
1115 YGNodeStyleSetMaxWidth(root_child1, 20);
1116 YGNodeInsertChild(root, root_child1, 1);
1117 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1119 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1120 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1121 ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root));
1122 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));
1124 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1125 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1126 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
1127 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1129 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));
1130 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
1131 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));
1132 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
1134 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1136 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1137 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1138 ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root));
1139 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));
1141 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));
1142 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1143 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
1144 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1146 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
1147 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
1148 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));
1149 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
1151 YGNodeFreeRecursive(root);
1153 YGConfigFree(config);
1156 TEST(YogaTest, min_width_overrides_width) {
1157 const YGConfigRef config = YGConfigNew();
1159 const YGNodeRef root = YGNodeNewWithConfig(config);
1160 YGNodeStyleSetWidth(root, 50);
1161 YGNodeStyleSetMinWidth(root, 100);
1162 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1164 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1165 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1166 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1167 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root));
1169 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1171 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1172 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1173 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1174 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root));
1176 YGNodeFreeRecursive(root);
1178 YGConfigFree(config);
1181 TEST(YogaTest, max_width_overrides_width) {
1182 const YGConfigRef config = YGConfigNew();
1184 const YGNodeRef root = YGNodeNewWithConfig(config);
1185 YGNodeStyleSetWidth(root, 200);
1186 YGNodeStyleSetMaxWidth(root, 100);
1187 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1189 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1190 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1191 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1192 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root));
1194 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1196 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1197 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1198 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1199 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root));
1201 YGNodeFreeRecursive(root);
1203 YGConfigFree(config);
1206 TEST(YogaTest, min_height_overrides_height) {
1207 const YGConfigRef config = YGConfigNew();
1209 const YGNodeRef root = YGNodeNewWithConfig(config);
1210 YGNodeStyleSetHeight(root, 50);
1211 YGNodeStyleSetMinHeight(root, 100);
1212 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1214 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1215 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1216 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));
1217 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1219 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1221 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1222 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1223 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));
1224 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1226 YGNodeFreeRecursive(root);
1228 YGConfigFree(config);
1231 TEST(YogaTest, max_height_overrides_height) {
1232 const YGConfigRef config = YGConfigNew();
1234 const YGNodeRef root = YGNodeNewWithConfig(config);
1235 YGNodeStyleSetHeight(root, 200);
1236 YGNodeStyleSetMaxHeight(root, 100);
1237 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1239 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1240 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1241 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));
1242 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1244 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1246 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1247 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1248 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));
1249 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1251 YGNodeFreeRecursive(root);
1253 YGConfigFree(config);
1256 TEST(YogaTest, min_max_percent_no_width_height) {
1257 const YGConfigRef config = YGConfigNew();
1259 const YGNodeRef root = YGNodeNewWithConfig(config);
1260 YGNodeStyleSetAlignItems(root, YGAlignFlexStart);
1261 YGNodeStyleSetWidth(root, 100);
1262 YGNodeStyleSetHeight(root, 100);
1264 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1265 YGNodeStyleSetMinWidthPercent(root_child0, 10);
1266 YGNodeStyleSetMaxWidthPercent(root_child0, 10);
1267 YGNodeStyleSetMinHeightPercent(root_child0, 10);
1268 YGNodeStyleSetMaxHeightPercent(root_child0, 10);
1269 YGNodeInsertChild(root, root_child0, 0);
1270 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1272 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1273 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1274 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1275 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1277 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1278 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1279 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
1280 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
1282 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1284 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1285 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1286 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1287 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1289 ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));
1290 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1291 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
1292 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
1294 YGNodeFreeRecursive(root);
1296 YGConfigFree(config);