From d9191431fffb189be78bd4be8cad12713aff4cce Mon Sep 17 00:00:00 2001 From: Emil Sjolander Date: Wed, 31 Aug 2016 08:02:43 -0700 Subject: [PATCH] Generate test for border (and fix gentest to include border offset) Summary: Generate tests for border. This required modifying gentest to add the parent clientLeft and clientTop so that border width are accounted for in output. Reviewed By: lucasr Differential Revision: D3791286 fbshipit-source-id: 698cc2332a3f4118e1afdfbfd745ba824e8ec3f4 --- gentest/gentest.js | 4 +- tests/CSSLayoutBorderTest.cpp | 148 ++++++++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 tests/CSSLayoutBorderTest.cpp diff --git a/gentest/gentest.js b/gentest/gentest.js index f3653125..9e5273b4 100755 --- a/gentest/gentest.js +++ b/gentest/gentest.js @@ -346,8 +346,8 @@ function calculateTree(root) { var child = root.children[i]; rootLayout.push({ name: child.id !== '' ? child.id : 'INSERT_NAME_HERE', - left: child.offsetLeft, - top: child.offsetTop, + left: child.offsetLeft + child.parentNode.clientLeft, + top: child.offsetTop + child.parentNode.clientTop, width: child.offsetWidth, height: child.offsetHeight, children: calculateTree(child), diff --git a/tests/CSSLayoutBorderTest.cpp b/tests/CSSLayoutBorderTest.cpp new file mode 100644 index 00000000..5ee7b92c --- /dev/null +++ b/tests/CSSLayoutBorderTest.cpp @@ -0,0 +1,148 @@ +/** + * 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 + * + *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * + */ + +#include +#include + +TEST(CSSLayoutTest, border_no_size) { + const CSSNodeRef root = CSSNodeNew(); + CSSNodeStyleSetBorder(root, CSSEdgeLeft, 10); + CSSNodeStyleSetBorder(root, CSSEdgeTop, 10); + CSSNodeStyleSetBorder(root, CSSEdgeRight, 10); + CSSNodeStyleSetBorder(root, CSSEdgeBottom, 10); + CSSNodeCalculateLayout(root, CSSUndefined, CSSUndefined, CSSDirectionLTR); + + ASSERT_EQ(0, CSSNodeLayoutGetLeft(root)); + ASSERT_EQ(0, CSSNodeLayoutGetTop(root)); + ASSERT_EQ(20, CSSNodeLayoutGetWidth(root)); + ASSERT_EQ(20, CSSNodeLayoutGetHeight(root)); +} + +TEST(CSSLayoutTest, border_container_match_child) { + const CSSNodeRef root = CSSNodeNew(); + CSSNodeStyleSetBorder(root, CSSEdgeLeft, 10); + CSSNodeStyleSetBorder(root, CSSEdgeTop, 10); + CSSNodeStyleSetBorder(root, CSSEdgeRight, 10); + CSSNodeStyleSetBorder(root, CSSEdgeBottom, 10); + + const CSSNodeRef root_child0 = CSSNodeNew(); + CSSNodeStyleSetWidth(root_child0, 10); + CSSNodeStyleSetHeight(root_child0, 10); + CSSNodeInsertChild(root, root_child0, 0); + CSSNodeCalculateLayout(root, CSSUndefined, CSSUndefined, CSSDirectionLTR); + + ASSERT_EQ(0, CSSNodeLayoutGetLeft(root)); + ASSERT_EQ(0, CSSNodeLayoutGetTop(root)); + ASSERT_EQ(30, CSSNodeLayoutGetWidth(root)); + ASSERT_EQ(30, CSSNodeLayoutGetHeight(root)); + + ASSERT_EQ(10, CSSNodeLayoutGetLeft(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetTop(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetWidth(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetHeight(root_child0)); +} + +TEST(CSSLayoutTest, border_flex_child) { + const CSSNodeRef root = CSSNodeNew(); + CSSNodeStyleSetBorder(root, CSSEdgeLeft, 10); + CSSNodeStyleSetBorder(root, CSSEdgeTop, 10); + CSSNodeStyleSetBorder(root, CSSEdgeRight, 10); + CSSNodeStyleSetBorder(root, CSSEdgeBottom, 10); + CSSNodeStyleSetWidth(root, 100); + CSSNodeStyleSetHeight(root, 100); + + const CSSNodeRef root_child0 = CSSNodeNew(); + CSSNodeStyleSetFlexGrow(root_child0, 1); + CSSNodeStyleSetWidth(root_child0, 10); + CSSNodeInsertChild(root, root_child0, 0); + CSSNodeCalculateLayout(root, CSSUndefined, CSSUndefined, CSSDirectionLTR); + + ASSERT_EQ(0, CSSNodeLayoutGetLeft(root)); + ASSERT_EQ(0, CSSNodeLayoutGetTop(root)); + ASSERT_EQ(100, CSSNodeLayoutGetWidth(root)); + ASSERT_EQ(100, CSSNodeLayoutGetHeight(root)); + + ASSERT_EQ(10, CSSNodeLayoutGetLeft(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetTop(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetWidth(root_child0)); + ASSERT_EQ(80, CSSNodeLayoutGetHeight(root_child0)); +} + +TEST(CSSLayoutTest, border_stretch_child) { + const CSSNodeRef root = CSSNodeNew(); + CSSNodeStyleSetBorder(root, CSSEdgeLeft, 10); + CSSNodeStyleSetBorder(root, CSSEdgeTop, 10); + CSSNodeStyleSetBorder(root, CSSEdgeRight, 10); + CSSNodeStyleSetBorder(root, CSSEdgeBottom, 10); + CSSNodeStyleSetWidth(root, 100); + CSSNodeStyleSetHeight(root, 100); + + const CSSNodeRef root_child0 = CSSNodeNew(); + CSSNodeStyleSetHeight(root_child0, 10); + CSSNodeInsertChild(root, root_child0, 0); + CSSNodeCalculateLayout(root, CSSUndefined, CSSUndefined, CSSDirectionLTR); + + ASSERT_EQ(0, CSSNodeLayoutGetLeft(root)); + ASSERT_EQ(0, CSSNodeLayoutGetTop(root)); + ASSERT_EQ(100, CSSNodeLayoutGetWidth(root)); + ASSERT_EQ(100, CSSNodeLayoutGetHeight(root)); + + ASSERT_EQ(10, CSSNodeLayoutGetLeft(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetTop(root_child0)); + ASSERT_EQ(80, CSSNodeLayoutGetWidth(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetHeight(root_child0)); +} + +TEST(CSSLayoutTest, border_center_child) { + const CSSNodeRef root = CSSNodeNew(); + CSSNodeStyleSetJustifyContent(root, CSSJustifyCenter); + CSSNodeStyleSetAlignItems(root, CSSAlignCenter); + CSSNodeStyleSetBorder(root, CSSEdgeLeft, 10); + CSSNodeStyleSetBorder(root, CSSEdgeRight, 20); + CSSNodeStyleSetBorder(root, CSSEdgeBottom, 20); + CSSNodeStyleSetWidth(root, 100); + CSSNodeStyleSetHeight(root, 100); + + const CSSNodeRef root_child0 = CSSNodeNew(); + CSSNodeStyleSetAlignSelf(root_child0, CSSAlignCenter); + CSSNodeStyleSetWidth(root_child0, 10); + CSSNodeStyleSetHeight(root_child0, 10); + CSSNodeInsertChild(root, root_child0, 0); + CSSNodeCalculateLayout(root, CSSUndefined, CSSUndefined, CSSDirectionLTR); + + ASSERT_EQ(0, CSSNodeLayoutGetLeft(root)); + ASSERT_EQ(0, CSSNodeLayoutGetTop(root)); + ASSERT_EQ(100, CSSNodeLayoutGetWidth(root)); + ASSERT_EQ(100, CSSNodeLayoutGetHeight(root)); + + ASSERT_EQ(40, CSSNodeLayoutGetLeft(root_child0)); + ASSERT_EQ(35, CSSNodeLayoutGetTop(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetWidth(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetHeight(root_child0)); +}