Chromium Code Reviews| 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 c7a1baad2d18e62f2f405de4a7b95cb403ac0265..1f2cc4d3c51ddc1c9336d818df93d044f30aaec6 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 |
| @@ -892,10 +892,10 @@ TEST_F(NGBlockLayoutAlgorithmTest, PositionFloatInsideEmptyBlocks) { |
| EXPECT_THAT(body_top_offset + 10, left_float->offsetTop()); |
| // ** Legacy Floating objects ** |
| - Element* body = document().getElementsByTagName("body")->item(0); |
| + Element* container = document().getElementById("container"); |
| auto& floating_objects = |
| const_cast<FloatingObjects*>( |
| - toLayoutBlockFlow(body->layoutObject())->floatingObjects()) |
| + toLayoutBlockFlow(container->layoutObject())->floatingObjects()) |
| ->mutableSet(); |
| ASSERT_EQ(1UL, floating_objects.size()); |
| auto floating_object = floating_objects.takeFirst(); |
| @@ -2004,5 +2004,64 @@ TEST_F(NGBlockLayoutAlgorithmTest, DISABLED_TwoFloatsInTwoColumns) { |
| EXPECT_FALSE(iterator.NextChild()); |
| } |
| +// Verifies that we position empty blocks and floats correctly inside of the |
| +// block that establishes new BFC. |
| +TEST_F(NGBlockLayoutAlgorithmTest, PositionEmptyBlocksInNewBfc) { |
|
ikilpatrick
2017/02/16 17:27:38
do we also need a test for something like:
<div i
Gleb Lanbin
2017/02/16 20:08:27
I think CollapsingMarginsCase5 tests this use case
|
| + setBodyInnerHTML(R"HTML( |
| + <style> |
| + #container { |
| + overflow: hidden; |
| + } |
| + #empty-block1 { |
| + margin: 8px; |
| + } |
| + #left-float { |
| + float: left; |
| + background: red; |
| + height: 20px; |
| + width: 10px; |
| + margin: 15px; |
| + } |
| + #empty-block2 { |
| + margin-top: 50px; |
| + } |
| + </style> |
| + <div id="container"> |
| + <div id="left-float"></div> |
| + <div id="empty-block1"></div> |
| + <div id="empty-block2"></div> |
| + </div> |
| + )HTML"); |
| + Element* container = document().getElementById("container"); |
| + auto& floating_objects = |
| + const_cast<FloatingObjects*>( |
| + toLayoutBlockFlow(container->layoutObject())->floatingObjects()) |
| + ->mutableSet(); |
| + ASSERT_EQ(1UL, floating_objects.size()); |
| + auto floating_object = floating_objects.takeFirst(); |
| + // left-float's margin = 15. |
| + EXPECT_THAT(LayoutUnit(15), floating_object->x()); |
| + EXPECT_THAT(LayoutUnit(15), floating_object->y()); |
| + |
| + RefPtr<const NGPhysicalBoxFragment> html_fragment; |
| + std::tie(html_fragment, std::ignore) = RunBlockLayoutAlgorithmForElement( |
| + document().getElementsByTagName("html")->item(0)); |
| + auto* body_fragment = |
| + toNGPhysicalBoxFragment(html_fragment->Children()[0].get()); |
| + auto* container_fragment = |
| + toNGPhysicalBoxFragment(body_fragment->Children()[0].get()); |
| + auto* empty_block1 = |
| + toNGPhysicalBoxFragment(container_fragment->Children()[0].get()); |
| + // empty-block1's margin == 8 |
| + EXPECT_THAT(NGPhysicalOffset(LayoutUnit(8), LayoutUnit(8)), |
| + empty_block1->Offset()); |
| + |
| + auto* empty_block2 = |
| + toNGPhysicalBoxFragment(container_fragment->Children()[1].get()); |
| + // empty-block2's margin == 50 |
| + EXPECT_THAT(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(50)), |
| + empty_block2->Offset()); |
| +} |
| + |
| } // namespace |
| } // namespace blink |