From 2fc622adbd90dfe095843e58bedac7bdf905442b Mon Sep 17 00:00:00 2001 From: Emil Sjolander Date: Thu, 25 Aug 2016 15:28:40 -0700 Subject: [PATCH] Generate test for flex wrap Summary: Generate tests for flex wrap. The behavior for how the parents cross dimension is sized based on the children differs between browsers but looking at the spec this is the correct implementation. Differential Revision: D3771140 fbshipit-source-id: bf144d506834e1d4217222bc2422150884a0be1c --- tests/CSSLayoutFlexWrapTest.cpp | 148 ++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 tests/CSSLayoutFlexWrapTest.cpp diff --git a/tests/CSSLayoutFlexWrapTest.cpp b/tests/CSSLayoutFlexWrapTest.cpp new file mode 100644 index 00000000..1c6f6282 --- /dev/null +++ b/tests/CSSLayoutFlexWrapTest.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 + * + *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * + */ + +// These tests were modified after generation due to both safari and chrome not abiding +// by the specification. The undefined dimension of a parent should be defined by the total size +// of their children in that dimension. +// See diagram under flex-wrap header https://www.w3.org/TR/css-flexbox-1/ + +#include +#include +#include + +TEST(CSSLayoutTest, wrap_column) { + const CSSNodeRef root = CSSNodeNew(); + CSSNodeStyleSetFlexWrap(root, CSSWrapTypeWrap); + CSSNodeStyleSetHeight(root, 100); + + const CSSNodeRef root_child0 = CSSNodeNew(); + CSSNodeStyleSetAlignSelf(root_child0, CSSAlignStretch); + CSSNodeStyleSetWidth(root_child0, 30); + CSSNodeStyleSetHeight(root_child0, 30); + CSSNodeInsertChild(root, root_child0, 0); + + const CSSNodeRef root_child1 = CSSNodeNew(); + CSSNodeStyleSetAlignSelf(root_child1, CSSAlignStretch); + CSSNodeStyleSetWidth(root_child1, 30); + CSSNodeStyleSetHeight(root_child1, 30); + CSSNodeInsertChild(root, root_child1, 1); + + const CSSNodeRef root_child2 = CSSNodeNew(); + CSSNodeStyleSetAlignSelf(root_child2, CSSAlignStretch); + CSSNodeStyleSetWidth(root_child2, 30); + CSSNodeStyleSetHeight(root_child2, 30); + CSSNodeInsertChild(root, root_child2, 2); + + const CSSNodeRef root_child3 = CSSNodeNew(); + CSSNodeStyleSetAlignSelf(root_child3, CSSAlignStretch); + CSSNodeStyleSetWidth(root_child3, 30); + CSSNodeStyleSetHeight(root_child3, 30); + CSSNodeInsertChild(root, root_child3, 3); + CSSNodeCalculateLayout(root, CSSUndefined, CSSUndefined, CSSDirectionLTR); + + ASSERT_EQ(0, CSSNodeLayoutGetLeft(root)); + ASSERT_EQ(0, CSSNodeLayoutGetTop(root)); + ASSERT_EQ(60, CSSNodeLayoutGetWidth(root)); + ASSERT_EQ(100, CSSNodeLayoutGetHeight(root)); + + ASSERT_EQ(0, CSSNodeLayoutGetLeft(root_child0)); + ASSERT_EQ(0, CSSNodeLayoutGetTop(root_child0)); + ASSERT_EQ(30, CSSNodeLayoutGetWidth(root_child0)); + ASSERT_EQ(30, CSSNodeLayoutGetHeight(root_child0)); + + ASSERT_EQ(0, CSSNodeLayoutGetLeft(root_child1)); + ASSERT_EQ(30, CSSNodeLayoutGetTop(root_child1)); + ASSERT_EQ(30, CSSNodeLayoutGetWidth(root_child1)); + ASSERT_EQ(30, CSSNodeLayoutGetHeight(root_child1)); + + ASSERT_EQ(0, CSSNodeLayoutGetLeft(root_child2)); + ASSERT_EQ(60, CSSNodeLayoutGetTop(root_child2)); + ASSERT_EQ(30, CSSNodeLayoutGetWidth(root_child2)); + ASSERT_EQ(30, CSSNodeLayoutGetHeight(root_child2)); + + ASSERT_EQ(30, CSSNodeLayoutGetLeft(root_child3)); + ASSERT_EQ(0, CSSNodeLayoutGetTop(root_child3)); + ASSERT_EQ(30, CSSNodeLayoutGetWidth(root_child3)); + ASSERT_EQ(30, CSSNodeLayoutGetHeight(root_child3)); +} + +TEST(CSSLayoutTest, wrap_row) { + const CSSNodeRef root = CSSNodeNew(); + CSSNodeStyleSetFlexDirection(root, CSSFlexDirectionRow); + CSSNodeStyleSetFlexWrap(root, CSSWrapTypeWrap); + CSSNodeStyleSetWidth(root, 100); + + const CSSNodeRef root_child0 = CSSNodeNew(); + CSSNodeStyleSetAlignSelf(root_child0, CSSAlignStretch); + CSSNodeStyleSetWidth(root_child0, 30); + CSSNodeStyleSetHeight(root_child0, 30); + CSSNodeInsertChild(root, root_child0, 0); + + const CSSNodeRef root_child1 = CSSNodeNew(); + CSSNodeStyleSetAlignSelf(root_child1, CSSAlignStretch); + CSSNodeStyleSetWidth(root_child1, 30); + CSSNodeStyleSetHeight(root_child1, 30); + CSSNodeInsertChild(root, root_child1, 1); + + const CSSNodeRef root_child2 = CSSNodeNew(); + CSSNodeStyleSetAlignSelf(root_child2, CSSAlignStretch); + CSSNodeStyleSetWidth(root_child2, 30); + CSSNodeStyleSetHeight(root_child2, 30); + CSSNodeInsertChild(root, root_child2, 2); + + const CSSNodeRef root_child3 = CSSNodeNew(); + CSSNodeStyleSetAlignSelf(root_child3, CSSAlignStretch); + CSSNodeStyleSetWidth(root_child3, 30); + CSSNodeStyleSetHeight(root_child3, 30); + CSSNodeInsertChild(root, root_child3, 3); + CSSNodeCalculateLayout(root, CSSUndefined, CSSUndefined, CSSDirectionLTR); + + ASSERT_EQ(0, CSSNodeLayoutGetLeft(root)); + ASSERT_EQ(0, CSSNodeLayoutGetTop(root)); + ASSERT_EQ(100, CSSNodeLayoutGetWidth(root)); + ASSERT_EQ(60, CSSNodeLayoutGetHeight(root)); + + ASSERT_EQ(0, CSSNodeLayoutGetLeft(root_child0)); + ASSERT_EQ(0, CSSNodeLayoutGetTop(root_child0)); + ASSERT_EQ(30, CSSNodeLayoutGetWidth(root_child0)); + ASSERT_EQ(30, CSSNodeLayoutGetHeight(root_child0)); + + ASSERT_EQ(30, CSSNodeLayoutGetLeft(root_child1)); + ASSERT_EQ(0, CSSNodeLayoutGetTop(root_child1)); + ASSERT_EQ(30, CSSNodeLayoutGetWidth(root_child1)); + ASSERT_EQ(30, CSSNodeLayoutGetHeight(root_child1)); + + ASSERT_EQ(60, CSSNodeLayoutGetLeft(root_child2)); + ASSERT_EQ(0, CSSNodeLayoutGetTop(root_child2)); + ASSERT_EQ(30, CSSNodeLayoutGetWidth(root_child2)); + ASSERT_EQ(30, CSSNodeLayoutGetHeight(root_child2)); + + ASSERT_EQ(0, CSSNodeLayoutGetLeft(root_child3)); + ASSERT_EQ(30, CSSNodeLayoutGetTop(root_child3)); + ASSERT_EQ(30, CSSNodeLayoutGetWidth(root_child3)); + ASSERT_EQ(30, CSSNodeLayoutGetHeight(root_child3)); +}