diff --git a/csharp/tests/Facebook.CSSLayout/CSSLayoutAbsolutePositionTest.cs b/csharp/tests/Facebook.CSSLayout/CSSLayoutAbsolutePositionTest.cs
new file mode 100644
index 00000000..c9ae2bb6
--- /dev/null
+++ b/csharp/tests/Facebook.CSSLayout/CSSLayoutAbsolutePositionTest.cs
@@ -0,0 +1,266 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+
+
+ *
+ */
+
+using System;
+using NUnit.Framework;
+
+namespace Facebook.CSSLayout
+{
+ [TestFixture]
+ public class CSSLayoutAbsolutePositionTest
+ {
+ [Test]
+ public void Test_absolute_layout_width_height_start_top()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.PositionType = CSSPositionType.Absolute;
+ root_child0.SetPosition(CSSEdge.Start, 10);
+ root_child0.SetPosition(CSSEdge.Top, 10);
+ root_child0.StyleWidth = 10;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(80, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_absolute_layout_width_height_end_bottom()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.PositionType = CSSPositionType.Absolute;
+ root_child0.SetPosition(CSSEdge.End, 10);
+ root_child0.SetPosition(CSSEdge.Bottom, 10);
+ root_child0.StyleWidth = 10;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(80, root_child0.LayoutX);
+ Assert.AreEqual(80, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(80, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_absolute_layout_start_top_end_bottom()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.PositionType = CSSPositionType.Absolute;
+ root_child0.SetPosition(CSSEdge.Start, 10);
+ root_child0.SetPosition(CSSEdge.Top, 10);
+ root_child0.SetPosition(CSSEdge.End, 10);
+ root_child0.SetPosition(CSSEdge.Bottom, 10);
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(80, root_child0.LayoutWidth);
+ Assert.AreEqual(80, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(80, root_child0.LayoutWidth);
+ Assert.AreEqual(80, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_absolute_layout_width_height_start_top_end_bottom()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.PositionType = CSSPositionType.Absolute;
+ root_child0.SetPosition(CSSEdge.Start, 10);
+ root_child0.SetPosition(CSSEdge.Top, 10);
+ root_child0.SetPosition(CSSEdge.End, 10);
+ root_child0.SetPosition(CSSEdge.Bottom, 10);
+ root_child0.StyleWidth = 10;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(80, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_do_not_clamp_height_of_absolute_node_to_height_of_its_overflow_hidden_parent()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.Overflow = CSSOverflow.Hidden;
+ root.StyleWidth = 50;
+ root.StyleHeight = 50;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.PositionType = CSSPositionType.Absolute;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child0_child0 = new CSSNode();
+ root_child0_child0.StyleWidth = 100;
+ root_child0_child0.StyleHeight = 100;
+ root_child0.Insert(0, root_child0_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(50, root.LayoutWidth);
+ Assert.AreEqual(50, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0_child0.LayoutX);
+ Assert.AreEqual(0, root_child0_child0.LayoutY);
+ Assert.AreEqual(100, root_child0_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(50, root.LayoutWidth);
+ Assert.AreEqual(50, root.LayoutHeight);
+
+ Assert.AreEqual(-50, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0_child0.LayoutX);
+ Assert.AreEqual(0, root_child0_child0.LayoutY);
+ Assert.AreEqual(100, root_child0_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0_child0.LayoutHeight);
+ }
+
+ }
+}
diff --git a/csharp/tests/Facebook.CSSLayout/CSSLayoutAlignContentTest.cs b/csharp/tests/Facebook.CSSLayout/CSSLayoutAlignContentTest.cs
new file mode 100644
index 00000000..4ceef498
--- /dev/null
+++ b/csharp/tests/Facebook.CSSLayout/CSSLayoutAlignContentTest.cs
@@ -0,0 +1,450 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+ *
+ */
+
+using System;
+using NUnit.Framework;
+
+namespace Facebook.CSSLayout
+{
+ [TestFixture]
+ public class CSSLayoutAlignContentTest
+ {
+ [Test]
+ public void Test_align_content_flex_start()
+ {
+ CSSNode root = new CSSNode();
+ root.Wrap = CSSWrap.Wrap;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 50;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 50;
+ root_child1.StyleHeight = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 50;
+ root_child2.StyleHeight = 10;
+ root.Insert(2, root_child2);
+
+ CSSNode root_child3 = new CSSNode();
+ root_child3.StyleWidth = 50;
+ root_child3.StyleHeight = 10;
+ root.Insert(3, root_child3);
+
+ CSSNode root_child4 = new CSSNode();
+ root_child4.StyleWidth = 50;
+ root_child4.StyleHeight = 10;
+ root.Insert(4, root_child4);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(10, root_child1.LayoutY);
+ Assert.AreEqual(50, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(20, root_child2.LayoutY);
+ Assert.AreEqual(50, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+
+ Assert.AreEqual(0, root_child3.LayoutX);
+ Assert.AreEqual(30, root_child3.LayoutY);
+ Assert.AreEqual(50, root_child3.LayoutWidth);
+ Assert.AreEqual(10, root_child3.LayoutHeight);
+
+ Assert.AreEqual(0, root_child4.LayoutX);
+ Assert.AreEqual(40, root_child4.LayoutY);
+ Assert.AreEqual(50, root_child4.LayoutWidth);
+ Assert.AreEqual(10, root_child4.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(50, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(50, root_child1.LayoutX);
+ Assert.AreEqual(10, root_child1.LayoutY);
+ Assert.AreEqual(50, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(50, root_child2.LayoutX);
+ Assert.AreEqual(20, root_child2.LayoutY);
+ Assert.AreEqual(50, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+
+ Assert.AreEqual(50, root_child3.LayoutX);
+ Assert.AreEqual(30, root_child3.LayoutY);
+ Assert.AreEqual(50, root_child3.LayoutWidth);
+ Assert.AreEqual(10, root_child3.LayoutHeight);
+
+ Assert.AreEqual(50, root_child4.LayoutX);
+ Assert.AreEqual(40, root_child4.LayoutY);
+ Assert.AreEqual(50, root_child4.LayoutWidth);
+ Assert.AreEqual(10, root_child4.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_align_content_flex_end()
+ {
+ CSSNode root = new CSSNode();
+ root.AlignContent = CSSAlign.FlexEnd;
+ root.Wrap = CSSWrap.Wrap;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 50;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 50;
+ root_child1.StyleHeight = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 50;
+ root_child2.StyleHeight = 10;
+ root.Insert(2, root_child2);
+
+ CSSNode root_child3 = new CSSNode();
+ root_child3.StyleWidth = 50;
+ root_child3.StyleHeight = 10;
+ root.Insert(3, root_child3);
+
+ CSSNode root_child4 = new CSSNode();
+ root_child4.StyleWidth = 50;
+ root_child4.StyleHeight = 10;
+ root.Insert(4, root_child4);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(10, root_child1.LayoutY);
+ Assert.AreEqual(50, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(20, root_child2.LayoutY);
+ Assert.AreEqual(50, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+
+ Assert.AreEqual(0, root_child3.LayoutX);
+ Assert.AreEqual(30, root_child3.LayoutY);
+ Assert.AreEqual(50, root_child3.LayoutWidth);
+ Assert.AreEqual(10, root_child3.LayoutHeight);
+
+ Assert.AreEqual(0, root_child4.LayoutX);
+ Assert.AreEqual(40, root_child4.LayoutY);
+ Assert.AreEqual(50, root_child4.LayoutWidth);
+ Assert.AreEqual(10, root_child4.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(50, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(50, root_child1.LayoutX);
+ Assert.AreEqual(10, root_child1.LayoutY);
+ Assert.AreEqual(50, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(50, root_child2.LayoutX);
+ Assert.AreEqual(20, root_child2.LayoutY);
+ Assert.AreEqual(50, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+
+ Assert.AreEqual(50, root_child3.LayoutX);
+ Assert.AreEqual(30, root_child3.LayoutY);
+ Assert.AreEqual(50, root_child3.LayoutWidth);
+ Assert.AreEqual(10, root_child3.LayoutHeight);
+
+ Assert.AreEqual(50, root_child4.LayoutX);
+ Assert.AreEqual(40, root_child4.LayoutY);
+ Assert.AreEqual(50, root_child4.LayoutWidth);
+ Assert.AreEqual(10, root_child4.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_align_content_center()
+ {
+ CSSNode root = new CSSNode();
+ root.AlignContent = CSSAlign.Center;
+ root.Wrap = CSSWrap.Wrap;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 50;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 50;
+ root_child1.StyleHeight = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 50;
+ root_child2.StyleHeight = 10;
+ root.Insert(2, root_child2);
+
+ CSSNode root_child3 = new CSSNode();
+ root_child3.StyleWidth = 50;
+ root_child3.StyleHeight = 10;
+ root.Insert(3, root_child3);
+
+ CSSNode root_child4 = new CSSNode();
+ root_child4.StyleWidth = 50;
+ root_child4.StyleHeight = 10;
+ root.Insert(4, root_child4);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(10, root_child1.LayoutY);
+ Assert.AreEqual(50, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(20, root_child2.LayoutY);
+ Assert.AreEqual(50, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+
+ Assert.AreEqual(0, root_child3.LayoutX);
+ Assert.AreEqual(30, root_child3.LayoutY);
+ Assert.AreEqual(50, root_child3.LayoutWidth);
+ Assert.AreEqual(10, root_child3.LayoutHeight);
+
+ Assert.AreEqual(0, root_child4.LayoutX);
+ Assert.AreEqual(40, root_child4.LayoutY);
+ Assert.AreEqual(50, root_child4.LayoutWidth);
+ Assert.AreEqual(10, root_child4.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(50, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(50, root_child1.LayoutX);
+ Assert.AreEqual(10, root_child1.LayoutY);
+ Assert.AreEqual(50, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(50, root_child2.LayoutX);
+ Assert.AreEqual(20, root_child2.LayoutY);
+ Assert.AreEqual(50, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+
+ Assert.AreEqual(50, root_child3.LayoutX);
+ Assert.AreEqual(30, root_child3.LayoutY);
+ Assert.AreEqual(50, root_child3.LayoutWidth);
+ Assert.AreEqual(10, root_child3.LayoutHeight);
+
+ Assert.AreEqual(50, root_child4.LayoutX);
+ Assert.AreEqual(40, root_child4.LayoutY);
+ Assert.AreEqual(50, root_child4.LayoutWidth);
+ Assert.AreEqual(10, root_child4.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_align_content_stretch()
+ {
+ CSSNode root = new CSSNode();
+ root.AlignContent = CSSAlign.Stretch;
+ root.Wrap = CSSWrap.Wrap;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 50;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 50;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 50;
+ root.Insert(2, root_child2);
+
+ CSSNode root_child3 = new CSSNode();
+ root_child3.StyleWidth = 50;
+ root.Insert(3, root_child3);
+
+ CSSNode root_child4 = new CSSNode();
+ root_child4.StyleWidth = 50;
+ root.Insert(4, root_child4);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(0, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(50, root_child1.LayoutWidth);
+ Assert.AreEqual(0, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(50, root_child2.LayoutWidth);
+ Assert.AreEqual(0, root_child2.LayoutHeight);
+
+ Assert.AreEqual(0, root_child3.LayoutX);
+ Assert.AreEqual(0, root_child3.LayoutY);
+ Assert.AreEqual(50, root_child3.LayoutWidth);
+ Assert.AreEqual(0, root_child3.LayoutHeight);
+
+ Assert.AreEqual(0, root_child4.LayoutX);
+ Assert.AreEqual(0, root_child4.LayoutY);
+ Assert.AreEqual(50, root_child4.LayoutWidth);
+ Assert.AreEqual(0, root_child4.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(50, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(0, root_child0.LayoutHeight);
+
+ Assert.AreEqual(50, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(50, root_child1.LayoutWidth);
+ Assert.AreEqual(0, root_child1.LayoutHeight);
+
+ Assert.AreEqual(50, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(50, root_child2.LayoutWidth);
+ Assert.AreEqual(0, root_child2.LayoutHeight);
+
+ Assert.AreEqual(50, root_child3.LayoutX);
+ Assert.AreEqual(0, root_child3.LayoutY);
+ Assert.AreEqual(50, root_child3.LayoutWidth);
+ Assert.AreEqual(0, root_child3.LayoutHeight);
+
+ Assert.AreEqual(50, root_child4.LayoutX);
+ Assert.AreEqual(0, root_child4.LayoutY);
+ Assert.AreEqual(50, root_child4.LayoutWidth);
+ Assert.AreEqual(0, root_child4.LayoutHeight);
+ }
+
+ }
+}
diff --git a/csharp/tests/Facebook.CSSLayout/CSSLayoutAlignItemsTest.cs b/csharp/tests/Facebook.CSSLayout/CSSLayoutAlignItemsTest.cs
new file mode 100644
index 00000000..17bc2355
--- /dev/null
+++ b/csharp/tests/Facebook.CSSLayout/CSSLayoutAlignItemsTest.cs
@@ -0,0 +1,194 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+ *
+ */
+
+using System;
+using NUnit.Framework;
+
+namespace Facebook.CSSLayout
+{
+ [TestFixture]
+ public class CSSLayoutAlignItemsTest
+ {
+ [Test]
+ public void Test_align_items_stretch()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_align_items_center()
+ {
+ CSSNode root = new CSSNode();
+ root.AlignItems = CSSAlign.Center;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 10;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(45, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(45, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_align_items_flex_start()
+ {
+ CSSNode root = new CSSNode();
+ root.AlignItems = CSSAlign.FlexStart;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 10;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(90, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_align_items_flex_end()
+ {
+ CSSNode root = new CSSNode();
+ root.AlignItems = CSSAlign.FlexEnd;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 10;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(90, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ }
+}
diff --git a/csharp/tests/Facebook.CSSLayout/CSSLayoutAlignSelfTest.cs b/csharp/tests/Facebook.CSSLayout/CSSLayoutAlignSelfTest.cs
new file mode 100644
index 00000000..ba34aaa8
--- /dev/null
+++ b/csharp/tests/Facebook.CSSLayout/CSSLayoutAlignSelfTest.cs
@@ -0,0 +1,197 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+ *
+ */
+
+using System;
+using NUnit.Framework;
+
+namespace Facebook.CSSLayout
+{
+ [TestFixture]
+ public class CSSLayoutAlignSelfTest
+ {
+ [Test]
+ public void Test_align_self_center()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.AlignSelf = CSSAlign.Center;
+ root_child0.StyleWidth = 10;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(45, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(45, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_align_self_flex_end()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.AlignSelf = CSSAlign.FlexEnd;
+ root_child0.StyleWidth = 10;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(90, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_align_self_flex_start()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.AlignSelf = CSSAlign.FlexStart;
+ root_child0.StyleWidth = 10;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(90, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_align_self_flex_end_override_flex_start()
+ {
+ CSSNode root = new CSSNode();
+ root.AlignItems = CSSAlign.FlexStart;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.AlignSelf = CSSAlign.FlexEnd;
+ root_child0.StyleWidth = 10;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(90, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ }
+}
diff --git a/csharp/tests/Facebook.CSSLayout/CSSLayoutBorderTest.cs b/csharp/tests/Facebook.CSSLayout/CSSLayoutBorderTest.cs
new file mode 100644
index 00000000..2fb8edea
--- /dev/null
+++ b/csharp/tests/Facebook.CSSLayout/CSSLayoutBorderTest.cs
@@ -0,0 +1,234 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+
+
+
+ *
+ */
+
+using System;
+using NUnit.Framework;
+
+namespace Facebook.CSSLayout
+{
+ [TestFixture]
+ public class CSSLayoutBorderTest
+ {
+ [Test]
+ public void Test_border_no_size()
+ {
+ CSSNode root = new CSSNode();
+ root.SetBorder(CSSEdge.Left, 10);
+ root.SetBorder(CSSEdge.Top, 10);
+ root.SetBorder(CSSEdge.Right, 10);
+ root.SetBorder(CSSEdge.Bottom, 10);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(20, root.LayoutWidth);
+ Assert.AreEqual(20, root.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(20, root.LayoutWidth);
+ Assert.AreEqual(20, root.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_border_container_match_child()
+ {
+ CSSNode root = new CSSNode();
+ root.SetBorder(CSSEdge.Left, 10);
+ root.SetBorder(CSSEdge.Top, 10);
+ root.SetBorder(CSSEdge.Right, 10);
+ root.SetBorder(CSSEdge.Bottom, 10);
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 10;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(30, root.LayoutWidth);
+ Assert.AreEqual(30, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(30, root.LayoutWidth);
+ Assert.AreEqual(30, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_border_flex_child()
+ {
+ CSSNode root = new CSSNode();
+ root.SetBorder(CSSEdge.Left, 10);
+ root.SetBorder(CSSEdge.Top, 10);
+ root.SetBorder(CSSEdge.Right, 10);
+ root.SetBorder(CSSEdge.Bottom, 10);
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.FlexGrow = 1;
+ root_child0.StyleWidth = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(80, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(80, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(80, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_border_stretch_child()
+ {
+ CSSNode root = new CSSNode();
+ root.SetBorder(CSSEdge.Left, 10);
+ root.SetBorder(CSSEdge.Top, 10);
+ root.SetBorder(CSSEdge.Right, 10);
+ root.SetBorder(CSSEdge.Bottom, 10);
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(80, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(80, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_border_center_child()
+ {
+ CSSNode root = new CSSNode();
+ root.JustifyContent = CSSJustify.Center;
+ root.AlignItems = CSSAlign.Center;
+ root.SetBorder(CSSEdge.Start, 10);
+ root.SetBorder(CSSEdge.End, 20);
+ root.SetBorder(CSSEdge.Bottom, 20);
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 10;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(40, root_child0.LayoutX);
+ Assert.AreEqual(35, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(50, root_child0.LayoutX);
+ Assert.AreEqual(35, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ }
+}
diff --git a/csharp/tests/Facebook.CSSLayout/CSSLayoutFlexDirectionTest.cs b/csharp/tests/Facebook.CSSLayout/CSSLayoutFlexDirectionTest.cs
new file mode 100644
index 00000000..6b4a4dc1
--- /dev/null
+++ b/csharp/tests/Facebook.CSSLayout/CSSLayoutFlexDirectionTest.cs
@@ -0,0 +1,452 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+
+
+
+
+ *
+ */
+
+using System;
+using NUnit.Framework;
+
+namespace Facebook.CSSLayout
+{
+ [TestFixture]
+ public class CSSLayoutFlexDirectionTest
+ {
+ [Test]
+ public void Test_flex_direction_column_no_height()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleHeight = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleHeight = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(30, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(10, root_child1.LayoutY);
+ Assert.AreEqual(100, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(20, root_child2.LayoutY);
+ Assert.AreEqual(100, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(30, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(10, root_child1.LayoutY);
+ Assert.AreEqual(100, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(20, root_child2.LayoutY);
+ Assert.AreEqual(100, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_flex_direction_row_no_width()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(30, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ Assert.AreEqual(10, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(10, root_child1.LayoutWidth);
+ Assert.AreEqual(100, root_child1.LayoutHeight);
+
+ Assert.AreEqual(20, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(10, root_child2.LayoutWidth);
+ Assert.AreEqual(100, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(30, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(20, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ Assert.AreEqual(10, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(10, root_child1.LayoutWidth);
+ Assert.AreEqual(100, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(10, root_child2.LayoutWidth);
+ Assert.AreEqual(100, root_child2.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_flex_direction_column()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleHeight = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleHeight = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(10, root_child1.LayoutY);
+ Assert.AreEqual(100, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(20, root_child2.LayoutY);
+ Assert.AreEqual(100, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(10, root_child1.LayoutY);
+ Assert.AreEqual(100, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(20, root_child2.LayoutY);
+ Assert.AreEqual(100, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_flex_direction_row()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ Assert.AreEqual(10, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(10, root_child1.LayoutWidth);
+ Assert.AreEqual(100, root_child1.LayoutHeight);
+
+ Assert.AreEqual(20, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(10, root_child2.LayoutWidth);
+ Assert.AreEqual(100, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(90, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ Assert.AreEqual(80, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(10, root_child1.LayoutWidth);
+ Assert.AreEqual(100, root_child1.LayoutHeight);
+
+ Assert.AreEqual(70, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(10, root_child2.LayoutWidth);
+ Assert.AreEqual(100, root_child2.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_flex_direction_column_reverse()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.ColumnReverse;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleHeight = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleHeight = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(90, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(80, root_child1.LayoutY);
+ Assert.AreEqual(100, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(70, root_child2.LayoutY);
+ Assert.AreEqual(100, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(90, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(80, root_child1.LayoutY);
+ Assert.AreEqual(100, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(70, root_child2.LayoutY);
+ Assert.AreEqual(100, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_flex_direction_row_reverse()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.RowReverse;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(90, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ Assert.AreEqual(80, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(10, root_child1.LayoutWidth);
+ Assert.AreEqual(100, root_child1.LayoutHeight);
+
+ Assert.AreEqual(70, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(10, root_child2.LayoutWidth);
+ Assert.AreEqual(100, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ Assert.AreEqual(10, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(10, root_child1.LayoutWidth);
+ Assert.AreEqual(100, root_child1.LayoutHeight);
+
+ Assert.AreEqual(20, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(10, root_child2.LayoutWidth);
+ Assert.AreEqual(100, root_child2.LayoutHeight);
+ }
+
+ }
+}
diff --git a/csharp/tests/Facebook.CSSLayout/CSSLayoutFlexTest.cs b/csharp/tests/Facebook.CSSLayout/CSSLayoutFlexTest.cs
new file mode 100644
index 00000000..90c99330
--- /dev/null
+++ b/csharp/tests/Facebook.CSSLayout/CSSLayoutFlexTest.cs
@@ -0,0 +1,403 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+
+
+
+
+ *
+ */
+
+using System;
+using NUnit.Framework;
+
+namespace Facebook.CSSLayout
+{
+ [TestFixture]
+ public class CSSLayoutFlexTest
+ {
+ [Test]
+ public void Test_flex_basis_flex_grow_column()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.FlexGrow = 1;
+ root_child0.FlexBasis = 50;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.FlexGrow = 1;
+ root.Insert(1, root_child1);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(75, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(75, root_child1.LayoutY);
+ Assert.AreEqual(100, root_child1.LayoutWidth);
+ Assert.AreEqual(25, root_child1.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(75, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(75, root_child1.LayoutY);
+ Assert.AreEqual(100, root_child1.LayoutWidth);
+ Assert.AreEqual(25, root_child1.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_flex_basis_flex_grow_row()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.FlexGrow = 1;
+ root_child0.FlexBasis = 50;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.FlexGrow = 1;
+ root.Insert(1, root_child1);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(75, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ Assert.AreEqual(75, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(25, root_child1.LayoutWidth);
+ Assert.AreEqual(100, root_child1.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(25, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(75, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(25, root_child1.LayoutWidth);
+ Assert.AreEqual(100, root_child1.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_flex_basis_flex_shrink_column()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.FlexShrink = 1;
+ root_child0.FlexBasis = 100;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.FlexBasis = 50;
+ root.Insert(1, root_child1);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(50, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(50, root_child1.LayoutY);
+ Assert.AreEqual(100, root_child1.LayoutWidth);
+ Assert.AreEqual(50, root_child1.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(50, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(50, root_child1.LayoutY);
+ Assert.AreEqual(100, root_child1.LayoutWidth);
+ Assert.AreEqual(50, root_child1.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_flex_basis_flex_shrink_row()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.FlexShrink = 1;
+ root_child0.FlexBasis = 100;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.FlexBasis = 50;
+ root.Insert(1, root_child1);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ Assert.AreEqual(50, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(50, root_child1.LayoutWidth);
+ Assert.AreEqual(100, root_child1.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(50, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(50, root_child1.LayoutWidth);
+ Assert.AreEqual(100, root_child1.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_flex_shrink_to_zero()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleHeight = 75;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 50;
+ root_child0.StyleHeight = 50;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.FlexShrink = 1;
+ root_child1.StyleWidth = 50;
+ root_child1.StyleHeight = 50;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 50;
+ root_child2.StyleHeight = 50;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(50, root.LayoutWidth);
+ Assert.AreEqual(75, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(50, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(50, root_child1.LayoutY);
+ Assert.AreEqual(50, root_child1.LayoutWidth);
+ Assert.AreEqual(0, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(50, root_child2.LayoutY);
+ Assert.AreEqual(50, root_child2.LayoutWidth);
+ Assert.AreEqual(50, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(50, root.LayoutWidth);
+ Assert.AreEqual(75, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(50, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(50, root_child1.LayoutY);
+ Assert.AreEqual(50, root_child1.LayoutWidth);
+ Assert.AreEqual(0, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(50, root_child2.LayoutY);
+ Assert.AreEqual(50, root_child2.LayoutWidth);
+ Assert.AreEqual(50, root_child2.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_flex_basis_overrides_main_size()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.FlexGrow = 1;
+ root_child0.FlexBasis = 50;
+ root_child0.StyleHeight = 20;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.FlexGrow = 1;
+ root_child1.StyleHeight = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.FlexGrow = 1;
+ root_child2.StyleHeight = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(60, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(60, root_child1.LayoutY);
+ Assert.AreEqual(100, root_child1.LayoutWidth);
+ Assert.AreEqual(20, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(80, root_child2.LayoutY);
+ Assert.AreEqual(100, root_child2.LayoutWidth);
+ Assert.AreEqual(20, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(60, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(60, root_child1.LayoutY);
+ Assert.AreEqual(100, root_child1.LayoutWidth);
+ Assert.AreEqual(20, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(80, root_child2.LayoutY);
+ Assert.AreEqual(100, root_child2.LayoutWidth);
+ Assert.AreEqual(20, root_child2.LayoutHeight);
+ }
+
+ }
+}
diff --git a/csharp/tests/Facebook.CSSLayout/CSSLayoutFlexWrapTest.cs b/csharp/tests/Facebook.CSSLayout/CSSLayoutFlexWrapTest.cs
new file mode 100644
index 00000000..2a0b3f8c
--- /dev/null
+++ b/csharp/tests/Facebook.CSSLayout/CSSLayoutFlexWrapTest.cs
@@ -0,0 +1,389 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+ *
+ */
+
+using System;
+using NUnit.Framework;
+
+namespace Facebook.CSSLayout
+{
+ [TestFixture]
+ public class CSSLayoutFlexWrapTest
+ {
+ [Test]
+ public void Test_wrap_column()
+ {
+ CSSNode root = new CSSNode();
+ root.Wrap = CSSWrap.Wrap;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 30;
+ root_child0.StyleHeight = 30;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 30;
+ root_child1.StyleHeight = 30;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 30;
+ root_child2.StyleHeight = 30;
+ root.Insert(2, root_child2);
+
+ CSSNode root_child3 = new CSSNode();
+ root_child3.StyleWidth = 30;
+ root_child3.StyleHeight = 30;
+ root.Insert(3, root_child3);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(60, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(30, root_child0.LayoutWidth);
+ Assert.AreEqual(30, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(30, root_child1.LayoutY);
+ Assert.AreEqual(30, root_child1.LayoutWidth);
+ Assert.AreEqual(30, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(60, root_child2.LayoutY);
+ Assert.AreEqual(30, root_child2.LayoutWidth);
+ Assert.AreEqual(30, root_child2.LayoutHeight);
+
+ Assert.AreEqual(30, root_child3.LayoutX);
+ Assert.AreEqual(0, root_child3.LayoutY);
+ Assert.AreEqual(30, root_child3.LayoutWidth);
+ Assert.AreEqual(30, root_child3.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(60, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(30, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(30, root_child0.LayoutWidth);
+ Assert.AreEqual(30, root_child0.LayoutHeight);
+
+ Assert.AreEqual(30, root_child1.LayoutX);
+ Assert.AreEqual(30, root_child1.LayoutY);
+ Assert.AreEqual(30, root_child1.LayoutWidth);
+ Assert.AreEqual(30, root_child1.LayoutHeight);
+
+ Assert.AreEqual(30, root_child2.LayoutX);
+ Assert.AreEqual(60, root_child2.LayoutY);
+ Assert.AreEqual(30, root_child2.LayoutWidth);
+ Assert.AreEqual(30, root_child2.LayoutHeight);
+
+ Assert.AreEqual(0, root_child3.LayoutX);
+ Assert.AreEqual(0, root_child3.LayoutY);
+ Assert.AreEqual(30, root_child3.LayoutWidth);
+ Assert.AreEqual(30, root_child3.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_wrap_row()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.Wrap = CSSWrap.Wrap;
+ root.StyleWidth = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 30;
+ root_child0.StyleHeight = 30;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 30;
+ root_child1.StyleHeight = 30;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 30;
+ root_child2.StyleHeight = 30;
+ root.Insert(2, root_child2);
+
+ CSSNode root_child3 = new CSSNode();
+ root_child3.StyleWidth = 30;
+ root_child3.StyleHeight = 30;
+ root.Insert(3, root_child3);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(60, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(30, root_child0.LayoutWidth);
+ Assert.AreEqual(30, root_child0.LayoutHeight);
+
+ Assert.AreEqual(30, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(30, root_child1.LayoutWidth);
+ Assert.AreEqual(30, root_child1.LayoutHeight);
+
+ Assert.AreEqual(60, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(30, root_child2.LayoutWidth);
+ Assert.AreEqual(30, root_child2.LayoutHeight);
+
+ Assert.AreEqual(0, root_child3.LayoutX);
+ Assert.AreEqual(30, root_child3.LayoutY);
+ Assert.AreEqual(30, root_child3.LayoutWidth);
+ Assert.AreEqual(30, root_child3.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(60, root.LayoutHeight);
+
+ Assert.AreEqual(70, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(30, root_child0.LayoutWidth);
+ Assert.AreEqual(30, root_child0.LayoutHeight);
+
+ Assert.AreEqual(40, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(30, root_child1.LayoutWidth);
+ Assert.AreEqual(30, root_child1.LayoutHeight);
+
+ Assert.AreEqual(10, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(30, root_child2.LayoutWidth);
+ Assert.AreEqual(30, root_child2.LayoutHeight);
+
+ Assert.AreEqual(70, root_child3.LayoutX);
+ Assert.AreEqual(30, root_child3.LayoutY);
+ Assert.AreEqual(30, root_child3.LayoutWidth);
+ Assert.AreEqual(30, root_child3.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_wrap_row_align_items_flex_end()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.AlignItems = CSSAlign.FlexEnd;
+ root.Wrap = CSSWrap.Wrap;
+ root.StyleWidth = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 30;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 30;
+ root_child1.StyleHeight = 20;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 30;
+ root_child2.StyleHeight = 30;
+ root.Insert(2, root_child2);
+
+ CSSNode root_child3 = new CSSNode();
+ root_child3.StyleWidth = 30;
+ root_child3.StyleHeight = 30;
+ root.Insert(3, root_child3);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(60, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(20, root_child0.LayoutY);
+ Assert.AreEqual(30, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(30, root_child1.LayoutX);
+ Assert.AreEqual(10, root_child1.LayoutY);
+ Assert.AreEqual(30, root_child1.LayoutWidth);
+ Assert.AreEqual(20, root_child1.LayoutHeight);
+
+ Assert.AreEqual(60, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(30, root_child2.LayoutWidth);
+ Assert.AreEqual(30, root_child2.LayoutHeight);
+
+ Assert.AreEqual(0, root_child3.LayoutX);
+ Assert.AreEqual(30, root_child3.LayoutY);
+ Assert.AreEqual(30, root_child3.LayoutWidth);
+ Assert.AreEqual(30, root_child3.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(60, root.LayoutHeight);
+
+ Assert.AreEqual(70, root_child0.LayoutX);
+ Assert.AreEqual(20, root_child0.LayoutY);
+ Assert.AreEqual(30, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(40, root_child1.LayoutX);
+ Assert.AreEqual(10, root_child1.LayoutY);
+ Assert.AreEqual(30, root_child1.LayoutWidth);
+ Assert.AreEqual(20, root_child1.LayoutHeight);
+
+ Assert.AreEqual(10, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(30, root_child2.LayoutWidth);
+ Assert.AreEqual(30, root_child2.LayoutHeight);
+
+ Assert.AreEqual(70, root_child3.LayoutX);
+ Assert.AreEqual(30, root_child3.LayoutY);
+ Assert.AreEqual(30, root_child3.LayoutWidth);
+ Assert.AreEqual(30, root_child3.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_wrap_row_align_items_center()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.AlignItems = CSSAlign.Center;
+ root.Wrap = CSSWrap.Wrap;
+ root.StyleWidth = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 30;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 30;
+ root_child1.StyleHeight = 20;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 30;
+ root_child2.StyleHeight = 30;
+ root.Insert(2, root_child2);
+
+ CSSNode root_child3 = new CSSNode();
+ root_child3.StyleWidth = 30;
+ root_child3.StyleHeight = 30;
+ root.Insert(3, root_child3);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(60, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(30, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(30, root_child1.LayoutX);
+ Assert.AreEqual(5, root_child1.LayoutY);
+ Assert.AreEqual(30, root_child1.LayoutWidth);
+ Assert.AreEqual(20, root_child1.LayoutHeight);
+
+ Assert.AreEqual(60, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(30, root_child2.LayoutWidth);
+ Assert.AreEqual(30, root_child2.LayoutHeight);
+
+ Assert.AreEqual(0, root_child3.LayoutX);
+ Assert.AreEqual(30, root_child3.LayoutY);
+ Assert.AreEqual(30, root_child3.LayoutWidth);
+ Assert.AreEqual(30, root_child3.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(60, root.LayoutHeight);
+
+ Assert.AreEqual(70, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(30, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(40, root_child1.LayoutX);
+ Assert.AreEqual(5, root_child1.LayoutY);
+ Assert.AreEqual(30, root_child1.LayoutWidth);
+ Assert.AreEqual(20, root_child1.LayoutHeight);
+
+ Assert.AreEqual(10, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(30, root_child2.LayoutWidth);
+ Assert.AreEqual(30, root_child2.LayoutHeight);
+
+ Assert.AreEqual(70, root_child3.LayoutX);
+ Assert.AreEqual(30, root_child3.LayoutY);
+ Assert.AreEqual(30, root_child3.LayoutWidth);
+ Assert.AreEqual(30, root_child3.LayoutHeight);
+ }
+
+ }
+}
diff --git a/csharp/tests/Facebook.CSSLayout/CSSLayoutJustifyContentTest.cs b/csharp/tests/Facebook.CSSLayout/CSSLayoutJustifyContentTest.cs
new file mode 100644
index 00000000..b1368e8e
--- /dev/null
+++ b/csharp/tests/Facebook.CSSLayout/CSSLayoutJustifyContentTest.cs
@@ -0,0 +1,746 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ *
+ */
+
+using System;
+using NUnit.Framework;
+
+namespace Facebook.CSSLayout
+{
+ [TestFixture]
+ public class CSSLayoutJustifyContentTest
+ {
+ [Test]
+ public void Test_justify_content_row_flex_start()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.StyleWidth = 102;
+ root.StyleHeight = 102;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(102, root_child0.LayoutHeight);
+
+ Assert.AreEqual(10, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(10, root_child1.LayoutWidth);
+ Assert.AreEqual(102, root_child1.LayoutHeight);
+
+ Assert.AreEqual(20, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(10, root_child2.LayoutWidth);
+ Assert.AreEqual(102, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(92, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(102, root_child0.LayoutHeight);
+
+ Assert.AreEqual(82, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(10, root_child1.LayoutWidth);
+ Assert.AreEqual(102, root_child1.LayoutHeight);
+
+ Assert.AreEqual(72, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(10, root_child2.LayoutWidth);
+ Assert.AreEqual(102, root_child2.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_justify_content_row_flex_end()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.JustifyContent = CSSJustify.FlexEnd;
+ root.StyleWidth = 102;
+ root.StyleHeight = 102;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(72, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(102, root_child0.LayoutHeight);
+
+ Assert.AreEqual(82, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(10, root_child1.LayoutWidth);
+ Assert.AreEqual(102, root_child1.LayoutHeight);
+
+ Assert.AreEqual(92, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(10, root_child2.LayoutWidth);
+ Assert.AreEqual(102, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(20, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(102, root_child0.LayoutHeight);
+
+ Assert.AreEqual(10, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(10, root_child1.LayoutWidth);
+ Assert.AreEqual(102, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(10, root_child2.LayoutWidth);
+ Assert.AreEqual(102, root_child2.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_justify_content_row_center()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.JustifyContent = CSSJustify.Center;
+ root.StyleWidth = 102;
+ root.StyleHeight = 102;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(36, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(102, root_child0.LayoutHeight);
+
+ Assert.AreEqual(46, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(10, root_child1.LayoutWidth);
+ Assert.AreEqual(102, root_child1.LayoutHeight);
+
+ Assert.AreEqual(56, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(10, root_child2.LayoutWidth);
+ Assert.AreEqual(102, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(56, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(102, root_child0.LayoutHeight);
+
+ Assert.AreEqual(46, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(10, root_child1.LayoutWidth);
+ Assert.AreEqual(102, root_child1.LayoutHeight);
+
+ Assert.AreEqual(36, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(10, root_child2.LayoutWidth);
+ Assert.AreEqual(102, root_child2.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_justify_content_row_space_between()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.JustifyContent = CSSJustify.SpaceBetween;
+ root.StyleWidth = 102;
+ root.StyleHeight = 102;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(102, root_child0.LayoutHeight);
+
+ Assert.AreEqual(46, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(10, root_child1.LayoutWidth);
+ Assert.AreEqual(102, root_child1.LayoutHeight);
+
+ Assert.AreEqual(92, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(10, root_child2.LayoutWidth);
+ Assert.AreEqual(102, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(92, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(102, root_child0.LayoutHeight);
+
+ Assert.AreEqual(46, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(10, root_child1.LayoutWidth);
+ Assert.AreEqual(102, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(10, root_child2.LayoutWidth);
+ Assert.AreEqual(102, root_child2.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_justify_content_row_space_around()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.JustifyContent = CSSJustify.SpaceAround;
+ root.StyleWidth = 102;
+ root.StyleHeight = 102;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(12, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(102, root_child0.LayoutHeight);
+
+ Assert.AreEqual(46, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(10, root_child1.LayoutWidth);
+ Assert.AreEqual(102, root_child1.LayoutHeight);
+
+ Assert.AreEqual(80, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(10, root_child2.LayoutWidth);
+ Assert.AreEqual(102, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(80, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(102, root_child0.LayoutHeight);
+
+ Assert.AreEqual(46, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(10, root_child1.LayoutWidth);
+ Assert.AreEqual(102, root_child1.LayoutHeight);
+
+ Assert.AreEqual(12, root_child2.LayoutX);
+ Assert.AreEqual(0, root_child2.LayoutY);
+ Assert.AreEqual(10, root_child2.LayoutWidth);
+ Assert.AreEqual(102, root_child2.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_justify_content_column_flex_start()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 102;
+ root.StyleHeight = 102;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleHeight = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(102, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(10, root_child1.LayoutY);
+ Assert.AreEqual(102, root_child1.LayoutWidth);
+ Assert.AreEqual(0, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(10, root_child2.LayoutY);
+ Assert.AreEqual(102, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(102, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(10, root_child1.LayoutY);
+ Assert.AreEqual(102, root_child1.LayoutWidth);
+ Assert.AreEqual(0, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(10, root_child2.LayoutY);
+ Assert.AreEqual(102, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_justify_content_column_flex_end()
+ {
+ CSSNode root = new CSSNode();
+ root.JustifyContent = CSSJustify.FlexEnd;
+ root.StyleWidth = 102;
+ root.StyleHeight = 102;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleHeight = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleHeight = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(72, root_child0.LayoutY);
+ Assert.AreEqual(102, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(82, root_child1.LayoutY);
+ Assert.AreEqual(102, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(92, root_child2.LayoutY);
+ Assert.AreEqual(102, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(72, root_child0.LayoutY);
+ Assert.AreEqual(102, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(82, root_child1.LayoutY);
+ Assert.AreEqual(102, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(92, root_child2.LayoutY);
+ Assert.AreEqual(102, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_justify_content_column_center()
+ {
+ CSSNode root = new CSSNode();
+ root.JustifyContent = CSSJustify.Center;
+ root.StyleWidth = 102;
+ root.StyleHeight = 102;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleHeight = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleHeight = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(36, root_child0.LayoutY);
+ Assert.AreEqual(102, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(46, root_child1.LayoutY);
+ Assert.AreEqual(102, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(56, root_child2.LayoutY);
+ Assert.AreEqual(102, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(36, root_child0.LayoutY);
+ Assert.AreEqual(102, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(46, root_child1.LayoutY);
+ Assert.AreEqual(102, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(56, root_child2.LayoutY);
+ Assert.AreEqual(102, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_justify_content_column_space_between()
+ {
+ CSSNode root = new CSSNode();
+ root.JustifyContent = CSSJustify.SpaceBetween;
+ root.StyleWidth = 102;
+ root.StyleHeight = 102;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleHeight = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleHeight = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(102, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(46, root_child1.LayoutY);
+ Assert.AreEqual(102, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(92, root_child2.LayoutY);
+ Assert.AreEqual(102, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(102, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(46, root_child1.LayoutY);
+ Assert.AreEqual(102, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(92, root_child2.LayoutY);
+ Assert.AreEqual(102, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_justify_content_column_space_around()
+ {
+ CSSNode root = new CSSNode();
+ root.JustifyContent = CSSJustify.SpaceAround;
+ root.StyleWidth = 102;
+ root.StyleHeight = 102;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleHeight = 10;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleHeight = 10;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(12, root_child0.LayoutY);
+ Assert.AreEqual(102, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(46, root_child1.LayoutY);
+ Assert.AreEqual(102, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(80, root_child2.LayoutY);
+ Assert.AreEqual(102, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(102, root.LayoutWidth);
+ Assert.AreEqual(102, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(12, root_child0.LayoutY);
+ Assert.AreEqual(102, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(46, root_child1.LayoutY);
+ Assert.AreEqual(102, root_child1.LayoutWidth);
+ Assert.AreEqual(10, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(80, root_child2.LayoutY);
+ Assert.AreEqual(102, root_child2.LayoutWidth);
+ Assert.AreEqual(10, root_child2.LayoutHeight);
+ }
+
+ }
+}
diff --git a/csharp/tests/Facebook.CSSLayout/CSSLayoutMarginTest.cs b/csharp/tests/Facebook.CSSLayout/CSSLayoutMarginTest.cs
new file mode 100644
index 00000000..7e7955ea
--- /dev/null
+++ b/csharp/tests/Facebook.CSSLayout/CSSLayoutMarginTest.cs
@@ -0,0 +1,479 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ *
+ */
+
+using System;
+using NUnit.Framework;
+
+namespace Facebook.CSSLayout
+{
+ [TestFixture]
+ public class CSSLayoutMarginTest
+ {
+ [Test]
+ public void Test_margin_start()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.SetMargin(CSSEdge.Start, 10);
+ root_child0.StyleWidth = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(80, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_margin_top()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.SetMargin(CSSEdge.Top, 10);
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_margin_end()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.JustifyContent = CSSJustify.FlexEnd;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.SetMargin(CSSEdge.End, 10);
+ root_child0.StyleWidth = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(80, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_margin_bottom()
+ {
+ CSSNode root = new CSSNode();
+ root.JustifyContent = CSSJustify.FlexEnd;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.SetMargin(CSSEdge.Bottom, 10);
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(80, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(80, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_margin_and_flex_row()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.FlexGrow = 1;
+ root_child0.SetMargin(CSSEdge.Start, 10);
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(90, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(90, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_margin_and_flex_column()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.FlexGrow = 1;
+ root_child0.SetMargin(CSSEdge.Top, 10);
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(90, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(90, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_margin_and_stretch_row()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.FlexGrow = 1;
+ root_child0.SetMargin(CSSEdge.Top, 10);
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(90, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(90, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_margin_and_stretch_column()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.FlexGrow = 1;
+ root_child0.SetMargin(CSSEdge.Start, 10);
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(90, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(90, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_margin_with_sibling_row()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.FlexGrow = 1;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.FlexGrow = 1;
+ root.Insert(1, root_child1);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ Assert.AreEqual(50, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(50, root_child1.LayoutWidth);
+ Assert.AreEqual(100, root_child1.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(50, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(50, root_child1.LayoutWidth);
+ Assert.AreEqual(100, root_child1.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_margin_with_sibling_column()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.FlexGrow = 1;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.FlexGrow = 1;
+ root.Insert(1, root_child1);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(50, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(50, root_child1.LayoutY);
+ Assert.AreEqual(100, root_child1.LayoutWidth);
+ Assert.AreEqual(50, root_child1.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(50, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(50, root_child1.LayoutY);
+ Assert.AreEqual(100, root_child1.LayoutWidth);
+ Assert.AreEqual(50, root_child1.LayoutHeight);
+ }
+
+ }
+}
diff --git a/csharp/tests/Facebook.CSSLayout/CSSLayoutMinMaxDimensionTest.cs b/csharp/tests/Facebook.CSSLayout/CSSLayoutMinMaxDimensionTest.cs
new file mode 100644
index 00000000..73a2a84f
--- /dev/null
+++ b/csharp/tests/Facebook.CSSLayout/CSSLayoutMinMaxDimensionTest.cs
@@ -0,0 +1,387 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+
+
+
+
+
+
+ *
+ */
+
+using System;
+using NUnit.Framework;
+
+namespace Facebook.CSSLayout
+{
+ [TestFixture]
+ public class CSSLayoutMinMaxDimensionTest
+ {
+ [Test]
+ public void Test_max_width()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleMaxWidth = 50;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(50, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_max_height()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 10;
+ root_child0.StyleMaxHeight = 50;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(50, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(90, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(50, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_min_height()
+ {
+ CSSNode root = new CSSNode();
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.FlexGrow = 1;
+ root_child0.StyleMinHeight = 60;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.FlexGrow = 1;
+ root.Insert(1, root_child1);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(80, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(80, root_child1.LayoutY);
+ Assert.AreEqual(100, root_child1.LayoutWidth);
+ Assert.AreEqual(20, root_child1.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(100, root_child0.LayoutWidth);
+ Assert.AreEqual(80, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(80, root_child1.LayoutY);
+ Assert.AreEqual(100, root_child1.LayoutWidth);
+ Assert.AreEqual(20, root_child1.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_min_width()
+ {
+ CSSNode root = new CSSNode();
+ root.FlexDirection = CSSFlexDirection.Row;
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.FlexGrow = 1;
+ root_child0.StyleMinWidth = 60;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.FlexGrow = 1;
+ root.Insert(1, root_child1);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(80, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ Assert.AreEqual(80, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(20, root_child1.LayoutWidth);
+ Assert.AreEqual(100, root_child1.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(20, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(80, root_child0.LayoutWidth);
+ Assert.AreEqual(100, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(0, root_child1.LayoutY);
+ Assert.AreEqual(20, root_child1.LayoutWidth);
+ Assert.AreEqual(100, root_child1.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_justify_content_min_max()
+ {
+ CSSNode root = new CSSNode();
+ root.JustifyContent = CSSJustify.Center;
+ root.StyleWidth = 100;
+ root.StyleMinHeight = 100;
+ root.StyleMaxHeight = 200;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 60;
+ root_child0.StyleHeight = 60;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(20, root_child0.LayoutY);
+ Assert.AreEqual(60, root_child0.LayoutWidth);
+ Assert.AreEqual(60, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(40, root_child0.LayoutX);
+ Assert.AreEqual(20, root_child0.LayoutY);
+ Assert.AreEqual(60, root_child0.LayoutWidth);
+ Assert.AreEqual(60, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_align_items_min_max()
+ {
+ CSSNode root = new CSSNode();
+ root.AlignItems = CSSAlign.Center;
+ root.StyleMinWidth = 100;
+ root.StyleMaxWidth = 200;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 60;
+ root_child0.StyleHeight = 60;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(20, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(60, root_child0.LayoutWidth);
+ Assert.AreEqual(60, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(20, root_child0.LayoutX);
+ Assert.AreEqual(0, root_child0.LayoutY);
+ Assert.AreEqual(60, root_child0.LayoutWidth);
+ Assert.AreEqual(60, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_justify_content_overflow_min_max()
+ {
+ CSSNode root = new CSSNode();
+ root.JustifyContent = CSSJustify.Center;
+ root.StyleMinHeight = 100;
+ root.StyleMaxHeight = 110;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 50;
+ root_child0.StyleHeight = 50;
+ root.Insert(0, root_child0);
+
+ CSSNode root_child1 = new CSSNode();
+ root_child1.StyleWidth = 50;
+ root_child1.StyleHeight = 50;
+ root.Insert(1, root_child1);
+
+ CSSNode root_child2 = new CSSNode();
+ root_child2.StyleWidth = 50;
+ root_child2.StyleHeight = 50;
+ root.Insert(2, root_child2);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(50, root.LayoutWidth);
+ Assert.AreEqual(110, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(-20, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(50, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(30, root_child1.LayoutY);
+ Assert.AreEqual(50, root_child1.LayoutWidth);
+ Assert.AreEqual(50, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(80, root_child2.LayoutY);
+ Assert.AreEqual(50, root_child2.LayoutWidth);
+ Assert.AreEqual(50, root_child2.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(50, root.LayoutWidth);
+ Assert.AreEqual(110, root.LayoutHeight);
+
+ Assert.AreEqual(0, root_child0.LayoutX);
+ Assert.AreEqual(-20, root_child0.LayoutY);
+ Assert.AreEqual(50, root_child0.LayoutWidth);
+ Assert.AreEqual(50, root_child0.LayoutHeight);
+
+ Assert.AreEqual(0, root_child1.LayoutX);
+ Assert.AreEqual(30, root_child1.LayoutY);
+ Assert.AreEqual(50, root_child1.LayoutWidth);
+ Assert.AreEqual(50, root_child1.LayoutHeight);
+
+ Assert.AreEqual(0, root_child2.LayoutX);
+ Assert.AreEqual(80, root_child2.LayoutY);
+ Assert.AreEqual(50, root_child2.LayoutWidth);
+ Assert.AreEqual(50, root_child2.LayoutHeight);
+ }
+
+ }
+}
diff --git a/csharp/tests/Facebook.CSSLayout/CSSLayoutPaddingTest.cs b/csharp/tests/Facebook.CSSLayout/CSSLayoutPaddingTest.cs
new file mode 100644
index 00000000..8ede76d2
--- /dev/null
+++ b/csharp/tests/Facebook.CSSLayout/CSSLayoutPaddingTest.cs
@@ -0,0 +1,234 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+
+
+
+ *
+ */
+
+using System;
+using NUnit.Framework;
+
+namespace Facebook.CSSLayout
+{
+ [TestFixture]
+ public class CSSLayoutPaddingTest
+ {
+ [Test]
+ public void Test_padding_no_size()
+ {
+ CSSNode root = new CSSNode();
+ root.SetPadding(CSSEdge.Left, 10);
+ root.SetPadding(CSSEdge.Top, 10);
+ root.SetPadding(CSSEdge.Right, 10);
+ root.SetPadding(CSSEdge.Bottom, 10);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(20, root.LayoutWidth);
+ Assert.AreEqual(20, root.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(20, root.LayoutWidth);
+ Assert.AreEqual(20, root.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_padding_container_match_child()
+ {
+ CSSNode root = new CSSNode();
+ root.SetPadding(CSSEdge.Left, 10);
+ root.SetPadding(CSSEdge.Top, 10);
+ root.SetPadding(CSSEdge.Right, 10);
+ root.SetPadding(CSSEdge.Bottom, 10);
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 10;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(30, root.LayoutWidth);
+ Assert.AreEqual(30, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(30, root.LayoutWidth);
+ Assert.AreEqual(30, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_padding_flex_child()
+ {
+ CSSNode root = new CSSNode();
+ root.SetPadding(CSSEdge.Left, 10);
+ root.SetPadding(CSSEdge.Top, 10);
+ root.SetPadding(CSSEdge.Right, 10);
+ root.SetPadding(CSSEdge.Bottom, 10);
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.FlexGrow = 1;
+ root_child0.StyleWidth = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(80, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(80, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(80, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_padding_stretch_child()
+ {
+ CSSNode root = new CSSNode();
+ root.SetPadding(CSSEdge.Left, 10);
+ root.SetPadding(CSSEdge.Top, 10);
+ root.SetPadding(CSSEdge.Right, 10);
+ root.SetPadding(CSSEdge.Bottom, 10);
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(80, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(10, root_child0.LayoutX);
+ Assert.AreEqual(10, root_child0.LayoutY);
+ Assert.AreEqual(80, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ [Test]
+ public void Test_padding_center_child()
+ {
+ CSSNode root = new CSSNode();
+ root.JustifyContent = CSSJustify.Center;
+ root.AlignItems = CSSAlign.Center;
+ root.SetPadding(CSSEdge.Start, 10);
+ root.SetPadding(CSSEdge.End, 20);
+ root.SetPadding(CSSEdge.Bottom, 20);
+ root.StyleWidth = 100;
+ root.StyleHeight = 100;
+
+ CSSNode root_child0 = new CSSNode();
+ root_child0.StyleWidth = 10;
+ root_child0.StyleHeight = 10;
+ root.Insert(0, root_child0);
+ root.StyleDirection = CSSDirection.LeftToRight;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(40, root_child0.LayoutX);
+ Assert.AreEqual(35, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+
+ root.StyleDirection = CSSDirection.RightToLeft;
+ root.CalculateLayout();
+
+ Assert.AreEqual(0, root.LayoutX);
+ Assert.AreEqual(0, root.LayoutY);
+ Assert.AreEqual(100, root.LayoutWidth);
+ Assert.AreEqual(100, root.LayoutHeight);
+
+ Assert.AreEqual(50, root_child0.LayoutX);
+ Assert.AreEqual(35, root_child0.LayoutY);
+ Assert.AreEqual(10, root_child0.LayoutWidth);
+ Assert.AreEqual(10, root_child0.LayoutHeight);
+ }
+
+ }
+}
diff --git a/java/tests/com/facebook/csslayout/CSSLayoutAbsolutePositionTest.java b/java/tests/com/facebook/csslayout/CSSLayoutAbsolutePositionTest.java
new file mode 100644
index 00000000..c64be24e
--- /dev/null
+++ b/java/tests/com/facebook/csslayout/CSSLayoutAbsolutePositionTest.java
@@ -0,0 +1,259 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+
+
+ *
+ */
+
+package com.facebook.csslayout;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class CSSLayoutAbsolutePositionTest {
+ @Test
+ public void test_absolute_layout_width_height_start_top() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setPositionType(CSSPositionType.ABSOLUTE);
+ root_child0.setPosition(Spacing.START, 10);
+ root_child0.setPosition(Spacing.TOP, 10);
+ root_child0.setStyleWidth(10);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(80, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_absolute_layout_width_height_end_bottom() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setPositionType(CSSPositionType.ABSOLUTE);
+ root_child0.setPosition(Spacing.END, 10);
+ root_child0.setPosition(Spacing.BOTTOM, 10);
+ root_child0.setStyleWidth(10);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(80, root_child0.getLayoutX(), 0.0f);
+ assertEquals(80, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(80, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_absolute_layout_start_top_end_bottom() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setPositionType(CSSPositionType.ABSOLUTE);
+ root_child0.setPosition(Spacing.START, 10);
+ root_child0.setPosition(Spacing.TOP, 10);
+ root_child0.setPosition(Spacing.END, 10);
+ root_child0.setPosition(Spacing.BOTTOM, 10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(80, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(80, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(80, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(80, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_absolute_layout_width_height_start_top_end_bottom() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setPositionType(CSSPositionType.ABSOLUTE);
+ root_child0.setPosition(Spacing.START, 10);
+ root_child0.setPosition(Spacing.TOP, 10);
+ root_child0.setPosition(Spacing.END, 10);
+ root_child0.setPosition(Spacing.BOTTOM, 10);
+ root_child0.setStyleWidth(10);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(80, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_do_not_clamp_height_of_absolute_node_to_height_of_its_overflow_hidden_parent() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setOverflow(CSSOverflow.HIDDEN);
+ root.setStyleWidth(50);
+ root.setStyleHeight(50);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setPositionType(CSSPositionType.ABSOLUTE);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child0_child0 = new CSSNode();
+ root_child0_child0.setStyleWidth(100);
+ root_child0_child0.setStyleHeight(100);
+ root_child0.addChildAt(root_child0_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(50, root.getLayoutWidth(), 0.0f);
+ assertEquals(50, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(50, root.getLayoutWidth(), 0.0f);
+ assertEquals(50, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(-50, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0_child0.getLayoutHeight(), 0.0f);
+ }
+
+}
diff --git a/java/tests/com/facebook/csslayout/CSSLayoutAlignContentTest.java b/java/tests/com/facebook/csslayout/CSSLayoutAlignContentTest.java
new file mode 100644
index 00000000..c8ae2f98
--- /dev/null
+++ b/java/tests/com/facebook/csslayout/CSSLayoutAlignContentTest.java
@@ -0,0 +1,444 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+ *
+ */
+
+package com.facebook.csslayout;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class CSSLayoutAlignContentTest {
+ @Test
+ public void test_align_content_flex_start() {
+ final CSSNode root = new CSSNode();
+ root.setWrap(CSSWrap.WRAP);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(50);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(50);
+ root_child1.setStyleHeight(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(50);
+ root_child2.setStyleHeight(10);
+ root.addChildAt(root_child2, 2);
+
+ final CSSNode root_child3 = new CSSNode();
+ root_child3.setStyleWidth(50);
+ root_child3.setStyleHeight(10);
+ root.addChildAt(root_child3, 3);
+
+ final CSSNode root_child4 = new CSSNode();
+ root_child4.setStyleWidth(50);
+ root_child4.setStyleHeight(10);
+ root.addChildAt(root_child4, 4);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(10, root_child1.getLayoutY(), 0.0f);
+ assertEquals(50, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(20, root_child2.getLayoutY(), 0.0f);
+ assertEquals(50, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child3.getLayoutX(), 0.0f);
+ assertEquals(30, root_child3.getLayoutY(), 0.0f);
+ assertEquals(50, root_child3.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child3.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child4.getLayoutX(), 0.0f);
+ assertEquals(40, root_child4.getLayoutY(), 0.0f);
+ assertEquals(50, root_child4.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child4.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child1.getLayoutX(), 0.0f);
+ assertEquals(10, root_child1.getLayoutY(), 0.0f);
+ assertEquals(50, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child2.getLayoutX(), 0.0f);
+ assertEquals(20, root_child2.getLayoutY(), 0.0f);
+ assertEquals(50, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child3.getLayoutX(), 0.0f);
+ assertEquals(30, root_child3.getLayoutY(), 0.0f);
+ assertEquals(50, root_child3.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child3.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child4.getLayoutX(), 0.0f);
+ assertEquals(40, root_child4.getLayoutY(), 0.0f);
+ assertEquals(50, root_child4.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child4.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_align_content_flex_end() {
+ final CSSNode root = new CSSNode();
+ root.setAlignContent(CSSAlign.FLEX_END);
+ root.setWrap(CSSWrap.WRAP);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(50);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(50);
+ root_child1.setStyleHeight(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(50);
+ root_child2.setStyleHeight(10);
+ root.addChildAt(root_child2, 2);
+
+ final CSSNode root_child3 = new CSSNode();
+ root_child3.setStyleWidth(50);
+ root_child3.setStyleHeight(10);
+ root.addChildAt(root_child3, 3);
+
+ final CSSNode root_child4 = new CSSNode();
+ root_child4.setStyleWidth(50);
+ root_child4.setStyleHeight(10);
+ root.addChildAt(root_child4, 4);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(10, root_child1.getLayoutY(), 0.0f);
+ assertEquals(50, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(20, root_child2.getLayoutY(), 0.0f);
+ assertEquals(50, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child3.getLayoutX(), 0.0f);
+ assertEquals(30, root_child3.getLayoutY(), 0.0f);
+ assertEquals(50, root_child3.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child3.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child4.getLayoutX(), 0.0f);
+ assertEquals(40, root_child4.getLayoutY(), 0.0f);
+ assertEquals(50, root_child4.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child4.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child1.getLayoutX(), 0.0f);
+ assertEquals(10, root_child1.getLayoutY(), 0.0f);
+ assertEquals(50, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child2.getLayoutX(), 0.0f);
+ assertEquals(20, root_child2.getLayoutY(), 0.0f);
+ assertEquals(50, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child3.getLayoutX(), 0.0f);
+ assertEquals(30, root_child3.getLayoutY(), 0.0f);
+ assertEquals(50, root_child3.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child3.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child4.getLayoutX(), 0.0f);
+ assertEquals(40, root_child4.getLayoutY(), 0.0f);
+ assertEquals(50, root_child4.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child4.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_align_content_center() {
+ final CSSNode root = new CSSNode();
+ root.setAlignContent(CSSAlign.CENTER);
+ root.setWrap(CSSWrap.WRAP);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(50);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(50);
+ root_child1.setStyleHeight(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(50);
+ root_child2.setStyleHeight(10);
+ root.addChildAt(root_child2, 2);
+
+ final CSSNode root_child3 = new CSSNode();
+ root_child3.setStyleWidth(50);
+ root_child3.setStyleHeight(10);
+ root.addChildAt(root_child3, 3);
+
+ final CSSNode root_child4 = new CSSNode();
+ root_child4.setStyleWidth(50);
+ root_child4.setStyleHeight(10);
+ root.addChildAt(root_child4, 4);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(10, root_child1.getLayoutY(), 0.0f);
+ assertEquals(50, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(20, root_child2.getLayoutY(), 0.0f);
+ assertEquals(50, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child3.getLayoutX(), 0.0f);
+ assertEquals(30, root_child3.getLayoutY(), 0.0f);
+ assertEquals(50, root_child3.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child3.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child4.getLayoutX(), 0.0f);
+ assertEquals(40, root_child4.getLayoutY(), 0.0f);
+ assertEquals(50, root_child4.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child4.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child1.getLayoutX(), 0.0f);
+ assertEquals(10, root_child1.getLayoutY(), 0.0f);
+ assertEquals(50, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child2.getLayoutX(), 0.0f);
+ assertEquals(20, root_child2.getLayoutY(), 0.0f);
+ assertEquals(50, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child3.getLayoutX(), 0.0f);
+ assertEquals(30, root_child3.getLayoutY(), 0.0f);
+ assertEquals(50, root_child3.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child3.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child4.getLayoutX(), 0.0f);
+ assertEquals(40, root_child4.getLayoutY(), 0.0f);
+ assertEquals(50, root_child4.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child4.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_align_content_stretch() {
+ final CSSNode root = new CSSNode();
+ root.setAlignContent(CSSAlign.STRETCH);
+ root.setWrap(CSSWrap.WRAP);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(50);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(50);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(50);
+ root.addChildAt(root_child2, 2);
+
+ final CSSNode root_child3 = new CSSNode();
+ root_child3.setStyleWidth(50);
+ root.addChildAt(root_child3, 3);
+
+ final CSSNode root_child4 = new CSSNode();
+ root_child4.setStyleWidth(50);
+ root.addChildAt(root_child4, 4);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(0, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(50, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(0, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(50, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(0, root_child2.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child3.getLayoutX(), 0.0f);
+ assertEquals(0, root_child3.getLayoutY(), 0.0f);
+ assertEquals(50, root_child3.getLayoutWidth(), 0.0f);
+ assertEquals(0, root_child3.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child4.getLayoutX(), 0.0f);
+ assertEquals(0, root_child4.getLayoutY(), 0.0f);
+ assertEquals(50, root_child4.getLayoutWidth(), 0.0f);
+ assertEquals(0, root_child4.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(0, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(50, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(0, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(50, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(0, root_child2.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child3.getLayoutX(), 0.0f);
+ assertEquals(0, root_child3.getLayoutY(), 0.0f);
+ assertEquals(50, root_child3.getLayoutWidth(), 0.0f);
+ assertEquals(0, root_child3.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child4.getLayoutX(), 0.0f);
+ assertEquals(0, root_child4.getLayoutY(), 0.0f);
+ assertEquals(50, root_child4.getLayoutWidth(), 0.0f);
+ assertEquals(0, root_child4.getLayoutHeight(), 0.0f);
+ }
+
+}
diff --git a/java/tests/com/facebook/csslayout/CSSLayoutAlignItemsTest.java b/java/tests/com/facebook/csslayout/CSSLayoutAlignItemsTest.java
new file mode 100644
index 00000000..49689901
--- /dev/null
+++ b/java/tests/com/facebook/csslayout/CSSLayoutAlignItemsTest.java
@@ -0,0 +1,188 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+ *
+ */
+
+package com.facebook.csslayout;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class CSSLayoutAlignItemsTest {
+ @Test
+ public void test_align_items_stretch() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_align_items_center() {
+ final CSSNode root = new CSSNode();
+ root.setAlignItems(CSSAlign.CENTER);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(10);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(45, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(45, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_align_items_flex_start() {
+ final CSSNode root = new CSSNode();
+ root.setAlignItems(CSSAlign.FLEX_START);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(10);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(90, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_align_items_flex_end() {
+ final CSSNode root = new CSSNode();
+ root.setAlignItems(CSSAlign.FLEX_END);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(10);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(90, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+}
diff --git a/java/tests/com/facebook/csslayout/CSSLayoutAlignSelfTest.java b/java/tests/com/facebook/csslayout/CSSLayoutAlignSelfTest.java
new file mode 100644
index 00000000..999972de
--- /dev/null
+++ b/java/tests/com/facebook/csslayout/CSSLayoutAlignSelfTest.java
@@ -0,0 +1,191 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+ *
+ */
+
+package com.facebook.csslayout;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class CSSLayoutAlignSelfTest {
+ @Test
+ public void test_align_self_center() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setAlignSelf(CSSAlign.CENTER);
+ root_child0.setStyleWidth(10);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(45, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(45, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_align_self_flex_end() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setAlignSelf(CSSAlign.FLEX_END);
+ root_child0.setStyleWidth(10);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(90, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_align_self_flex_start() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setAlignSelf(CSSAlign.FLEX_START);
+ root_child0.setStyleWidth(10);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(90, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_align_self_flex_end_override_flex_start() {
+ final CSSNode root = new CSSNode();
+ root.setAlignItems(CSSAlign.FLEX_START);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setAlignSelf(CSSAlign.FLEX_END);
+ root_child0.setStyleWidth(10);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(90, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+}
diff --git a/java/tests/com/facebook/csslayout/CSSLayoutBorderTest.java b/java/tests/com/facebook/csslayout/CSSLayoutBorderTest.java
new file mode 100644
index 00000000..ee7505e4
--- /dev/null
+++ b/java/tests/com/facebook/csslayout/CSSLayoutBorderTest.java
@@ -0,0 +1,227 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+
+
+
+ *
+ */
+
+package com.facebook.csslayout;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class CSSLayoutBorderTest {
+ @Test
+ public void test_border_no_size() {
+ final CSSNode root = new CSSNode();
+ root.setBorder(Spacing.LEFT, 10);
+ root.setBorder(Spacing.TOP, 10);
+ root.setBorder(Spacing.RIGHT, 10);
+ root.setBorder(Spacing.BOTTOM, 10);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(20, root.getLayoutWidth(), 0.0f);
+ assertEquals(20, root.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(20, root.getLayoutWidth(), 0.0f);
+ assertEquals(20, root.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_border_container_match_child() {
+ final CSSNode root = new CSSNode();
+ root.setBorder(Spacing.LEFT, 10);
+ root.setBorder(Spacing.TOP, 10);
+ root.setBorder(Spacing.RIGHT, 10);
+ root.setBorder(Spacing.BOTTOM, 10);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(10);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(30, root.getLayoutWidth(), 0.0f);
+ assertEquals(30, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(30, root.getLayoutWidth(), 0.0f);
+ assertEquals(30, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_border_flex_child() {
+ final CSSNode root = new CSSNode();
+ root.setBorder(Spacing.LEFT, 10);
+ root.setBorder(Spacing.TOP, 10);
+ root.setBorder(Spacing.RIGHT, 10);
+ root.setBorder(Spacing.BOTTOM, 10);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setFlexGrow(1);
+ root_child0.setStyleWidth(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(80, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(80, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(80, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_border_stretch_child() {
+ final CSSNode root = new CSSNode();
+ root.setBorder(Spacing.LEFT, 10);
+ root.setBorder(Spacing.TOP, 10);
+ root.setBorder(Spacing.RIGHT, 10);
+ root.setBorder(Spacing.BOTTOM, 10);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(80, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(80, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_border_center_child() {
+ final CSSNode root = new CSSNode();
+ root.setJustifyContent(CSSJustify.CENTER);
+ root.setAlignItems(CSSAlign.CENTER);
+ root.setBorder(Spacing.START, 10);
+ root.setBorder(Spacing.END, 20);
+ root.setBorder(Spacing.BOTTOM, 20);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(10);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(40, root_child0.getLayoutX(), 0.0f);
+ assertEquals(35, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child0.getLayoutX(), 0.0f);
+ assertEquals(35, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+}
diff --git a/java/tests/com/facebook/csslayout/CSSLayoutFlexDirectionTest.java b/java/tests/com/facebook/csslayout/CSSLayoutFlexDirectionTest.java
new file mode 100644
index 00000000..7d741b7c
--- /dev/null
+++ b/java/tests/com/facebook/csslayout/CSSLayoutFlexDirectionTest.java
@@ -0,0 +1,444 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+
+
+
+
+ *
+ */
+
+package com.facebook.csslayout;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class CSSLayoutFlexDirectionTest {
+ @Test
+ public void test_flex_direction_column_no_height() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleHeight(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleHeight(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(30, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(10, root_child1.getLayoutY(), 0.0f);
+ assertEquals(100, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(20, root_child2.getLayoutY(), 0.0f);
+ assertEquals(100, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(30, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(10, root_child1.getLayoutY(), 0.0f);
+ assertEquals(100, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(20, root_child2.getLayoutY(), 0.0f);
+ assertEquals(100, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_flex_direction_row_no_width() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(30, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(10, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(20, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(10, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(30, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(20, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(10, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(10, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_flex_direction_column() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleHeight(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleHeight(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(10, root_child1.getLayoutY(), 0.0f);
+ assertEquals(100, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(20, root_child2.getLayoutY(), 0.0f);
+ assertEquals(100, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(10, root_child1.getLayoutY(), 0.0f);
+ assertEquals(100, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(20, root_child2.getLayoutY(), 0.0f);
+ assertEquals(100, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_flex_direction_row() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(10, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(20, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(10, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(90, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(80, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(10, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(70, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(10, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_flex_direction_column_reverse() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.COLUMN_REVERSE);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleHeight(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleHeight(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(90, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(80, root_child1.getLayoutY(), 0.0f);
+ assertEquals(100, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(70, root_child2.getLayoutY(), 0.0f);
+ assertEquals(100, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(90, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(80, root_child1.getLayoutY(), 0.0f);
+ assertEquals(100, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(70, root_child2.getLayoutY(), 0.0f);
+ assertEquals(100, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_flex_direction_row_reverse() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW_REVERSE);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(90, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(80, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(10, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(70, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(10, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(10, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(20, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(10, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+}
diff --git a/java/tests/com/facebook/csslayout/CSSLayoutFlexTest.java b/java/tests/com/facebook/csslayout/CSSLayoutFlexTest.java
new file mode 100644
index 00000000..5056e307
--- /dev/null
+++ b/java/tests/com/facebook/csslayout/CSSLayoutFlexTest.java
@@ -0,0 +1,395 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+
+
+
+
+ *
+ */
+
+package com.facebook.csslayout;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class CSSLayoutFlexTest {
+ @Test
+ public void test_flex_basis_flex_grow_column() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setFlexGrow(1);
+ root_child0.setFlexBasis(50);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setFlexGrow(1);
+ root.addChildAt(root_child1, 1);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(75, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(75, root_child1.getLayoutY(), 0.0f);
+ assertEquals(100, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(25, root_child1.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(75, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(75, root_child1.getLayoutY(), 0.0f);
+ assertEquals(100, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(25, root_child1.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_flex_basis_flex_grow_row() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setFlexGrow(1);
+ root_child0.setFlexBasis(50);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setFlexGrow(1);
+ root.addChildAt(root_child1, 1);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(75, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(75, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(25, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child1.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(25, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(75, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(25, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child1.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_flex_basis_flex_shrink_column() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setFlexShrink(1);
+ root_child0.setFlexBasis(100);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setFlexBasis(50);
+ root.addChildAt(root_child1, 1);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(50, root_child1.getLayoutY(), 0.0f);
+ assertEquals(100, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child1.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(50, root_child1.getLayoutY(), 0.0f);
+ assertEquals(100, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child1.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_flex_basis_flex_shrink_row() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setFlexShrink(1);
+ root_child0.setFlexBasis(100);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setFlexBasis(50);
+ root.addChildAt(root_child1, 1);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(50, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child1.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(50, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child1.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_flex_shrink_to_zero() {
+ final CSSNode root = new CSSNode();
+ root.setStyleHeight(75);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(50);
+ root_child0.setStyleHeight(50);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setFlexShrink(1);
+ root_child1.setStyleWidth(50);
+ root_child1.setStyleHeight(50);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(50);
+ root_child2.setStyleHeight(50);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(50, root.getLayoutWidth(), 0.0f);
+ assertEquals(75, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(50, root_child1.getLayoutY(), 0.0f);
+ assertEquals(50, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(0, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(50, root_child2.getLayoutY(), 0.0f);
+ assertEquals(50, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(50, root.getLayoutWidth(), 0.0f);
+ assertEquals(75, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(50, root_child1.getLayoutY(), 0.0f);
+ assertEquals(50, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(0, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(50, root_child2.getLayoutY(), 0.0f);
+ assertEquals(50, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_flex_basis_overrides_main_size() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setFlexGrow(1);
+ root_child0.setFlexBasis(50);
+ root_child0.setStyleHeight(20);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setFlexGrow(1);
+ root_child1.setStyleHeight(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setFlexGrow(1);
+ root_child2.setStyleHeight(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(60, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(60, root_child1.getLayoutY(), 0.0f);
+ assertEquals(100, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(20, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(80, root_child2.getLayoutY(), 0.0f);
+ assertEquals(100, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(20, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(60, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(60, root_child1.getLayoutY(), 0.0f);
+ assertEquals(100, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(20, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(80, root_child2.getLayoutY(), 0.0f);
+ assertEquals(100, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(20, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+}
diff --git a/java/tests/com/facebook/csslayout/CSSLayoutFlexWrapTest.java b/java/tests/com/facebook/csslayout/CSSLayoutFlexWrapTest.java
new file mode 100644
index 00000000..bd4b506d
--- /dev/null
+++ b/java/tests/com/facebook/csslayout/CSSLayoutFlexWrapTest.java
@@ -0,0 +1,383 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+ *
+ */
+
+package com.facebook.csslayout;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class CSSLayoutFlexWrapTest {
+ @Test
+ public void test_wrap_column() {
+ final CSSNode root = new CSSNode();
+ root.setWrap(CSSWrap.WRAP);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(30);
+ root_child0.setStyleHeight(30);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(30);
+ root_child1.setStyleHeight(30);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(30);
+ root_child2.setStyleHeight(30);
+ root.addChildAt(root_child2, 2);
+
+ final CSSNode root_child3 = new CSSNode();
+ root_child3.setStyleWidth(30);
+ root_child3.setStyleHeight(30);
+ root.addChildAt(root_child3, 3);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(60, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(30, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(30, root_child1.getLayoutY(), 0.0f);
+ assertEquals(30, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(60, root_child2.getLayoutY(), 0.0f);
+ assertEquals(30, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child2.getLayoutHeight(), 0.0f);
+
+ assertEquals(30, root_child3.getLayoutX(), 0.0f);
+ assertEquals(0, root_child3.getLayoutY(), 0.0f);
+ assertEquals(30, root_child3.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child3.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(60, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(30, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(30, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(30, root_child1.getLayoutX(), 0.0f);
+ assertEquals(30, root_child1.getLayoutY(), 0.0f);
+ assertEquals(30, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(30, root_child2.getLayoutX(), 0.0f);
+ assertEquals(60, root_child2.getLayoutY(), 0.0f);
+ assertEquals(30, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child2.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child3.getLayoutX(), 0.0f);
+ assertEquals(0, root_child3.getLayoutY(), 0.0f);
+ assertEquals(30, root_child3.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child3.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_wrap_row() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setWrap(CSSWrap.WRAP);
+ root.setStyleWidth(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(30);
+ root_child0.setStyleHeight(30);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(30);
+ root_child1.setStyleHeight(30);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(30);
+ root_child2.setStyleHeight(30);
+ root.addChildAt(root_child2, 2);
+
+ final CSSNode root_child3 = new CSSNode();
+ root_child3.setStyleWidth(30);
+ root_child3.setStyleHeight(30);
+ root.addChildAt(root_child3, 3);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(60, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(30, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(30, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(30, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(60, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(30, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child2.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child3.getLayoutX(), 0.0f);
+ assertEquals(30, root_child3.getLayoutY(), 0.0f);
+ assertEquals(30, root_child3.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child3.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(60, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(70, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(30, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(40, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(30, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(30, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child2.getLayoutHeight(), 0.0f);
+
+ assertEquals(70, root_child3.getLayoutX(), 0.0f);
+ assertEquals(30, root_child3.getLayoutY(), 0.0f);
+ assertEquals(30, root_child3.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child3.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_wrap_row_align_items_flex_end() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setAlignItems(CSSAlign.FLEX_END);
+ root.setWrap(CSSWrap.WRAP);
+ root.setStyleWidth(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(30);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(30);
+ root_child1.setStyleHeight(20);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(30);
+ root_child2.setStyleHeight(30);
+ root.addChildAt(root_child2, 2);
+
+ final CSSNode root_child3 = new CSSNode();
+ root_child3.setStyleWidth(30);
+ root_child3.setStyleHeight(30);
+ root.addChildAt(root_child3, 3);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(60, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(20, root_child0.getLayoutY(), 0.0f);
+ assertEquals(30, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(30, root_child1.getLayoutX(), 0.0f);
+ assertEquals(10, root_child1.getLayoutY(), 0.0f);
+ assertEquals(30, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(20, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(60, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(30, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child2.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child3.getLayoutX(), 0.0f);
+ assertEquals(30, root_child3.getLayoutY(), 0.0f);
+ assertEquals(30, root_child3.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child3.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(60, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(70, root_child0.getLayoutX(), 0.0f);
+ assertEquals(20, root_child0.getLayoutY(), 0.0f);
+ assertEquals(30, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(40, root_child1.getLayoutX(), 0.0f);
+ assertEquals(10, root_child1.getLayoutY(), 0.0f);
+ assertEquals(30, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(20, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(30, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child2.getLayoutHeight(), 0.0f);
+
+ assertEquals(70, root_child3.getLayoutX(), 0.0f);
+ assertEquals(30, root_child3.getLayoutY(), 0.0f);
+ assertEquals(30, root_child3.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child3.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_wrap_row_align_items_center() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setAlignItems(CSSAlign.CENTER);
+ root.setWrap(CSSWrap.WRAP);
+ root.setStyleWidth(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(30);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(30);
+ root_child1.setStyleHeight(20);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(30);
+ root_child2.setStyleHeight(30);
+ root.addChildAt(root_child2, 2);
+
+ final CSSNode root_child3 = new CSSNode();
+ root_child3.setStyleWidth(30);
+ root_child3.setStyleHeight(30);
+ root.addChildAt(root_child3, 3);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(60, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(30, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(30, root_child1.getLayoutX(), 0.0f);
+ assertEquals(5, root_child1.getLayoutY(), 0.0f);
+ assertEquals(30, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(20, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(60, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(30, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child2.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child3.getLayoutX(), 0.0f);
+ assertEquals(30, root_child3.getLayoutY(), 0.0f);
+ assertEquals(30, root_child3.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child3.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(60, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(70, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(30, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(40, root_child1.getLayoutX(), 0.0f);
+ assertEquals(5, root_child1.getLayoutY(), 0.0f);
+ assertEquals(30, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(20, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(30, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child2.getLayoutHeight(), 0.0f);
+
+ assertEquals(70, root_child3.getLayoutX(), 0.0f);
+ assertEquals(30, root_child3.getLayoutY(), 0.0f);
+ assertEquals(30, root_child3.getLayoutWidth(), 0.0f);
+ assertEquals(30, root_child3.getLayoutHeight(), 0.0f);
+ }
+
+}
diff --git a/java/tests/com/facebook/csslayout/CSSLayoutJustifyContentTest.java b/java/tests/com/facebook/csslayout/CSSLayoutJustifyContentTest.java
new file mode 100644
index 00000000..cef3690a
--- /dev/null
+++ b/java/tests/com/facebook/csslayout/CSSLayoutJustifyContentTest.java
@@ -0,0 +1,734 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ *
+ */
+
+package com.facebook.csslayout;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class CSSLayoutJustifyContentTest {
+ @Test
+ public void test_justify_content_row_flex_start() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setStyleWidth(102);
+ root.setStyleHeight(102);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(10, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(20, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(10, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(92, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(82, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(10, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(72, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(10, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_justify_content_row_flex_end() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setJustifyContent(CSSJustify.FLEX_END);
+ root.setStyleWidth(102);
+ root.setStyleHeight(102);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(72, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(82, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(10, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(92, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(10, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(20, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(10, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(10, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_justify_content_row_center() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setJustifyContent(CSSJustify.CENTER);
+ root.setStyleWidth(102);
+ root.setStyleHeight(102);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(36, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(46, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(10, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(56, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(10, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(56, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(46, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(10, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(36, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(10, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_justify_content_row_space_between() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setJustifyContent(CSSJustify.SPACE_BETWEEN);
+ root.setStyleWidth(102);
+ root.setStyleHeight(102);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(46, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(10, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(92, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(10, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(92, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(46, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(10, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(10, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_justify_content_row_space_around() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setJustifyContent(CSSJustify.SPACE_AROUND);
+ root.setStyleWidth(102);
+ root.setStyleHeight(102);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(12, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(46, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(10, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(80, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(10, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(80, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(46, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(10, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(12, root_child2.getLayoutX(), 0.0f);
+ assertEquals(0, root_child2.getLayoutY(), 0.0f);
+ assertEquals(10, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(102, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_justify_content_column_flex_start() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(102);
+ root.setStyleHeight(102);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleHeight(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(102, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(10, root_child1.getLayoutY(), 0.0f);
+ assertEquals(102, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(0, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(10, root_child2.getLayoutY(), 0.0f);
+ assertEquals(102, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(102, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(10, root_child1.getLayoutY(), 0.0f);
+ assertEquals(102, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(0, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(10, root_child2.getLayoutY(), 0.0f);
+ assertEquals(102, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_justify_content_column_flex_end() {
+ final CSSNode root = new CSSNode();
+ root.setJustifyContent(CSSJustify.FLEX_END);
+ root.setStyleWidth(102);
+ root.setStyleHeight(102);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleHeight(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleHeight(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(72, root_child0.getLayoutY(), 0.0f);
+ assertEquals(102, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(82, root_child1.getLayoutY(), 0.0f);
+ assertEquals(102, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(92, root_child2.getLayoutY(), 0.0f);
+ assertEquals(102, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(72, root_child0.getLayoutY(), 0.0f);
+ assertEquals(102, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(82, root_child1.getLayoutY(), 0.0f);
+ assertEquals(102, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(92, root_child2.getLayoutY(), 0.0f);
+ assertEquals(102, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_justify_content_column_center() {
+ final CSSNode root = new CSSNode();
+ root.setJustifyContent(CSSJustify.CENTER);
+ root.setStyleWidth(102);
+ root.setStyleHeight(102);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleHeight(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleHeight(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(36, root_child0.getLayoutY(), 0.0f);
+ assertEquals(102, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(46, root_child1.getLayoutY(), 0.0f);
+ assertEquals(102, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(56, root_child2.getLayoutY(), 0.0f);
+ assertEquals(102, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(36, root_child0.getLayoutY(), 0.0f);
+ assertEquals(102, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(46, root_child1.getLayoutY(), 0.0f);
+ assertEquals(102, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(56, root_child2.getLayoutY(), 0.0f);
+ assertEquals(102, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_justify_content_column_space_between() {
+ final CSSNode root = new CSSNode();
+ root.setJustifyContent(CSSJustify.SPACE_BETWEEN);
+ root.setStyleWidth(102);
+ root.setStyleHeight(102);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleHeight(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleHeight(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(102, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(46, root_child1.getLayoutY(), 0.0f);
+ assertEquals(102, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(92, root_child2.getLayoutY(), 0.0f);
+ assertEquals(102, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(102, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(46, root_child1.getLayoutY(), 0.0f);
+ assertEquals(102, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(92, root_child2.getLayoutY(), 0.0f);
+ assertEquals(102, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_justify_content_column_space_around() {
+ final CSSNode root = new CSSNode();
+ root.setJustifyContent(CSSJustify.SPACE_AROUND);
+ root.setStyleWidth(102);
+ root.setStyleHeight(102);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleHeight(10);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleHeight(10);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(12, root_child0.getLayoutY(), 0.0f);
+ assertEquals(102, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(46, root_child1.getLayoutY(), 0.0f);
+ assertEquals(102, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(80, root_child2.getLayoutY(), 0.0f);
+ assertEquals(102, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(102, root.getLayoutWidth(), 0.0f);
+ assertEquals(102, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(12, root_child0.getLayoutY(), 0.0f);
+ assertEquals(102, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(46, root_child1.getLayoutY(), 0.0f);
+ assertEquals(102, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(80, root_child2.getLayoutY(), 0.0f);
+ assertEquals(102, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+}
diff --git a/java/tests/com/facebook/csslayout/CSSLayoutMarginTest.java b/java/tests/com/facebook/csslayout/CSSLayoutMarginTest.java
new file mode 100644
index 00000000..f85ce54d
--- /dev/null
+++ b/java/tests/com/facebook/csslayout/CSSLayoutMarginTest.java
@@ -0,0 +1,467 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ *
+ */
+
+package com.facebook.csslayout;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class CSSLayoutMarginTest {
+ @Test
+ public void test_margin_start() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setMargin(Spacing.START, 10);
+ root_child0.setStyleWidth(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(80, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_margin_top() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setMargin(Spacing.TOP, 10);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_margin_end() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setJustifyContent(CSSJustify.FLEX_END);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setMargin(Spacing.END, 10);
+ root_child0.setStyleWidth(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(80, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_margin_bottom() {
+ final CSSNode root = new CSSNode();
+ root.setJustifyContent(CSSJustify.FLEX_END);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setMargin(Spacing.BOTTOM, 10);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(80, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(80, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_margin_and_flex_row() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setFlexGrow(1);
+ root_child0.setMargin(Spacing.START, 10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(90, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(90, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_margin_and_flex_column() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setFlexGrow(1);
+ root_child0.setMargin(Spacing.TOP, 10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(90, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(90, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_margin_and_stretch_row() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setFlexGrow(1);
+ root_child0.setMargin(Spacing.TOP, 10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(90, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(90, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_margin_and_stretch_column() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setFlexGrow(1);
+ root_child0.setMargin(Spacing.START, 10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(90, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(90, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_margin_with_sibling_row() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setFlexGrow(1);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setFlexGrow(1);
+ root.addChildAt(root_child1, 1);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(50, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child1.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(50, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child1.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_margin_with_sibling_column() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setFlexGrow(1);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setFlexGrow(1);
+ root.addChildAt(root_child1, 1);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(50, root_child1.getLayoutY(), 0.0f);
+ assertEquals(100, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child1.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(50, root_child1.getLayoutY(), 0.0f);
+ assertEquals(100, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child1.getLayoutHeight(), 0.0f);
+ }
+
+}
diff --git a/java/tests/com/facebook/csslayout/CSSLayoutMinMaxDimensionTest.java b/java/tests/com/facebook/csslayout/CSSLayoutMinMaxDimensionTest.java
new file mode 100644
index 00000000..2607d23e
--- /dev/null
+++ b/java/tests/com/facebook/csslayout/CSSLayoutMinMaxDimensionTest.java
@@ -0,0 +1,378 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+
+
+
+
+
+
+ *
+ */
+
+package com.facebook.csslayout;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class CSSLayoutMinMaxDimensionTest {
+ @Test
+ public void test_max_width() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleMaxWidth(50);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_max_height() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(10);
+ root_child0.setStyleMaxHeight(50);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(90, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_min_height() {
+ final CSSNode root = new CSSNode();
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setFlexGrow(1);
+ root_child0.setStyleMinHeight(60);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setFlexGrow(1);
+ root.addChildAt(root_child1, 1);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(80, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(80, root_child1.getLayoutY(), 0.0f);
+ assertEquals(100, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(20, root_child1.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(100, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(80, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(80, root_child1.getLayoutY(), 0.0f);
+ assertEquals(100, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(20, root_child1.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_min_width() {
+ final CSSNode root = new CSSNode();
+ root.setFlexDirection(CSSFlexDirection.ROW);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setFlexGrow(1);
+ root_child0.setStyleMinWidth(60);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setFlexGrow(1);
+ root.addChildAt(root_child1, 1);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(80, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(80, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(20, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child1.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(20, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(80, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(0, root_child1.getLayoutY(), 0.0f);
+ assertEquals(20, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(100, root_child1.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_justify_content_min_max() {
+ final CSSNode root = new CSSNode();
+ root.setJustifyContent(CSSJustify.CENTER);
+ root.setStyleWidth(100);
+ root.setStyleMinHeight(100);
+ root.setStyleMaxHeight(200);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(60);
+ root_child0.setStyleHeight(60);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(20, root_child0.getLayoutY(), 0.0f);
+ assertEquals(60, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(60, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(40, root_child0.getLayoutX(), 0.0f);
+ assertEquals(20, root_child0.getLayoutY(), 0.0f);
+ assertEquals(60, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(60, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_align_items_min_max() {
+ final CSSNode root = new CSSNode();
+ root.setAlignItems(CSSAlign.CENTER);
+ root.setStyleMinWidth(100);
+ root.setStyleMaxWidth(200);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(60);
+ root_child0.setStyleHeight(60);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(20, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(60, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(60, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(20, root_child0.getLayoutX(), 0.0f);
+ assertEquals(0, root_child0.getLayoutY(), 0.0f);
+ assertEquals(60, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(60, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_justify_content_overflow_min_max() {
+ final CSSNode root = new CSSNode();
+ root.setJustifyContent(CSSJustify.CENTER);
+ root.setStyleMinHeight(100);
+ root.setStyleMaxHeight(110);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(50);
+ root_child0.setStyleHeight(50);
+ root.addChildAt(root_child0, 0);
+
+ final CSSNode root_child1 = new CSSNode();
+ root_child1.setStyleWidth(50);
+ root_child1.setStyleHeight(50);
+ root.addChildAt(root_child1, 1);
+
+ final CSSNode root_child2 = new CSSNode();
+ root_child2.setStyleWidth(50);
+ root_child2.setStyleHeight(50);
+ root.addChildAt(root_child2, 2);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(50, root.getLayoutWidth(), 0.0f);
+ assertEquals(110, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(-20, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(30, root_child1.getLayoutY(), 0.0f);
+ assertEquals(50, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(80, root_child2.getLayoutY(), 0.0f);
+ assertEquals(50, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child2.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(50, root.getLayoutWidth(), 0.0f);
+ assertEquals(110, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child0.getLayoutX(), 0.0f);
+ assertEquals(-20, root_child0.getLayoutY(), 0.0f);
+ assertEquals(50, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child0.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child1.getLayoutX(), 0.0f);
+ assertEquals(30, root_child1.getLayoutY(), 0.0f);
+ assertEquals(50, root_child1.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child1.getLayoutHeight(), 0.0f);
+
+ assertEquals(0, root_child2.getLayoutX(), 0.0f);
+ assertEquals(80, root_child2.getLayoutY(), 0.0f);
+ assertEquals(50, root_child2.getLayoutWidth(), 0.0f);
+ assertEquals(50, root_child2.getLayoutHeight(), 0.0f);
+ }
+
+}
diff --git a/java/tests/com/facebook/csslayout/CSSLayoutPaddingTest.java b/java/tests/com/facebook/csslayout/CSSLayoutPaddingTest.java
new file mode 100644
index 00000000..e8bd8671
--- /dev/null
+++ b/java/tests/com/facebook/csslayout/CSSLayoutPaddingTest.java
@@ -0,0 +1,227 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+/**
+ * @Generated by gentest/gentest.sh with the following input
+ *
+
+
+
+
+
+
+
+
+
+
+ *
+ */
+
+package com.facebook.csslayout;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class CSSLayoutPaddingTest {
+ @Test
+ public void test_padding_no_size() {
+ final CSSNode root = new CSSNode();
+ root.setPadding(Spacing.LEFT, 10);
+ root.setPadding(Spacing.TOP, 10);
+ root.setPadding(Spacing.RIGHT, 10);
+ root.setPadding(Spacing.BOTTOM, 10);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(20, root.getLayoutWidth(), 0.0f);
+ assertEquals(20, root.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(20, root.getLayoutWidth(), 0.0f);
+ assertEquals(20, root.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_padding_container_match_child() {
+ final CSSNode root = new CSSNode();
+ root.setPadding(Spacing.LEFT, 10);
+ root.setPadding(Spacing.TOP, 10);
+ root.setPadding(Spacing.RIGHT, 10);
+ root.setPadding(Spacing.BOTTOM, 10);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(10);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(30, root.getLayoutWidth(), 0.0f);
+ assertEquals(30, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(30, root.getLayoutWidth(), 0.0f);
+ assertEquals(30, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_padding_flex_child() {
+ final CSSNode root = new CSSNode();
+ root.setPadding(Spacing.LEFT, 10);
+ root.setPadding(Spacing.TOP, 10);
+ root.setPadding(Spacing.RIGHT, 10);
+ root.setPadding(Spacing.BOTTOM, 10);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setFlexGrow(1);
+ root_child0.setStyleWidth(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(80, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(80, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(80, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_padding_stretch_child() {
+ final CSSNode root = new CSSNode();
+ root.setPadding(Spacing.LEFT, 10);
+ root.setPadding(Spacing.TOP, 10);
+ root.setPadding(Spacing.RIGHT, 10);
+ root.setPadding(Spacing.BOTTOM, 10);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(80, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(10, root_child0.getLayoutX(), 0.0f);
+ assertEquals(10, root_child0.getLayoutY(), 0.0f);
+ assertEquals(80, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+ @Test
+ public void test_padding_center_child() {
+ final CSSNode root = new CSSNode();
+ root.setJustifyContent(CSSJustify.CENTER);
+ root.setAlignItems(CSSAlign.CENTER);
+ root.setPadding(Spacing.START, 10);
+ root.setPadding(Spacing.END, 20);
+ root.setPadding(Spacing.BOTTOM, 20);
+ root.setStyleWidth(100);
+ root.setStyleHeight(100);
+
+ final CSSNode root_child0 = new CSSNode();
+ root_child0.setStyleWidth(10);
+ root_child0.setStyleHeight(10);
+ root.addChildAt(root_child0, 0);
+ root.setDirection(CSSDirection.LTR);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(40, root_child0.getLayoutX(), 0.0f);
+ assertEquals(35, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+
+ root.setDirection(CSSDirection.RTL);
+ root.calculateLayout(null);
+
+ assertEquals(0, root.getLayoutX(), 0.0f);
+ assertEquals(0, root.getLayoutY(), 0.0f);
+ assertEquals(100, root.getLayoutWidth(), 0.0f);
+ assertEquals(100, root.getLayoutHeight(), 0.0f);
+
+ assertEquals(50, root_child0.getLayoutX(), 0.0f);
+ assertEquals(35, root_child0.getLayoutY(), 0.0f);
+ assertEquals(10, root_child0.getLayoutWidth(), 0.0f);
+ assertEquals(10, root_child0.getLayoutHeight(), 0.0f);
+ }
+
+}