From aa70125f6c563cc0dd5f59cc2ec125b79f6dd853 Mon Sep 17 00:00:00 2001 From: Emil Sjolander Date: Thu, 25 Aug 2016 15:28:38 -0700 Subject: [PATCH] Generate tests for absolute layout Summary: generate absolute layout tests. Also make sure default value for position is relative (#default div is absolutely positioned) Reviewed By: IanChilds Differential Revision: D3770947 fbshipit-source-id: 0327b071c0dc1aa4574ded759dcc667768b28f55 --- gentest/gentest.js | 3 + tests/CSSLayoutAbsolutePositionTest.cpp | 132 ++++++++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 tests/CSSLayoutAbsolutePositionTest.cpp diff --git a/gentest/gentest.js b/gentest/gentest.js index 56e6957a..0c4224d9 100755 --- a/gentest/gentest.js +++ b/gentest/gentest.js @@ -325,6 +325,9 @@ function pixelValue(value) { } function getDefaultStyleValue(style) { + if (style == 'position') { + return 'relative'; + } var node = document.getElementById('default'); return getComputedStyle(node, null).getPropertyValue(style); } diff --git a/tests/CSSLayoutAbsolutePositionTest.cpp b/tests/CSSLayoutAbsolutePositionTest.cpp new file mode 100644 index 00000000..aa104eee --- /dev/null +++ b/tests/CSSLayoutAbsolutePositionTest.cpp @@ -0,0 +1,132 @@ +/** + * 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 +#include + +TEST(CSSLayoutTest, absolute_layout_width_height_left_top) { + const CSSNodeRef root = CSSNodeNew(); + CSSNodeStyleSetWidth(root, 100); + CSSNodeStyleSetHeight(root, 100); + + const CSSNodeRef root_child0 = CSSNodeNew(); + CSSNodeStyleSetPositionType(root_child0, CSSPositionTypeAbsolute); + CSSNodeStyleSetPosition(root_child0, CSSEdgeLeft, 10); + CSSNodeStyleSetPosition(root_child0, CSSEdgeTop, 10); + 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(10, CSSNodeLayoutGetLeft(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetTop(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetWidth(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetHeight(root_child0)); +} + +TEST(CSSLayoutTest, absolute_layout_width_height_right_bottom) { + const CSSNodeRef root = CSSNodeNew(); + CSSNodeStyleSetWidth(root, 100); + CSSNodeStyleSetHeight(root, 100); + + const CSSNodeRef root_child0 = CSSNodeNew(); + CSSNodeStyleSetPositionType(root_child0, CSSPositionTypeAbsolute); + CSSNodeStyleSetPosition(root_child0, CSSEdgeRight, 10); + CSSNodeStyleSetPosition(root_child0, CSSEdgeBottom, 10); + 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(80, CSSNodeLayoutGetLeft(root_child0)); + ASSERT_EQ(80, CSSNodeLayoutGetTop(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetWidth(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetHeight(root_child0)); +} + +TEST(CSSLayoutTest, absolute_layout_left_top_right_bottom) { + const CSSNodeRef root = CSSNodeNew(); + CSSNodeStyleSetWidth(root, 100); + CSSNodeStyleSetHeight(root, 100); + + const CSSNodeRef root_child0 = CSSNodeNew(); + CSSNodeStyleSetPositionType(root_child0, CSSPositionTypeAbsolute); + CSSNodeStyleSetPosition(root_child0, CSSEdgeLeft, 10); + CSSNodeStyleSetPosition(root_child0, CSSEdgeTop, 10); + CSSNodeStyleSetPosition(root_child0, CSSEdgeRight, 10); + CSSNodeStyleSetPosition(root_child0, CSSEdgeBottom, 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(80, CSSNodeLayoutGetHeight(root_child0)); +} + +TEST(CSSLayoutTest, absolute_layout_width_height_left_top_right_bottom) { + const CSSNodeRef root = CSSNodeNew(); + CSSNodeStyleSetWidth(root, 100); + CSSNodeStyleSetHeight(root, 100); + + const CSSNodeRef root_child0 = CSSNodeNew(); + CSSNodeStyleSetPositionType(root_child0, CSSPositionTypeAbsolute); + CSSNodeStyleSetPosition(root_child0, CSSEdgeLeft, 10); + CSSNodeStyleSetPosition(root_child0, CSSEdgeTop, 10); + CSSNodeStyleSetPosition(root_child0, CSSEdgeRight, 10); + CSSNodeStyleSetPosition(root_child0, CSSEdgeBottom, 10); + 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(10, CSSNodeLayoutGetLeft(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetTop(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetWidth(root_child0)); + ASSERT_EQ(10, CSSNodeLayoutGetHeight(root_child0)); +}