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

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

Issue 2709083002: Fix incorrectly painted right floats in LayoutNG (Closed)
Patch Set: fix comments 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 518eaefec7417fdc315ed4c59a705bdc95503940..b9dce45a45c97a8a0a8c4ea60b1af6ccf277fa9e 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
@@ -815,8 +815,9 @@ TEST_F(NGBlockLayoutAlgorithmTest, PositionFloatInsideEmptyBlocks) {
setBodyInnerHTML(R"HTML(
<style>
#container {
- height: 200px;
- width: 200px;
+ height: 300px;
+ width: 300px;
+ outline: blue solid;
}
#empty1 {
margin: 20px;
@@ -826,7 +827,7 @@ TEST_F(NGBlockLayoutAlgorithmTest, PositionFloatInsideEmptyBlocks) {
margin: 15px;
padding: 0 15px;
}
- #float {
+ #left-float {
float: left;
height: 5px;
width: 5px;
@@ -834,11 +835,19 @@ TEST_F(NGBlockLayoutAlgorithmTest, PositionFloatInsideEmptyBlocks) {
margin: 10px;
background-color: green;
}
+ #right-float {
+ float: right;
+ height: 15px;
+ width: 15px;
+ margin: 15px 10px;
+ background-color: red;
+ }
</style>
<div id='container'>
<div id='empty1'>
<div id='empty2'>
- <div id='float'></div>
+ <div id='left-float'></div>
+ <div id='right-float'></div>
</div>
</div>
</div>
@@ -876,16 +885,26 @@ TEST_F(NGBlockLayoutAlgorithmTest, PositionFloatInsideEmptyBlocks) {
int empty2_inline_offset = 35;
EXPECT_THAT(LayoutUnit(empty2_inline_offset), empty2_fragment->LeftOffset());
- ASSERT_EQ(1UL, container_fragment->PositionedFloats().size());
- auto float_fragment = container_fragment->PositionedFloats().at(0)->fragment;
- // 10 = float's padding
- EXPECT_THAT(LayoutUnit(10), float_fragment->TopOffset());
- // 25 = empty2's padding(15) + float's padding(10)
- int float_inline_offset = 25;
- EXPECT_THAT(float_fragment->LeftOffset(), LayoutUnit(float_inline_offset));
+ ASSERT_EQ(2UL, container_fragment->PositionedFloats().size());
+ RefPtr<NGPhysicalFragment> left_float_fragment =
+ container_fragment->PositionedFloats().at(0)->fragment;
+ // inline 25 = empty2's padding(15) + left float's margin(10)
+ // block 10 = left float's margin
+ EXPECT_THAT(NGPhysicalOffset(LayoutUnit(25), LayoutUnit(10)),
+ left_float_fragment->Offset());
+
+ auto right_float_fragment =
+ container_fragment->PositionedFloats().at(1)->fragment;
+ LayoutUnit right_float_offset = LayoutUnit(125);
+ // inline offset 150 = empty2's padding(15) + right float's margin(10) + right
+ // float offset(125)
+ // block offset 15 = right float's margin
+ EXPECT_THAT(
+ NGPhysicalOffset(LayoutUnit(25) + right_float_offset, LayoutUnit(15)),
+ right_float_fragment->Offset());
// ** Verify layout tree **
- Element* left_float = document().getElementById("float");
+ Element* left_float = document().getElementById("left-float");
// 88 = body's margin(8) +
// empty1's padding and margin + empty2's padding and margins + float's
// padding
@@ -894,18 +913,28 @@ TEST_F(NGBlockLayoutAlgorithmTest, PositionFloatInsideEmptyBlocks) {
EXPECT_THAT(body_top_offset + 10, left_float->offsetTop());
// ** Legacy Floating objects **
- Element* body = document().getElementsByTagName("body")->item(0);
+ // #container is the 1st non-empty block so floats are attached to it.
+ 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();
- ASSERT_TRUE(floating_object->isPlaced());
+ ASSERT_EQ(2UL, floating_objects.size());
+ auto left_floating_object = floating_objects.takeFirst();
+ ASSERT_TRUE(left_floating_object->isPlaced());
// 80 = float_inline_offset(25) + accumulative offset of empty blocks(35 + 20)
- EXPECT_THAT(LayoutUnit(80), floating_object->x());
- // 10 = float's padding
- EXPECT_THAT(LayoutUnit(10), floating_object->y());
+ EXPECT_THAT(LayoutUnit(80), left_floating_object->x());
+ // 10 = left float's margin
+ EXPECT_THAT(LayoutUnit(10), left_floating_object->y());
+
+ auto right_floating_object = floating_objects.takeFirst();
+ ASSERT_TRUE(right_floating_object->isPlaced());
+ // 205 = float_inline_offset(25) +
+ // accumulative offset of empty blocks(35 + 20)
+ // + right float offset(125)
+ EXPECT_THAT(LayoutUnit(80) + right_float_offset, right_floating_object->x());
+ // 15 = right float's margin
+ EXPECT_THAT(LayoutUnit(15), right_floating_object->y());
}
// Verifies that left/right floating and regular blocks can be positioned
@@ -2034,10 +2063,11 @@ TEST_F(NGBlockLayoutAlgorithmTest, PositionEmptyBlocksInNewBfc) {
<div id="empty-block2"></div>
</div>
)HTML");
- Element* body = document().getElementsByTagName("body")->item(0);
+ // #container is the new parent for our float because it's height != 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();

Powered by Google App Engine
This is Rietveld 408576698