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

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

Issue 2700683002: [LayoutNG] Fix incorrectly positioned empty blocks inside of new BFC (Closed)
Patch Set: 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/layout/ng/ng_block_layout_algorithm.h" 5 #include "core/layout/ng/ng_block_layout_algorithm.h"
6 6
7 #include "core/dom/NodeComputedStyle.h" 7 #include "core/dom/NodeComputedStyle.h"
8 #include "core/dom/TagCollection.h" 8 #include "core/dom/TagCollection.h"
9 #include "core/layout/ng/layout_ng_block_flow.h" 9 #include "core/layout/ng/layout_ng_block_flow.h"
10 #include "core/layout/ng/ng_block_node.h" 10 #include "core/layout/ng/ng_block_node.h"
(...skipping 874 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 // ** Verify layout tree ** 885 // ** Verify layout tree **
886 Element* left_float = document().getElementById("float"); 886 Element* left_float = document().getElementById("float");
887 // 88 = body's margin(8) + 887 // 88 = body's margin(8) +
888 // empty1's padding and margin + empty2's padding and margins + float's 888 // empty1's padding and margin + empty2's padding and margins + float's
889 // padding 889 // padding
890 EXPECT_THAT(left_float->offsetLeft(), 88); 890 EXPECT_THAT(left_float->offsetLeft(), 88);
891 // 30 = body_top_offset(collapsed margins result) + float's padding 891 // 30 = body_top_offset(collapsed margins result) + float's padding
892 EXPECT_THAT(body_top_offset + 10, left_float->offsetTop()); 892 EXPECT_THAT(body_top_offset + 10, left_float->offsetTop());
893 893
894 // ** Legacy Floating objects ** 894 // ** Legacy Floating objects **
895 Element* body = document().getElementsByTagName("body")->item(0); 895 Element* container = document().getElementById("container");
896 auto& floating_objects = 896 auto& floating_objects =
897 const_cast<FloatingObjects*>( 897 const_cast<FloatingObjects*>(
898 toLayoutBlockFlow(body->layoutObject())->floatingObjects()) 898 toLayoutBlockFlow(container->layoutObject())->floatingObjects())
899 ->mutableSet(); 899 ->mutableSet();
900 ASSERT_EQ(1UL, floating_objects.size()); 900 ASSERT_EQ(1UL, floating_objects.size());
901 auto floating_object = floating_objects.takeFirst(); 901 auto floating_object = floating_objects.takeFirst();
902 ASSERT_TRUE(floating_object->isPlaced()); 902 ASSERT_TRUE(floating_object->isPlaced());
903 // 80 = float_inline_offset(25) + accumulative offset of empty blocks(35 + 20) 903 // 80 = float_inline_offset(25) + accumulative offset of empty blocks(35 + 20)
904 EXPECT_THAT(LayoutUnit(80), floating_object->x()); 904 EXPECT_THAT(LayoutUnit(80), floating_object->x());
905 // 10 = float's padding 905 // 10 = float's padding
906 EXPECT_THAT(LayoutUnit(10), floating_object->y()); 906 EXPECT_THAT(LayoutUnit(10), floating_object->y());
907 } 907 }
908 908
(...skipping 1088 matching lines...) Expand 10 before | Expand all | Expand 10 after
1997 fragment = iterator.NextChild(); 1997 fragment = iterator.NextChild();
1998 ASSERT_TRUE(fragment); 1998 ASSERT_TRUE(fragment);
1999 EXPECT_EQ(LayoutUnit(194), fragment->LeftOffset()); 1999 EXPECT_EQ(LayoutUnit(194), fragment->LeftOffset());
2000 EXPECT_EQ(LayoutUnit(), fragment->TopOffset()); 2000 EXPECT_EQ(LayoutUnit(), fragment->TopOffset());
2001 EXPECT_EQ(LayoutUnit(16), fragment->Width()); 2001 EXPECT_EQ(LayoutUnit(16), fragment->Width());
2002 EXPECT_EQ(LayoutUnit(50), fragment->Height()); 2002 EXPECT_EQ(LayoutUnit(50), fragment->Height());
2003 EXPECT_EQ(0UL, fragment->Children().size()); 2003 EXPECT_EQ(0UL, fragment->Children().size());
2004 EXPECT_FALSE(iterator.NextChild()); 2004 EXPECT_FALSE(iterator.NextChild());
2005 } 2005 }
2006 2006
2007 // Verifies that we position empty blocks and floats correctly inside of the
2008 // block that establishes new BFC.
2009 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
2010 setBodyInnerHTML(R"HTML(
2011 <style>
2012 #container {
2013 overflow: hidden;
2014 }
2015 #empty-block1 {
2016 margin: 8px;
2017 }
2018 #left-float {
2019 float: left;
2020 background: red;
2021 height: 20px;
2022 width: 10px;
2023 margin: 15px;
2024 }
2025 #empty-block2 {
2026 margin-top: 50px;
2027 }
2028 </style>
2029 <div id="container">
2030 <div id="left-float"></div>
2031 <div id="empty-block1"></div>
2032 <div id="empty-block2"></div>
2033 </div>
2034 )HTML");
2035 Element* container = document().getElementById("container");
2036 auto& floating_objects =
2037 const_cast<FloatingObjects*>(
2038 toLayoutBlockFlow(container->layoutObject())->floatingObjects())
2039 ->mutableSet();
2040 ASSERT_EQ(1UL, floating_objects.size());
2041 auto floating_object = floating_objects.takeFirst();
2042 // left-float's margin = 15.
2043 EXPECT_THAT(LayoutUnit(15), floating_object->x());
2044 EXPECT_THAT(LayoutUnit(15), floating_object->y());
2045
2046 RefPtr<const NGPhysicalBoxFragment> html_fragment;
2047 std::tie(html_fragment, std::ignore) = RunBlockLayoutAlgorithmForElement(
2048 document().getElementsByTagName("html")->item(0));
2049 auto* body_fragment =
2050 toNGPhysicalBoxFragment(html_fragment->Children()[0].get());
2051 auto* container_fragment =
2052 toNGPhysicalBoxFragment(body_fragment->Children()[0].get());
2053 auto* empty_block1 =
2054 toNGPhysicalBoxFragment(container_fragment->Children()[0].get());
2055 // empty-block1's margin == 8
2056 EXPECT_THAT(NGPhysicalOffset(LayoutUnit(8), LayoutUnit(8)),
2057 empty_block1->Offset());
2058
2059 auto* empty_block2 =
2060 toNGPhysicalBoxFragment(container_fragment->Children()[1].get());
2061 // empty-block2's margin == 50
2062 EXPECT_THAT(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(50)),
2063 empty_block2->Offset());
2064 }
2065
2007 } // namespace 2066 } // namespace
2008 } // namespace blink 2067 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698