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..ce6ba4f414bfd67be91f3631856216e19fb44b94 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 |
@@ -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) { |
+ 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* body = document().getElementsByTagName("body")->item(0); |
+ auto& floating_objects = |
+ const_cast<FloatingObjects*>( |
+ toLayoutBlockFlow(body->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 |