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

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

Issue 2816933003: Use Layout Opportunity Iterator to position new FC blocks. (Closed)
Patch Set: fix block-formatting-contexts-{005|007} Created 3 years, 8 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 6f72f770761f110479321be98d42a303ba28c64b..73f8eabff837c870d3324643ea144975bbfc9b4b 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
@@ -1906,8 +1906,8 @@ TEST_F(NGBlockLayoutAlgorithmTest, PositionEmptyBlocksInNewBfc) {
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());
+ EXPECT_THAT(floating_object->X(), LayoutUnit(15));
+ EXPECT_THAT(floating_object->Y(), LayoutUnit(15));
RefPtr<const NGPhysicalBoxFragment> html_fragment;
std::tie(html_fragment, std::ignore) = RunBlockLayoutAlgorithmForElement(
@@ -1919,14 +1919,14 @@ TEST_F(NGBlockLayoutAlgorithmTest, PositionEmptyBlocksInNewBfc) {
auto* empty_block1 =
ToNGPhysicalBoxFragment(container_fragment->Children()[0].Get());
// empty-block1's margin == 8
- EXPECT_THAT(NGPhysicalOffset(LayoutUnit(8), LayoutUnit(8)),
- empty_block1->Offset());
+ EXPECT_THAT(empty_block1->Offset(),
+ NGPhysicalOffset(LayoutUnit(8), LayoutUnit(8)));
auto* empty_block2 =
ToNGPhysicalBoxFragment(container_fragment->Children()[1].Get());
// empty-block2's margin == 50
- EXPECT_THAT(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(50)),
- empty_block2->Offset());
+ EXPECT_THAT(empty_block2->Offset(),
+ NGPhysicalOffset(LayoutUnit(0), LayoutUnit(50)));
}
// Verifies that we can correctly position blocks with clearance and
@@ -2270,7 +2270,66 @@ TEST_F(NGBlockLayoutAlgorithmTest, InnerChildrenFragmentationSmallHeight) {
EXPECT_FALSE(iterator.NextChild());
}
-TEST_F(NGBlockLayoutAlgorithmTest, NewFormattingContextBlock) {}
+// Verifies that we correctly position a new FC block with the Layout
+// Opportunity iterator.
+TEST_F(NGBlockLayoutAlgorithmTest,
+ NewFcBlockWithAdjoiningFloatCollapsesMargins) {
+ SetBodyInnerHTML(R"HTML(
+ <!DOCTYPE html>
+ <style>
+ #container {
+ width: 200px; outline: solid purple 1px;
+ }
+ #float {
+ float: left; width: 100px; height: 30px; background: red;
+ }
+ #new-fc {
+ contain: paint; margin-top: 20px; background: purple;
+ height: 50px;
+ }
+ </style>
+ <div id="container">
+ <div id="float"></div>
+ <div id="new-fc"></div>
+ </div>
+ )HTML");
+
+ const NGPhysicalBoxFragment* body_fragment;
+ const NGPhysicalBoxFragment* container_fragment;
+ const NGPhysicalBoxFragment* new_fc_fragment;
+ RefPtr<const NGPhysicalBoxFragment> fragment;
+ auto run_test = [&](const Length& block_width) {
+ Element* new_fc_block = GetDocument().GetElementById("new-fc");
+ new_fc_block->MutableComputedStyle()->SetWidth(block_width);
+ std::tie(fragment, std::ignore) = RunBlockLayoutAlgorithmForElement(
+ GetDocument().getElementsByTagName("html")->item(0));
+ ASSERT_EQ(1UL, fragment->Children().size());
+ body_fragment = ToNGPhysicalBoxFragment(fragment->Children()[0].Get());
+ container_fragment =
+ ToNGPhysicalBoxFragment(body_fragment->Children()[0].Get());
+ ASSERT_EQ(1UL, container_fragment->Children().size());
+ new_fc_fragment =
+ ToNGPhysicalBoxFragment(container_fragment->Children()[0].Get());
+ };
+ // #new-fc is small enough to fit on the same line with #float.
+ run_test(Length(80, kFixed));
+ // 100 = float's width, 0 = no margin collapsing
+ EXPECT_THAT(new_fc_fragment->Offset(),
+ NGPhysicalOffset(LayoutUnit(100), LayoutUnit(0)));
+ // 8 = body's margins, 20 = new-fc's margin top(20) collapses with
+ // body's margin(8)
+ EXPECT_THAT(body_fragment->Offset(),
+ NGPhysicalOffset(LayoutUnit(8), LayoutUnit(20)));
+
+ // #new-fc is too wide to be positioned on the same line with #float
+ run_test(Length(120, kFixed));
+ // 30 = #float's height
+ EXPECT_THAT(new_fc_fragment->Offset(),
+ NGPhysicalOffset(LayoutUnit(0), LayoutUnit(30)));
+ // 8 = body's margins, no margin collapsing
+ EXPECT_THAT(body_fragment->Offset(),
+ NGPhysicalOffset(LayoutUnit(8), LayoutUnit(8)));
+}
} // namespace
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698