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

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

Issue 2790283003: Reset constraint space's BFC offset if block creates a new FC (Closed)
Patch Set: git rebase-update 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 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/LayoutTestHelper.h" 9 #include "core/layout/LayoutTestHelper.h"
10 #include "core/layout/ng/layout_ng_block_flow.h" 10 #include "core/layout/ng/layout_ng_block_flow.h"
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 // second child's height(50) 347 // second child's height(50)
348 int empty5_fragment_block_offset = 90; 348 int empty5_fragment_block_offset = 90;
349 EXPECT_THAT(LayoutUnit(empty5_fragment_block_offset), 349 EXPECT_THAT(LayoutUnit(empty5_fragment_block_offset),
350 empty5_fragment->TopOffset()); 350 empty5_fragment->TopOffset());
351 351
352 ASSERT_EQ(1UL, body_fragment->PositionedFloats().size()); 352 ASSERT_EQ(1UL, body_fragment->PositionedFloats().size());
353 ASSERT_EQ(1UL, body_fragment->PositionedFloats().size()); 353 ASSERT_EQ(1UL, body_fragment->PositionedFloats().size());
354 auto float_nonempties_fragment = 354 auto float_nonempties_fragment =
355 body_fragment->PositionedFloats().at(0)->fragment; 355 body_fragment->PositionedFloats().at(0)->fragment;
356 // 70 = first_child's height(50) + first child's margin-bottom(20) 356 // 70 = first_child's height(50) + first child's margin-bottom(20)
357 EXPECT_THAT(LayoutUnit(70), float_nonempties_fragment->TopOffset()); 357 EXPECT_THAT(float_nonempties_fragment->TopOffset(), LayoutUnit(70));
358 EXPECT_THAT(LayoutUnit(0), float_nonempties_fragment->LeftOffset()); 358 EXPECT_THAT(float_nonempties_fragment->LeftOffset(), LayoutUnit(0));
359 359
360 // ** Verify layout tree ** 360 // ** Verify layout tree **
361 Element* first_child = document().getElementById("first-child"); 361 Element* first_child = document().getElementById("first-child");
362 // -7 = body_top_offset 362 // -7 = body_top_offset
363 EXPECT_EQ(body_top_offset, first_child->offsetTop()); 363 EXPECT_EQ(body_top_offset, first_child->offsetTop());
364 } 364 }
365 365
366 // Verifies the collapsing margins case for the next pair: 366 // Verifies the collapsing margins case for the next pair:
367 // - bottom margin of a last in-flow child and bottom margin of its parent if 367 // - bottom margin of a last in-flow child and bottom margin of its parent if
368 // the parent has 'auto' computed height 368 // the parent has 'auto' computed height
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 842
843 // ** Run LayoutNG algorithm ** 843 // ** Run LayoutNG algorithm **
844 RefPtr<NGConstraintSpace> space; 844 RefPtr<NGConstraintSpace> space;
845 RefPtr<NGPhysicalBoxFragment> fragment; 845 RefPtr<NGPhysicalBoxFragment> fragment;
846 std::tie(fragment, space) = RunBlockLayoutAlgorithmForElement( 846 std::tie(fragment, space) = RunBlockLayoutAlgorithmForElement(
847 document().getElementsByTagName("html")->item(0)); 847 document().getElementsByTagName("html")->item(0));
848 848
849 auto* body_fragment = toNGPhysicalBoxFragment(fragment->Children()[0].get()); 849 auto* body_fragment = toNGPhysicalBoxFragment(fragment->Children()[0].get());
850 // 20 = std::max(empty1's margin, empty2's margin, body's margin) 850 // 20 = std::max(empty1's margin, empty2's margin, body's margin)
851 int body_top_offset = 20; 851 int body_top_offset = 20;
852 EXPECT_THAT(LayoutUnit(body_top_offset), body_fragment->TopOffset()); 852 EXPECT_THAT(body_fragment->TopOffset(), LayoutUnit(body_top_offset));
853 ASSERT_EQ(1UL, body_fragment->Children().size()); 853 ASSERT_EQ(1UL, body_fragment->Children().size());
854 auto* container_fragment = 854 auto* container_fragment =
855 toNGPhysicalBoxFragment(body_fragment->Children()[0].get()); 855 toNGPhysicalBoxFragment(body_fragment->Children()[0].get());
856 ASSERT_EQ(1UL, container_fragment->Children().size()); 856 ASSERT_EQ(1UL, container_fragment->Children().size());
857 857
858 auto* empty1_fragment = 858 auto* empty1_fragment =
859 toNGPhysicalBoxFragment(container_fragment->Children()[0].get()); 859 toNGPhysicalBoxFragment(container_fragment->Children()[0].get());
860 // 0, vertical margins got collapsed 860 // 0, vertical margins got collapsed
861 EXPECT_THAT(LayoutUnit(), empty1_fragment->TopOffset()); 861 EXPECT_THAT(empty1_fragment->TopOffset(), LayoutUnit());
862 // 20 empty1's margin 862 // 20 empty1's margin
863 int empty1_inline_offset = 20; 863 int empty1_inline_offset = 20;
864 EXPECT_THAT(LayoutUnit(empty1_inline_offset), empty1_fragment->LeftOffset()); 864 EXPECT_THAT(empty1_fragment->LeftOffset(), LayoutUnit(empty1_inline_offset));
865 ASSERT_EQ(empty1_fragment->Children().size(), 1UL); 865 ASSERT_EQ(empty1_fragment->Children().size(), 1UL);
866 866
867 auto* empty2_fragment = 867 auto* empty2_fragment =
868 toNGPhysicalBoxFragment(empty1_fragment->Children()[0].get()); 868 toNGPhysicalBoxFragment(empty1_fragment->Children()[0].get());
869 // 0, vertical margins got collapsed 869 // 0, vertical margins got collapsed
870 EXPECT_THAT(LayoutUnit(), empty2_fragment->TopOffset()); 870 EXPECT_THAT(LayoutUnit(), empty2_fragment->TopOffset());
871 // 35 = empty1's padding(20) + empty2's padding(15) 871 // 35 = empty1's padding(20) + empty2's padding(15)
872 int empty2_inline_offset = 35; 872 int empty2_inline_offset = 35;
873 EXPECT_THAT(LayoutUnit(empty2_inline_offset), empty2_fragment->LeftOffset()); 873 EXPECT_THAT(empty2_fragment->LeftOffset(), LayoutUnit(empty2_inline_offset));
874 874
875 ASSERT_EQ(2UL, container_fragment->PositionedFloats().size()); 875 ASSERT_EQ(2UL, container_fragment->PositionedFloats().size());
876 RefPtr<NGPhysicalFragment> left_float_fragment = 876 RefPtr<NGPhysicalFragment> left_float_fragment =
877 container_fragment->PositionedFloats().at(0)->fragment; 877 container_fragment->PositionedFloats().at(0)->fragment;
878 // inline 25 = empty2's padding(15) + left float's margin(10) 878 // inline 25 = empty2's padding(15) + left float's margin(10)
879 // block 10 = left float's margin 879 // block 10 = left float's margin
880 EXPECT_THAT(NGPhysicalOffset(LayoutUnit(25), LayoutUnit(10)), 880 EXPECT_THAT(left_float_fragment->Offset(),
881 left_float_fragment->Offset()); 881 NGPhysicalOffset(LayoutUnit(25), LayoutUnit(10)));
882 882
883 auto right_float_fragment = 883 auto right_float_fragment =
884 container_fragment->PositionedFloats().at(1)->fragment; 884 container_fragment->PositionedFloats().at(1)->fragment;
885 LayoutUnit right_float_offset = LayoutUnit(125); 885 LayoutUnit right_float_offset = LayoutUnit(125);
886 // inline offset 150 = empty2's padding(15) + right float's margin(10) + right 886 // inline offset 150 = empty2's padding(15) + right float's margin(10) + right
887 // float offset(125) 887 // float offset(125)
888 // block offset 15 = right float's margin 888 // block offset 15 = right float's margin
889 EXPECT_THAT( 889 EXPECT_THAT(
890 NGPhysicalOffset(LayoutUnit(25) + right_float_offset, LayoutUnit(15)), 890 right_float_fragment->Offset(),
891 right_float_fragment->Offset()); 891 NGPhysicalOffset(LayoutUnit(25) + right_float_offset, LayoutUnit(15)));
892 892
893 // ** Verify layout tree ** 893 // ** Verify layout tree **
894 Element* left_float = document().getElementById("left-float"); 894 Element* left_float = document().getElementById("left-float");
895 // 88 = body's margin(8) + 895 // 88 = body's margin(8) +
896 // empty1's padding and margin + empty2's padding and margins + float's 896 // empty1's padding and margin + empty2's padding and margins + float's
897 // padding 897 // padding
898 EXPECT_THAT(left_float->offsetLeft(), 88); 898 EXPECT_THAT(left_float->offsetLeft(), 88);
899 // 30 = body_top_offset(collapsed margins result) + float's padding 899 // 30 = body_top_offset(collapsed margins result) + float's padding
900 EXPECT_THAT(body_top_offset + 10, left_float->offsetTop()); 900 EXPECT_THAT(left_float->offsetTop(), body_top_offset + 10);
901 901
902 // ** Legacy Floating objects ** 902 // ** Legacy Floating objects **
903 // #container is the 1st non-empty block so floats are attached to it. 903 // #container is the 1st non-empty block so floats are attached to it.
904 Element* container = document().getElementById("container"); 904 Element* container = document().getElementById("container");
905 auto& floating_objects = 905 auto& floating_objects =
906 const_cast<FloatingObjects*>( 906 const_cast<FloatingObjects*>(
907 toLayoutBlockFlow(container->layoutObject())->floatingObjects()) 907 toLayoutBlockFlow(container->layoutObject())->floatingObjects())
908 ->mutableSet(); 908 ->mutableSet();
909 ASSERT_EQ(2UL, floating_objects.size()); 909 ASSERT_EQ(2UL, floating_objects.size());
910 auto left_floating_object = floating_objects.takeFirst(); 910 auto left_floating_object = floating_objects.takeFirst();
911 ASSERT_TRUE(left_floating_object->isPlaced()); 911 ASSERT_TRUE(left_floating_object->isPlaced());
912 // 80 = float_inline_offset(25) + accumulative offset of empty blocks(35 + 20) 912 // 80 = float_inline_offset(25) + accumulative offset of empty blocks(35 + 20)
913 EXPECT_THAT(LayoutUnit(80), left_floating_object->x()); 913 EXPECT_THAT(left_floating_object->x(), LayoutUnit(80));
914 // 10 = left float's margin 914 // 10 = left float's margin
915 EXPECT_THAT(LayoutUnit(10), left_floating_object->y()); 915 EXPECT_THAT(left_floating_object->y(), LayoutUnit(10));
916 916
917 auto right_floating_object = floating_objects.takeFirst(); 917 auto right_floating_object = floating_objects.takeFirst();
918 ASSERT_TRUE(right_floating_object->isPlaced()); 918 ASSERT_TRUE(right_floating_object->isPlaced());
919 // 205 = float_inline_offset(25) + 919 // 205 = float_inline_offset(25) +
920 // accumulative offset of empty blocks(35 + 20) 920 // accumulative offset of empty blocks(35 + 20)
921 // + right float offset(125) 921 // + right float offset(125)
922 EXPECT_THAT(LayoutUnit(80) + right_float_offset, right_floating_object->x()); 922 EXPECT_THAT(right_floating_object->x(), LayoutUnit(80) + right_float_offset);
923 // 15 = right float's margin 923 // 15 = right float's margin
924 EXPECT_THAT(LayoutUnit(15), right_floating_object->y()); 924 EXPECT_THAT(right_floating_object->y(), LayoutUnit(15));
925 } 925 }
926 926
927 // Verifies that left/right floating and regular blocks can be positioned 927 // Verifies that left/right floating and regular blocks can be positioned
928 // correctly by the algorithm. 928 // correctly by the algorithm.
929 TEST_F(NGBlockLayoutAlgorithmTest, PositionFloatFragments) { 929 TEST_F(NGBlockLayoutAlgorithmTest, PositionFloatFragments) {
930 setBodyInnerHTML(R"HTML( 930 setBodyInnerHTML(R"HTML(
931 <style> 931 <style>
932 #container { 932 #container {
933 height: 200px; 933 height: 200px;
934 width: 200px; 934 width: 200px;
(...skipping 1330 matching lines...) Expand 10 before | Expand all | Expand 10 after
2265 2265
2266 child = iterator.NextChild(); 2266 child = iterator.NextChild();
2267 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(100)), child->Size()); 2267 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(100)), child->Size());
2268 EXPECT_EQ(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(40)), child->Offset()); 2268 EXPECT_EQ(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(40)), child->Offset());
2269 2269
2270 EXPECT_FALSE(iterator.NextChild()); 2270 EXPECT_FALSE(iterator.NextChild());
2271 } 2271 }
2272 2272
2273 } // namespace 2273 } // namespace
2274 } // namespace blink 2274 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698