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

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

Issue 2417113002: [LayoutNG] Fix orthogonal writing mode child margin strut from being used in collapsing margins cal… (Closed)
Patch Set: address comments 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 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 div1->SetFirstChild(div2); 156 div1->SetFirstChild(div2);
157 157
158 auto* space = 158 auto* space =
159 new NGConstraintSpace(HorizontalTopBottom, LeftToRight, 159 new NGConstraintSpace(HorizontalTopBottom, LeftToRight,
160 NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); 160 NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
161 space->SetIsNewFormattingContext(true); 161 space->SetIsNewFormattingContext(true);
162 NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1); 162 NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
163 163
164 EXPECT_TRUE(frag->MarginStrut().IsEmpty()); 164 EXPECT_TRUE(frag->MarginStrut().IsEmpty());
165 ASSERT_EQ(frag->Children().size(), 1UL); 165 ASSERT_EQ(frag->Children().size(), 1UL);
166 const NGPhysicalFragmentBase* div2_fragment = frag->Children()[0]; 166 const NGPhysicalFragment* div2_fragment =
167 static_cast<const NGPhysicalFragment*>(frag->Children()[0].get());
167 EXPECT_EQ(NGMarginStrut({LayoutUnit(kDiv2MarginTop)}), 168 EXPECT_EQ(NGMarginStrut({LayoutUnit(kDiv2MarginTop)}),
168 div2_fragment->MarginStrut()); 169 div2_fragment->MarginStrut());
169 EXPECT_EQ(kDiv1MarginTop, div2_fragment->TopOffset()); 170 EXPECT_EQ(kDiv1MarginTop, div2_fragment->TopOffset());
170 } 171 }
171 172
172 // Verifies the collapsing margins case for the next pair: 173 // Verifies the collapsing margins case for the next pair:
173 // - bottom margin of box and top margin of its next in-flow following sibling. 174 // - bottom margin of box and top margin of its next in-flow following sibling.
174 // 175 //
175 // Test case's HTML representation: 176 // Test case's HTML representation:
176 // <div style="margin-bottom: 20px; height: 50px;"> <!-- DIV1 --> 177 // <div style="margin-bottom: 20px; height: 50px;"> <!-- DIV1 -->
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); 333 NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
333 NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1); 334 NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
334 335
335 // Verify that margins do NOT collapse. 336 // Verify that margins do NOT collapse.
336 frag = RunBlockLayoutAlgorithm(space, div1); 337 frag = RunBlockLayoutAlgorithm(space, div1);
337 EXPECT_EQ(NGMarginStrut({LayoutUnit(kDiv1Margin), LayoutUnit(kDiv1Margin)}), 338 EXPECT_EQ(NGMarginStrut({LayoutUnit(kDiv1Margin), LayoutUnit(kDiv1Margin)}),
338 frag->MarginStrut()); 339 frag->MarginStrut());
339 ASSERT_EQ(frag->Children().size(), 1UL); 340 ASSERT_EQ(frag->Children().size(), 1UL);
340 341
341 EXPECT_EQ(NGMarginStrut({LayoutUnit(kDiv2Margin), LayoutUnit(kDiv2Margin)}), 342 EXPECT_EQ(NGMarginStrut({LayoutUnit(kDiv2Margin), LayoutUnit(kDiv2Margin)}),
342 frag->Children()[0]->MarginStrut()); 343 static_cast<const NGPhysicalFragment*>(frag->Children()[0].get())
344 ->MarginStrut());
343 345
344 // Reset padding and verify that margins DO collapse. 346 // Reset padding and verify that margins DO collapse.
345 div1_style->setPaddingTop(Length(0, Fixed)); 347 div1_style->setPaddingTop(Length(0, Fixed));
346 div1_style->setPaddingBottom(Length(0, Fixed)); 348 div1_style->setPaddingBottom(Length(0, Fixed));
347 frag = RunBlockLayoutAlgorithm(space, div1); 349 frag = RunBlockLayoutAlgorithm(space, div1);
348 EXPECT_EQ(NGMarginStrut({LayoutUnit(kDiv2Margin), LayoutUnit(kDiv2Margin)}), 350 EXPECT_EQ(NGMarginStrut({LayoutUnit(kDiv2Margin), LayoutUnit(kDiv2Margin)}),
349 frag->MarginStrut()); 351 frag->MarginStrut());
350 } 352 }
351 353
352 // Verifies that margins of 2 adjoining blocks with different writing modes 354 // Verifies that margins of 2 adjoining blocks with different writing modes
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 NGLogicalSize(LayoutUnit(500), LayoutUnit(500))); 389 NGLogicalSize(LayoutUnit(500), LayoutUnit(500)));
388 NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, vertical_div); 390 NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, vertical_div);
389 391
390 ASSERT_EQ(frag->Children().size(), 2UL); 392 ASSERT_EQ(frag->Children().size(), 2UL);
391 const NGPhysicalFragmentBase* child = frag->Children()[1]; 393 const NGPhysicalFragmentBase* child = frag->Children()[1];
392 // Horizontal div 394 // Horizontal div
393 EXPECT_EQ(0, child->TopOffset()); 395 EXPECT_EQ(0, child->TopOffset());
394 EXPECT_EQ(kVerticalDivWidth + kHorizontalDivMarginLeft, child->LeftOffset()); 396 EXPECT_EQ(kVerticalDivWidth + kHorizontalDivMarginLeft, child->LeftOffset());
395 } 397 }
396 398
399 // Verifies that the margin strut of a child with a different writing mode does
400 // not get used in the collapsing margins calculation.
401 //
402 // Test case's HTML representation:
403 // <style>
404 // #div1 { margin-bottom: 10px; height: 60px; writing-mode: vertical-rl; }
405 // #div2 { margin-left: -20px; width: 10px; }
406 // #div3 { margin-top: 40px; height: 60px; }
407 // </style>
408 // <div id="div1">
409 // <div id="div2">vertical</div>
410 // </div>
411 // <div id="div3"></div>
412 TEST_F(NGBlockLayoutAlgorithmTest, CollapsingMarginsCase6) {
413 const int kHeight = 60;
414 const int kWidth = 10;
415 const int kMarginBottom = 10;
416 const int kMarginLeft = -20;
417 const int kMarginTop = 40;
418
419 style_->setWidth(Length(500, Fixed));
420 style_->setHeight(Length(500, Fixed));
421
422 // DIV1
423 RefPtr<ComputedStyle> div1_style = ComputedStyle::create();
424 div1_style->setWidth(Length(kWidth, Fixed));
425 div1_style->setHeight(Length(kHeight, Fixed));
426 div1_style->setWritingMode(RightToLeftWritingMode);
427 div1_style->setMarginBottom(Length(kMarginBottom, Fixed));
428 NGBox* div1 = new NGBox(div1_style.get());
429
430 // DIV2
431 RefPtr<ComputedStyle> div2_style = ComputedStyle::create();
432 div2_style->setWidth(Length(kWidth, Fixed));
433 div2_style->setMarginLeft(Length(kMarginLeft, Fixed));
434 NGBox* div2 = new NGBox(div2_style.get());
435
436 // DIV3
437 RefPtr<ComputedStyle> div3_style = ComputedStyle::create();
438 div3_style->setHeight(Length(kHeight, Fixed));
439 div3_style->setMarginTop(Length(kMarginTop, Fixed));
440 NGBox* div3 = new NGBox(div3_style.get());
441
442 div1->SetFirstChild(div2);
443 div1->SetNextSibling(div3);
444
445 auto* space =
446 new NGConstraintSpace(HorizontalTopBottom, LeftToRight,
447 NGLogicalSize(LayoutUnit(500), LayoutUnit(500)));
448 NGPhysicalFragment* frag = RunBlockLayoutAlgorithm(space, div1);
449
450 ASSERT_EQ(frag->Children().size(), 2UL);
451
452 const NGPhysicalFragmentBase* child1 = frag->Children()[0];
453 EXPECT_EQ(0, child1->TopOffset());
454 EXPECT_EQ(kHeight, child1->Height());
455
456 const NGPhysicalFragmentBase* child2 = frag->Children()[1];
457 EXPECT_EQ(kHeight + std::max(kMarginBottom, kMarginTop), child2->TopOffset());
458 }
459
397 // Verifies that a box's size includes its borders and padding, and that 460 // Verifies that a box's size includes its borders and padding, and that
398 // children are positioned inside the content box. 461 // children are positioned inside the content box.
399 // 462 //
400 // Test case's HTML representation: 463 // Test case's HTML representation:
401 // <style> 464 // <style>
402 // #div1 { width:100px; height:100px; } 465 // #div1 { width:100px; height:100px; }
403 // #div1 { border-style:solid; border-width:1px 2px 3px 4px; } 466 // #div1 { border-style:solid; border-width:1px 2px 3px 4px; }
404 // #div1 { padding:5px 6px 7px 8px; } 467 // #div1 { padding:5px 6px 7px 8px; }
405 // </style> 468 // </style>
406 // <div id="div1"> 469 // <div id="div1">
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 EXPECT_EQ(LayoutUnit(kWidth + kPaddingLeft), frag->WidthOverflow()); 577 EXPECT_EQ(LayoutUnit(kWidth + kPaddingLeft), frag->WidthOverflow());
515 ASSERT_EQ(1UL, frag->Children().size()); 578 ASSERT_EQ(1UL, frag->Children().size());
516 579
517 const NGPhysicalFragmentBase* child = frag->Children()[0]; 580 const NGPhysicalFragmentBase* child = frag->Children()[0];
518 EXPECT_EQ(LayoutUnit(kChildWidth), child->Width()); 581 EXPECT_EQ(LayoutUnit(kChildWidth), child->Width());
519 EXPECT_EQ(LayoutUnit(kPaddingLeft + 10), child->LeftOffset()); 582 EXPECT_EQ(LayoutUnit(kPaddingLeft + 10), child->LeftOffset());
520 EXPECT_EQ(LayoutUnit(0), child->TopOffset()); 583 EXPECT_EQ(LayoutUnit(0), child->TopOffset());
521 } 584 }
522 } // namespace 585 } // namespace
523 } // namespace blink 586 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698