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

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

Issue 2711803007: Add ClearanceOffset to LayoutNG Constraint space. (Closed)
Patch Set: update TestExpectations Created 3 years, 10 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 8b3ba8b0eb83fbdab73bc81f24824a65454df3a9..11912e2a52e184ed73a6eec9d479c343590f92cb 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
@@ -2096,5 +2096,83 @@ TEST_F(NGBlockLayoutAlgorithmTest, PositionEmptyBlocksInNewBfc) {
empty_block2->Offset());
}
+// Verifies that we can correctly position blocks with clearance and
+// intruding floats.
+TEST_F(NGBlockLayoutAlgorithmTest,
+ PositionBlocksWithClearanceAndIntrudingFloats) {
+ setBodyInnerHTML(R"HTML(
+ <!DOCTYPE html>
+ <style>
+ body { margin: 80px; }
+ #left-float {
+ background: green;
+ float: left;
+ width: 50px;
+ height: 50px;
+ }
+ #right-float {
+ background: red;
+ float: right;
+ margin: 0 80px 0 10px;
+ width: 50px;
+ height: 80px;
+ }
+ #block1 {
+ outline: purple solid;
+ height: 30px;
+ margin: 130px 0 20px 0;
+ }
+ #zero {
+ margin-top: 30px;
+ }
+ #container-clear {
+ clear: left;
+ outline: orange solid;
+ }
+ #clears-right {
+ clear: right;
+ height: 20px;
+ background: lightblue;
+ }
+ </style>
+
+ <div id="left-float"></div>
+ <div id="right-float"></div>
+ <div id="block1"></div>
+ <div id="container-clear">
+ <div id="zero"></div>
+ <div id="clears-right"></div>
+ </div>
+ )HTML");
+
+ // Run LayoutNG algorithm.
+ RefPtr<NGPhysicalBoxFragment> html_fragment;
+ std::tie(html_fragment, std::ignore) = RunBlockLayoutAlgorithmForElement(
+ document().getElementsByTagName("html")->item(0));
+ auto* body_fragment =
+ toNGPhysicalBoxFragment(html_fragment->Children()[0].get());
+ ASSERT_EQ(2UL, body_fragment->Children().size());
+
+ // Verify #container-clear block
+ auto* container_clear_fragment =
+ toNGPhysicalBoxFragment(body_fragment->Children()[1].get());
+ // 60 = block1's height 30 + std::max(block1's margin 20, zero's margin 30)
+ EXPECT_THAT(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(60)),
+ container_clear_fragment->Offset());
+ Element* container_clear = document().getElementById("container-clear");
+ // 190 = block1's margin 130 + block1's height 30 +
+ // std::max(block1's margin 20, zero's margin 30)
+ EXPECT_THAT(container_clear->offsetTop(), 190);
+
+ // Verify #clears-right block
+ ASSERT_EQ(2UL, container_clear_fragment->Children().size());
+ auto* clears_right_fragment =
+ toNGPhysicalBoxFragment(container_clear_fragment->Children()[1].get());
+ // 20 = right-float's block end offset (130 + 80) -
+ // container_clear->offsetTop() 190
+ EXPECT_THAT(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(20)),
+ clears_right_fragment->Offset());
+}
+
} // namespace
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698