OLD | NEW |
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 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 ToNGPhysicalBoxFragment(body_fragment->Children()[2].Get()); | 345 ToNGPhysicalBoxFragment(body_fragment->Children()[2].Get()); |
346 // 90 = first_child's height(50) + collapsed margins(-10) + | 346 // 90 = first_child's height(50) + collapsed margins(-10) + |
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(float_nonempties_fragment->TopOffset(), LayoutUnit(70)); | 357 EXPECT_THAT(float_nonempties_fragment->TopOffset(), LayoutUnit(70)); |
358 EXPECT_THAT(float_nonempties_fragment->LeftOffset(), LayoutUnit(0)); | 358 EXPECT_THAT(float_nonempties_fragment->LeftOffset(), LayoutUnit(0)); |
359 | 359 |
360 // ** Verify layout tree ** | 360 // ** Verify layout tree ** |
361 Element* first_child = GetDocument().getElementById("first-child"); | 361 Element* first_child = GetDocument().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 |
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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(empty2_fragment->LeftOffset(), LayoutUnit(empty2_inline_offset)); | 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(left_float_fragment->Offset(), | 880 EXPECT_THAT(left_float_fragment->Offset(), |
881 NGPhysicalOffset(LayoutUnit(25), LayoutUnit(10))); | 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 right_float_fragment->Offset(), | 890 right_float_fragment->Offset(), |
891 NGPhysicalOffset(LayoutUnit(25) + right_float_offset, LayoutUnit(15))); | 891 NGPhysicalOffset(LayoutUnit(25) + right_float_offset, LayoutUnit(15))); |
892 | 892 |
893 // ** Verify layout tree ** | 893 // ** Verify layout tree ** |
894 Element* left_float = GetDocument().getElementById("left-float"); | 894 Element* left_float = GetDocument().getElementById("left-float"); |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
990 ToNGPhysicalBoxFragment(container_fragment->Children()[0].Get()); | 990 ToNGPhysicalBoxFragment(container_fragment->Children()[0].Get()); |
991 ASSERT_EQ(2UL, container_fragment->PositionedFloats().size()); | 991 ASSERT_EQ(2UL, container_fragment->PositionedFloats().size()); |
992 ASSERT_EQ(2UL, regular_fragment->PositionedFloats().size()); | 992 ASSERT_EQ(2UL, regular_fragment->PositionedFloats().size()); |
993 | 993 |
994 // ** Verify layout tree ** | 994 // ** Verify layout tree ** |
995 Element* left_float = GetDocument().getElementById("left-float"); | 995 Element* left_float = GetDocument().getElementById("left-float"); |
996 // 8 = body's margin-top | 996 // 8 = body's margin-top |
997 int left_float_block_offset = 8; | 997 int left_float_block_offset = 8; |
998 EXPECT_EQ(left_float_block_offset, left_float->OffsetTop()); | 998 EXPECT_EQ(left_float_block_offset, left_float->OffsetTop()); |
999 auto left_float_fragment = | 999 auto left_float_fragment = |
1000 regular_fragment->PositionedFloats().at(0)->fragment; | 1000 regular_fragment->PositionedFloats().at(0).fragment; |
1001 EXPECT_THAT(LayoutUnit(), left_float_fragment->TopOffset()); | 1001 EXPECT_THAT(LayoutUnit(), left_float_fragment->TopOffset()); |
1002 | 1002 |
1003 Element* left_wide_float = GetDocument().getElementById("left-wide-float"); | 1003 Element* left_wide_float = GetDocument().getElementById("left-wide-float"); |
1004 // left-wide-float is positioned right below left-float as it's too wide. | 1004 // left-wide-float is positioned right below left-float as it's too wide. |
1005 // 38 = left_float_block_offset + | 1005 // 38 = left_float_block_offset + |
1006 // left-float's height 30 | 1006 // left-float's height 30 |
1007 int left_wide_float_block_offset = 38; | 1007 int left_wide_float_block_offset = 38; |
1008 EXPECT_EQ(left_wide_float_block_offset, left_wide_float->OffsetTop()); | 1008 EXPECT_EQ(left_wide_float_block_offset, left_wide_float->OffsetTop()); |
1009 auto left_wide_float_fragment = | 1009 auto left_wide_float_fragment = |
1010 regular_fragment->PositionedFloats().at(1)->fragment; | 1010 regular_fragment->PositionedFloats().at(1).fragment; |
1011 // 30 = left-float's height. | 1011 // 30 = left-float's height. |
1012 EXPECT_THAT(LayoutUnit(30), left_wide_float_fragment->TopOffset()); | 1012 EXPECT_THAT(LayoutUnit(30), left_wide_float_fragment->TopOffset()); |
1013 | 1013 |
1014 Element* regular = GetDocument().getElementById("regular"); | 1014 Element* regular = GetDocument().getElementById("regular"); |
1015 // regular_block_offset = body's margin-top 8 | 1015 // regular_block_offset = body's margin-top 8 |
1016 int regular_block_offset = 8; | 1016 int regular_block_offset = 8; |
1017 EXPECT_EQ(regular_block_offset, regular->OffsetTop()); | 1017 EXPECT_EQ(regular_block_offset, regular->OffsetTop()); |
1018 auto* regular_block_fragment = | 1018 auto* regular_block_fragment = |
1019 ToNGPhysicalBoxFragment(container_fragment->Children()[0].Get()); | 1019 ToNGPhysicalBoxFragment(container_fragment->Children()[0].Get()); |
1020 EXPECT_THAT(LayoutUnit(), regular_block_fragment->TopOffset()); | 1020 EXPECT_THAT(LayoutUnit(), regular_block_fragment->TopOffset()); |
1021 | 1021 |
1022 Element* right_float = GetDocument().getElementById("right-float"); | 1022 Element* right_float = GetDocument().getElementById("right-float"); |
1023 // 158 = body's margin-left 8 + container's width 200 - right_float's width 50 | 1023 // 158 = body's margin-left 8 + container's width 200 - right_float's width 50 |
1024 int right_float_inline_offset = 158; | 1024 int right_float_inline_offset = 158; |
1025 // it's positioned right after our left_wide_float | 1025 // it's positioned right after our left_wide_float |
1026 // 68 = left_wide_float_block_offset 38 + left-wide-float's height 30 | 1026 // 68 = left_wide_float_block_offset 38 + left-wide-float's height 30 |
1027 int right_float_block_offset = left_wide_float_block_offset + 30; | 1027 int right_float_block_offset = left_wide_float_block_offset + 30; |
1028 EXPECT_EQ(right_float_inline_offset, right_float->OffsetLeft()); | 1028 EXPECT_EQ(right_float_inline_offset, right_float->OffsetLeft()); |
1029 EXPECT_EQ(right_float_block_offset, right_float->OffsetTop()); | 1029 EXPECT_EQ(right_float_block_offset, right_float->OffsetTop()); |
1030 auto right_float_fragment = | 1030 auto right_float_fragment = |
1031 container_fragment->PositionedFloats().at(0)->fragment; | 1031 container_fragment->PositionedFloats().at(0).fragment; |
1032 // 60 = right_float_block_offset(68) - body's margin(8) | 1032 // 60 = right_float_block_offset(68) - body's margin(8) |
1033 EXPECT_THAT(LayoutUnit(right_float_block_offset - 8), | 1033 EXPECT_THAT(LayoutUnit(right_float_block_offset - 8), |
1034 right_float_fragment->TopOffset()); | 1034 right_float_fragment->TopOffset()); |
1035 // 150 = right_float_inline_offset(158) - body's margin(8) | 1035 // 150 = right_float_inline_offset(158) - body's margin(8) |
1036 EXPECT_THAT(LayoutUnit(right_float_inline_offset - 8), | 1036 EXPECT_THAT(LayoutUnit(right_float_inline_offset - 8), |
1037 right_float_fragment->LeftOffset()); | 1037 right_float_fragment->LeftOffset()); |
1038 | 1038 |
1039 Element* left_float_with_margin = | 1039 Element* left_float_with_margin = |
1040 GetDocument().getElementById("left-float-with-margin"); | 1040 GetDocument().getElementById("left-float-with-margin"); |
1041 // 18 = body's margin(8) + left-float-with-margin's margin(10) | 1041 // 18 = body's margin(8) + left-float-with-margin's margin(10) |
1042 int left_float_with_margin_inline_offset = 18; | 1042 int left_float_with_margin_inline_offset = 18; |
1043 EXPECT_EQ(left_float_with_margin_inline_offset, | 1043 EXPECT_EQ(left_float_with_margin_inline_offset, |
1044 left_float_with_margin->OffsetLeft()); | 1044 left_float_with_margin->OffsetLeft()); |
1045 // 78 = left_wide_float_block_offset 38 + left-wide-float's height 30 + | 1045 // 78 = left_wide_float_block_offset 38 + left-wide-float's height 30 + |
1046 // left-float-with-margin's margin(10) | 1046 // left-float-with-margin's margin(10) |
1047 int left_float_with_margin_block_offset = 78; | 1047 int left_float_with_margin_block_offset = 78; |
1048 EXPECT_EQ(left_float_with_margin_block_offset, | 1048 EXPECT_EQ(left_float_with_margin_block_offset, |
1049 left_float_with_margin->OffsetTop()); | 1049 left_float_with_margin->OffsetTop()); |
1050 auto left_float_with_margin_fragment = | 1050 auto left_float_with_margin_fragment = |
1051 container_fragment->PositionedFloats().at(1)->fragment; | 1051 container_fragment->PositionedFloats().at(1).fragment; |
1052 // 70 = left_float_with_margin_block_offset(78) - body's margin(8) | 1052 // 70 = left_float_with_margin_block_offset(78) - body's margin(8) |
1053 EXPECT_THAT(LayoutUnit(left_float_with_margin_block_offset - 8), | 1053 EXPECT_THAT(LayoutUnit(left_float_with_margin_block_offset - 8), |
1054 left_float_with_margin_fragment->TopOffset()); | 1054 left_float_with_margin_fragment->TopOffset()); |
1055 // 10 = left_float_with_margin_inline_offset(18) - body's margin(8) | 1055 // 10 = left_float_with_margin_inline_offset(18) - body's margin(8) |
1056 EXPECT_THAT(LayoutUnit(left_float_with_margin_inline_offset - 8), | 1056 EXPECT_THAT(LayoutUnit(left_float_with_margin_inline_offset - 8), |
1057 left_float_with_margin_fragment->LeftOffset()); | 1057 left_float_with_margin_fragment->LeftOffset()); |
1058 } | 1058 } |
1059 | 1059 |
1060 // Verifies that NG block layout algorithm respects "clear" CSS property. | 1060 // Verifies that NG block layout algorithm respects "clear" CSS property. |
1061 TEST_F(NGBlockLayoutAlgorithmTest, PositionFragmentsWithClear) { | 1061 TEST_F(NGBlockLayoutAlgorithmTest, PositionFragmentsWithClear) { |
(...skipping 1267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2329 run_test(Length(120, kFixed)); | 2329 run_test(Length(120, kFixed)); |
2330 // 30 = #float's height | 2330 // 30 = #float's height |
2331 EXPECT_THAT(new_fc_fragment->Offset(), | 2331 EXPECT_THAT(new_fc_fragment->Offset(), |
2332 NGPhysicalOffset(LayoutUnit(0), LayoutUnit(30))); | 2332 NGPhysicalOffset(LayoutUnit(0), LayoutUnit(30))); |
2333 // 8 = body's margins, no margin collapsing | 2333 // 8 = body's margins, no margin collapsing |
2334 EXPECT_THAT(body_fragment->Offset(), | 2334 EXPECT_THAT(body_fragment->Offset(), |
2335 NGPhysicalOffset(LayoutUnit(8), LayoutUnit(8))); | 2335 NGPhysicalOffset(LayoutUnit(8), LayoutUnit(8))); |
2336 } | 2336 } |
2337 } // namespace | 2337 } // namespace |
2338 } // namespace blink | 2338 } // namespace blink |
OLD | NEW |