| 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 |