Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Unified Diff: third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm_test.cc

Issue 2347773002: [LayoutNG] Fix broken layout while using CSS's writing modes. (Closed)
Patch Set: synced to the head Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm_test.cc
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm_test.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm_test.cc
index 42c33cb1e2a624a0ac34a3dad6bb57203a048390..a7755c88adc7fd546316456eea7a3294c18accb1 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm_test.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm_test.cc
@@ -35,8 +35,9 @@ TEST_F(NGBlockLayoutAlgorithmTest, FixedSize) {
style_->setWidth(Length(30, Fixed));
style_->setHeight(Length(40, Fixed));
- auto* space = new NGConstraintSpace(
- HorizontalTopBottom, NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
+ auto* space =
+ new NGConstraintSpace(HorizontalTopBottom, LeftToRight,
+ NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, nullptr);
EXPECT_EQ(frag->Width(), LayoutUnit(30));
@@ -64,8 +65,9 @@ TEST_F(NGBlockLayoutAlgorithmTest, LayoutBlockChildren) {
first_child->SetNextSibling(second_child);
- auto* space = new NGConstraintSpace(
- HorizontalTopBottom, NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
+ auto* space =
+ new NGConstraintSpace(HorizontalTopBottom, LeftToRight,
+ NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, first_child);
EXPECT_EQ(frag->Width(), LayoutUnit(kWidth));
@@ -82,6 +84,47 @@ TEST_F(NGBlockLayoutAlgorithmTest, LayoutBlockChildren) {
EXPECT_EQ(child->TopOffset(), kHeight1 + kMarginTop);
}
+// Verifies that a child is laid out correctly if it's writing mode is different
+// from the parent's one.
+//
+// Test case's HTML representation:
+// <div style="writing-mode: vertical-lr;">
+// <div style="width:50px;
+// height: 50px; margin-left: 100px;
+// writing-mode: horizontal-tb;"></div>
+// </div>
+TEST_F(NGBlockLayoutAlgorithmTest, LayoutBlockChildrenWithWritingMode) {
+ const int kWidth = 50;
+ const int kHeight = 50;
+ const int kMarginLeft = 100;
+
+ RefPtr<ComputedStyle> div1_style = ComputedStyle::create();
+ div1_style->setWritingMode(LeftToRightWritingMode);
+ NGBox* div1 = new NGBox(div1_style.get());
+
+ RefPtr<ComputedStyle> div2_style = ComputedStyle::create();
+ div2_style->setHeight(Length(kHeight, Fixed));
+ div2_style->setWidth(Length(kWidth, Fixed));
+ div1_style->setWritingMode(TopToBottomWritingMode);
+ div2_style->setMarginLeft(Length(kMarginLeft, Fixed));
+ NGBox* div2 = new NGBox(div2_style.get());
+
+ div1->SetFirstChild(div2);
+
+ auto* space =
+ new NGConstraintSpace(HorizontalTopBottom, LeftToRight,
+ NGLogicalSize(LayoutUnit(500), LayoutUnit(500)));
+ NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
+
+ const NGPhysicalFragmentBase* child = frag->Children()[0];
+ // DIV2
+ child = static_cast<const NGPhysicalFragment*>(child)->Children()[0];
+
+ EXPECT_EQ(kHeight, child->Height());
+ EXPECT_EQ(0, child->TopOffset());
+ EXPECT_EQ(kMarginLeft, child->LeftOffset());
+}
+
// Verifies the collapsing margins case for the next pair:
// - top margin of a box and top margin of its first in-flow child.
//
@@ -110,8 +153,9 @@ TEST_F(NGBlockLayoutAlgorithmTest, CollapsingMarginsCase1) {
div1->SetFirstChild(div2);
- auto* space = new NGConstraintSpace(
- HorizontalTopBottom, NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
+ auto* space =
+ new NGConstraintSpace(HorizontalTopBottom, LeftToRight,
+ NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
EXPECT_EQ(frag->MarginStrut(), NGMarginStrut({LayoutUnit(kDiv1MarginTop)}));
@@ -170,8 +214,9 @@ TEST_F(NGBlockLayoutAlgorithmTest, CollapsingMarginsCase2) {
div3->SetFirstChild(div4);
div1->SetNextSibling(div3);
- auto* space = new NGConstraintSpace(
- HorizontalTopBottom, NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
+ auto* space =
+ new NGConstraintSpace(HorizontalTopBottom, LeftToRight,
+ NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
ASSERT_EQ(frag->Children().size(), 2UL);
@@ -216,8 +261,9 @@ TEST_F(NGBlockLayoutAlgorithmTest, CollapsingMarginsCase3) {
div1->SetFirstChild(div2);
- auto* space = new NGConstraintSpace(
- HorizontalTopBottom, NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
+ auto* space =
+ new NGConstraintSpace(HorizontalTopBottom, LeftToRight,
+ NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
// Verify that margins are collapsed.
@@ -264,8 +310,9 @@ TEST_F(NGBlockLayoutAlgorithmTest, CollapsingMarginsCase4) {
div1->SetFirstChild(div2);
- auto* space = new NGConstraintSpace(
- HorizontalTopBottom, NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
+ auto* space =
+ new NGConstraintSpace(HorizontalTopBottom, LeftToRight,
+ NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
// Verify that margins do NOT collapse.
@@ -332,8 +379,9 @@ TEST_F(NGBlockLayoutAlgorithmTest, BorderAndPadding) {
div1->SetFirstChild(div2);
- auto* space = new NGConstraintSpace(
- HorizontalTopBottom, NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite));
+ auto* space =
+ new NGConstraintSpace(HorizontalTopBottom, LeftToRight,
+ NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite));
NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
ASSERT_EQ(frag->Children().size(), 1UL);

Powered by Google App Engine
This is Rietveld 408576698