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

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

Issue 2389823003: Fix incorrectly calculated content_size for fragments that create new FC (Closed)
Patch Set: Regroup the code to put together the Collapsing Margins logic for NewFormattingContext's fragments Created 4 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/layout/ng/ng_block_layout_algorithm.h" 5 #include "core/layout/ng/ng_block_layout_algorithm.h"
6 6
7 #include "core/layout/ng/ng_box.h" 7 #include "core/layout/ng/ng_box.h"
8 #include "core/layout/ng/ng_constraint_space.h" 8 #include "core/layout/ng/ng_constraint_space.h"
9 #include "core/layout/ng/ng_physical_fragment.h" 9 #include "core/layout/ng/ng_physical_fragment.h"
10 #include "core/layout/ng/ng_length_utils.h" 10 #include "core/layout/ng/ng_length_utils.h"
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 127
128 // Verifies the collapsing margins case for the next pair: 128 // Verifies the collapsing margins case for the next pair:
129 // - top margin of a box and top margin of its first in-flow child. 129 // - top margin of a box and top margin of its first in-flow child.
130 // 130 //
131 // Test case's HTML representation: 131 // Test case's HTML representation:
132 // <div style="margin-top: 20px; height: 50px;"> <!-- DIV1 --> 132 // <div style="margin-top: 20px; height: 50px;"> <!-- DIV1 -->
133 // <div style="margin-top: 10px"></div> <!-- DIV2 --> 133 // <div style="margin-top: 10px"></div> <!-- DIV2 -->
134 // </div> 134 // </div>
135 // 135 //
136 // Expected: 136 // Expected:
137 // - Empty margin strut of the fragment that establishes new formatting context
137 // - Margins are collapsed resulting a single margin 20px = max(20px, 10px) 138 // - Margins are collapsed resulting a single margin 20px = max(20px, 10px)
138 // - The top offset of DIV2 == 20px 139 // - The top offset of DIV2 == 20px
139 TEST_F(NGBlockLayoutAlgorithmTest, CollapsingMarginsCase1) { 140 TEST_F(NGBlockLayoutAlgorithmTest, CollapsingMarginsCase1) {
140 const int kHeight = 50; 141 const int kHeight = 50;
141 const int kDiv1MarginTop = 20; 142 const int kDiv1MarginTop = 20;
142 const int kDiv2MarginTop = 10; 143 const int kDiv2MarginTop = 10;
143 144
144 // DIV1 145 // DIV1
145 RefPtr<ComputedStyle> div1_style = ComputedStyle::create(); 146 RefPtr<ComputedStyle> div1_style = ComputedStyle::create();
146 div1_style->setHeight(Length(kHeight, Fixed)); 147 div1_style->setHeight(Length(kHeight, Fixed));
147 div1_style->setMarginTop(Length(kDiv1MarginTop, Fixed)); 148 div1_style->setMarginTop(Length(kDiv1MarginTop, Fixed));
148 NGBox* div1 = new NGBox(div1_style.get()); 149 NGBox* div1 = new NGBox(div1_style.get());
149 150
150 // DIV2 151 // DIV2
151 RefPtr<ComputedStyle> div2_style = ComputedStyle::create(); 152 RefPtr<ComputedStyle> div2_style = ComputedStyle::create();
152 div2_style->setMarginTop(Length(kDiv2MarginTop, Fixed)); 153 div2_style->setMarginTop(Length(kDiv2MarginTop, Fixed));
153 NGBox* div2 = new NGBox(div2_style.get()); 154 NGBox* div2 = new NGBox(div2_style.get());
154 155
155 div1->SetFirstChild(div2); 156 div1->SetFirstChild(div2);
156 157
157 auto* space = 158 auto* space =
158 new NGConstraintSpace(HorizontalTopBottom, LeftToRight, 159 new NGConstraintSpace(HorizontalTopBottom, LeftToRight,
159 NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); 160 NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
160 space->SetIsNewFormattingContext(true); 161 space->SetIsNewFormattingContext(true);
161 NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1); 162 NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
162 163
163 EXPECT_EQ(NGMarginStrut({LayoutUnit(kDiv1MarginTop)}), frag->MarginStrut()); 164 EXPECT_TRUE(frag->MarginStrut().IsEmpty());
164 ASSERT_EQ(frag->Children().size(), 1UL); 165 ASSERT_EQ(frag->Children().size(), 1UL);
165 const NGPhysicalFragmentBase* div2_fragment = frag->Children()[0]; 166 const NGPhysicalFragmentBase* div2_fragment = frag->Children()[0];
166 EXPECT_EQ(NGMarginStrut({LayoutUnit(kDiv2MarginTop)}), 167 EXPECT_EQ(NGMarginStrut({LayoutUnit(kDiv2MarginTop)}),
167 div2_fragment->MarginStrut()); 168 div2_fragment->MarginStrut());
168 EXPECT_EQ(kDiv1MarginTop, div2_fragment->TopOffset()); 169 EXPECT_EQ(kDiv1MarginTop, div2_fragment->TopOffset());
169 } 170 }
170 171
171 // Verifies the collapsing margins case for the next pair: 172 // Verifies the collapsing margins case for the next pair:
172 // - bottom margin of box and top margin of its next in-flow following sibling. 173 // - bottom margin of box and top margin of its next in-flow following sibling.
173 // 174 //
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 483
483 EXPECT_EQ(frag->Width(), LayoutUnit(kWidth + kPaddingLeft)); 484 EXPECT_EQ(frag->Width(), LayoutUnit(kWidth + kPaddingLeft));
484 EXPECT_EQ(frag->Type(), NGPhysicalFragmentBase::FragmentBox); 485 EXPECT_EQ(frag->Type(), NGPhysicalFragmentBase::FragmentBox);
485 ASSERT_EQ(frag->Children().size(), 1UL); 486 ASSERT_EQ(frag->Children().size(), 1UL);
486 487
487 const NGPhysicalFragmentBase* child = frag->Children()[0]; 488 const NGPhysicalFragmentBase* child = frag->Children()[0];
488 EXPECT_EQ(child->Width(), LayoutUnit(12)); 489 EXPECT_EQ(child->Width(), LayoutUnit(12));
489 } 490 }
490 } // namespace 491 } // namespace
491 } // namespace blink 492 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698