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

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

Issue 2724133003: [LayoutNG] Switch NGConstraintSpace to being RefCounted. (Closed)
Patch Set: moar. Created 3 years, 9 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"
11 #include "core/layout/ng/ng_block_break_token.h" 11 #include "core/layout/ng/ng_block_break_token.h"
12 #include "core/layout/ng/ng_block_node.h" 12 #include "core/layout/ng/ng_block_node.h"
13 #include "core/layout/ng/ng_constraint_space.h" 13 #include "core/layout/ng/ng_constraint_space.h"
14 #include "core/layout/ng/ng_constraint_space_builder.h" 14 #include "core/layout/ng/ng_constraint_space_builder.h"
15 #include "core/layout/ng/ng_floating_object.h" 15 #include "core/layout/ng/ng_floating_object.h"
16 #include "core/layout/ng/ng_length_utils.h" 16 #include "core/layout/ng/ng_length_utils.h"
17 #include "core/layout/ng/ng_physical_box_fragment.h" 17 #include "core/layout/ng/ng_physical_box_fragment.h"
18 #include "core/layout/ng/ng_physical_fragment.h" 18 #include "core/layout/ng/ng_physical_fragment.h"
19 #include "core/layout/ng/ng_units.h" 19 #include "core/layout/ng/ng_units.h"
20 #include "core/style/ComputedStyle.h" 20 #include "core/style/ComputedStyle.h"
21 #include "testing/gmock/include/gmock/gmock.h" 21 #include "testing/gmock/include/gmock/gmock.h"
22 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
23 23
24 namespace blink { 24 namespace blink {
25 namespace { 25 namespace {
26 26
27 using testing::ElementsAre; 27 using testing::ElementsAre;
28 using testing::Pointee; 28 using testing::Pointee;
29 29
30 NGConstraintSpace* ConstructConstraintSpace( 30 RefPtr<NGConstraintSpace> ConstructConstraintSpace(
31 NGWritingMode writing_mode, 31 NGWritingMode writing_mode,
32 TextDirection direction, 32 TextDirection direction,
33 NGLogicalSize size, 33 NGLogicalSize size,
34 bool shrink_to_fit = false, 34 bool shrink_to_fit = false,
35 LayoutUnit fragmentainer_space_available = LayoutUnit()) { 35 LayoutUnit fragmentainer_space_available = LayoutUnit()) {
36 NGFragmentationType block_fragmentation = 36 NGFragmentationType block_fragmentation =
37 fragmentainer_space_available != LayoutUnit() 37 fragmentainer_space_available != LayoutUnit()
38 ? NGFragmentationType::kFragmentColumn 38 ? NGFragmentationType::kFragmentColumn
39 : NGFragmentationType::kFragmentNone; 39 : NGFragmentationType::kFragmentNone;
40 40
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 72
73 RefPtr<NGPhysicalBoxFragment> RunBlockLayoutAlgorithm( 73 RefPtr<NGPhysicalBoxFragment> RunBlockLayoutAlgorithm(
74 NGConstraintSpace* space, 74 NGConstraintSpace* space,
75 NGBlockNode* node) { 75 NGBlockNode* node) {
76 RefPtr<NGLayoutResult> result = 76 RefPtr<NGLayoutResult> result =
77 NGBlockLayoutAlgorithm(node, space).Layout(); 77 NGBlockLayoutAlgorithm(node, space).Layout();
78 78
79 return toNGPhysicalBoxFragment(result->PhysicalFragment().get()); 79 return toNGPhysicalBoxFragment(result->PhysicalFragment().get());
80 } 80 }
81 81
82 std::pair<RefPtr<NGPhysicalBoxFragment>, NGConstraintSpace*> 82 std::pair<RefPtr<NGPhysicalBoxFragment>, RefPtr<NGConstraintSpace>>
83 RunBlockLayoutAlgorithmForElement(Element* element) { 83 RunBlockLayoutAlgorithmForElement(Element* element) {
84 LayoutNGBlockFlow* block_flow = 84 LayoutNGBlockFlow* block_flow =
85 toLayoutNGBlockFlow(element->layoutObject()); 85 toLayoutNGBlockFlow(element->layoutObject());
86 NGBlockNode* node = new NGBlockNode(block_flow); 86 NGBlockNode* node = new NGBlockNode(block_flow);
87 NGConstraintSpace* space = 87 RefPtr<NGConstraintSpace> space =
88 NGConstraintSpace::CreateFromLayoutObject(*block_flow); 88 NGConstraintSpace::CreateFromLayoutObject(*block_flow);
89 89
90 RefPtr<NGLayoutResult> result = 90 RefPtr<NGLayoutResult> result =
91 NGBlockLayoutAlgorithm(node, space).Layout(); 91 NGBlockLayoutAlgorithm(node, space.get()).Layout();
92 return std::make_pair( 92 return std::make_pair(
93 toNGPhysicalBoxFragment(result->PhysicalFragment().get()), space); 93 toNGPhysicalBoxFragment(result->PhysicalFragment().get()), space);
94 } 94 }
95 95
96 MinAndMaxContentSizes RunComputeMinAndMax(NGBlockNode* node) { 96 MinAndMaxContentSizes RunComputeMinAndMax(NGBlockNode* node) {
97 // The constraint space is not used for min/max computation, but we need 97 // The constraint space is not used for min/max computation, but we need
98 // it to create the algorithm. 98 // it to create the algorithm.
99 NGConstraintSpace* space = 99 RefPtr<NGConstraintSpace> space =
100 ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::kLtr, 100 ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::kLtr,
101 NGLogicalSize(LayoutUnit(), LayoutUnit())); 101 NGLogicalSize(LayoutUnit(), LayoutUnit()));
102 102
103 NGBlockLayoutAlgorithm algorithm(node, space); 103 NGBlockLayoutAlgorithm algorithm(node, space.get());
104 EXPECT_TRUE(algorithm.ComputeMinAndMaxContentSizes().has_value()); 104 EXPECT_TRUE(algorithm.ComputeMinAndMaxContentSizes().has_value());
105 return *algorithm.ComputeMinAndMaxContentSizes(); 105 return *algorithm.ComputeMinAndMaxContentSizes();
106 } 106 }
107 107
108 RefPtr<ComputedStyle> style_; 108 RefPtr<ComputedStyle> style_;
109 }; 109 };
110 110
111 TEST_F(NGBlockLayoutAlgorithmTest, FixedSize) { 111 TEST_F(NGBlockLayoutAlgorithmTest, FixedSize) {
112 setBodyInnerHTML(R"HTML( 112 setBodyInnerHTML(R"HTML(
113 <div id="box" style="width:30px; height:40px"></div> 113 <div id="box" style="width:30px; height:40px"></div>
114 )HTML"); 114 )HTML");
115 115
116 auto* space = ConstructConstraintSpace( 116 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
117 kHorizontalTopBottom, TextDirection::kLtr, 117 kHorizontalTopBottom, TextDirection::kLtr,
118 NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); 118 NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
119 119
120 auto* box = new NGBlockNode(getLayoutObjectByElementId("box")); 120 auto* box = new NGBlockNode(getLayoutObjectByElementId("box"));
121 121
122 RefPtr<NGPhysicalFragment> frag = RunBlockLayoutAlgorithm(space, box); 122 RefPtr<NGPhysicalFragment> frag = RunBlockLayoutAlgorithm(space.get(), box);
123 123
124 EXPECT_EQ(LayoutUnit(30), frag->Width()); 124 EXPECT_EQ(LayoutUnit(30), frag->Width());
125 EXPECT_EQ(LayoutUnit(40), frag->Height()); 125 EXPECT_EQ(LayoutUnit(40), frag->Height());
126 } 126 }
127 127
128 // Verifies that two children are laid out with the correct size and position. 128 // Verifies that two children are laid out with the correct size and position.
129 TEST_F(NGBlockLayoutAlgorithmTest, LayoutBlockChildren) { 129 TEST_F(NGBlockLayoutAlgorithmTest, LayoutBlockChildren) {
130 setBodyInnerHTML(R"HTML( 130 setBodyInnerHTML(R"HTML(
131 <div id="container" style="width: 30px"> 131 <div id="container" style="width: 30px">
132 <div style="height: 20px"> 132 <div style="height: 20px">
133 </div> 133 </div>
134 <div style="height: 30px; margin-top: 5px; margin-bottom: 20px"> 134 <div style="height: 30px; margin-top: 5px; margin-bottom: 20px">
135 </div> 135 </div>
136 </div> 136 </div>
137 )HTML"); 137 )HTML");
138 const int kWidth = 30; 138 const int kWidth = 30;
139 const int kHeight1 = 20; 139 const int kHeight1 = 20;
140 const int kHeight2 = 30; 140 const int kHeight2 = 30;
141 const int kMarginTop = 5; 141 const int kMarginTop = 5;
142 142
143 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 143 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
144 auto* space = ConstructConstraintSpace( 144 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
145 kHorizontalTopBottom, TextDirection::kLtr, 145 kHorizontalTopBottom, TextDirection::kLtr,
146 NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); 146 NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
147 147
148 RefPtr<NGPhysicalBoxFragment> frag = 148 RefPtr<NGPhysicalBoxFragment> frag =
149 RunBlockLayoutAlgorithm(space, container); 149 RunBlockLayoutAlgorithm(space.get(), container);
150 150
151 EXPECT_EQ(LayoutUnit(kWidth), frag->Width()); 151 EXPECT_EQ(LayoutUnit(kWidth), frag->Width());
152 EXPECT_EQ(LayoutUnit(kHeight1 + kHeight2 + kMarginTop), frag->Height()); 152 EXPECT_EQ(LayoutUnit(kHeight1 + kHeight2 + kMarginTop), frag->Height());
153 EXPECT_EQ(NGPhysicalFragment::kFragmentBox, frag->Type()); 153 EXPECT_EQ(NGPhysicalFragment::kFragmentBox, frag->Type());
154 ASSERT_EQ(frag->Children().size(), 2UL); 154 ASSERT_EQ(frag->Children().size(), 2UL);
155 155
156 const NGPhysicalFragment* first_child_fragment = frag->Children()[0].get(); 156 const NGPhysicalFragment* first_child_fragment = frag->Children()[0].get();
157 EXPECT_EQ(kHeight1, first_child_fragment->Height()); 157 EXPECT_EQ(kHeight1, first_child_fragment->Height());
158 EXPECT_EQ(0, first_child_fragment->TopOffset()); 158 EXPECT_EQ(0, first_child_fragment->TopOffset());
159 159
(...skipping 18 matching lines...) Expand all
178 <div id="div1" style="writing-mode: vertical-lr;"> 178 <div id="div1" style="writing-mode: vertical-lr;">
179 <div id="div2"> 179 <div id="div2">
180 </div> 180 </div>
181 </div> 181 </div>
182 </div> 182 </div>
183 )HTML"); 183 )HTML");
184 const int kHeight = 50; 184 const int kHeight = 50;
185 const int kMarginLeft = 100; 185 const int kMarginLeft = 100;
186 186
187 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 187 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
188 auto* space = 188 RefPtr<NGConstraintSpace> space =
189 ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::kLtr, 189 ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::kLtr,
190 NGLogicalSize(LayoutUnit(500), LayoutUnit(500))); 190 NGLogicalSize(LayoutUnit(500), LayoutUnit(500)));
191 RefPtr<NGPhysicalBoxFragment> frag = 191 RefPtr<NGPhysicalBoxFragment> frag =
192 RunBlockLayoutAlgorithm(space, container); 192 RunBlockLayoutAlgorithm(space.get(), container);
193 193
194 const NGPhysicalFragment* child = frag->Children()[0].get(); 194 const NGPhysicalFragment* child = frag->Children()[0].get();
195 // DIV2 195 // DIV2
196 child = static_cast<const NGPhysicalBoxFragment*>(child)->Children()[0].get(); 196 child = static_cast<const NGPhysicalBoxFragment*>(child)->Children()[0].get();
197 197
198 EXPECT_EQ(kHeight, child->Height()); 198 EXPECT_EQ(kHeight, child->Height());
199 EXPECT_EQ(0, child->TopOffset()); 199 EXPECT_EQ(0, child->TopOffset());
200 EXPECT_EQ(kMarginLeft, child->LeftOffset()); 200 EXPECT_EQ(kMarginLeft, child->LeftOffset());
201 } 201 }
202 202
(...skipping 30 matching lines...) Expand all
233 } 233 }
234 </style> 234 </style>
235 <div id='container'> 235 <div id='container'>
236 <div id='float-child-left'></div> 236 <div id='float-child-left'></div>
237 <div id='float-child-right'></div> 237 <div id='float-child-right'></div>
238 <div id='first-child'></div> 238 <div id='first-child'></div>
239 </div> 239 </div>
240 )HTML"); 240 )HTML");
241 241
242 // ** Run LayoutNG algorithm ** 242 // ** Run LayoutNG algorithm **
243 NGConstraintSpace* space; 243 RefPtr<NGConstraintSpace> space;
244 RefPtr<NGPhysicalBoxFragment> fragment; 244 RefPtr<NGPhysicalBoxFragment> fragment;
245 std::tie(fragment, space) = RunBlockLayoutAlgorithmForElement( 245 std::tie(fragment, space) = RunBlockLayoutAlgorithmForElement(
246 document().getElementsByTagName("html")->item(0)); 246 document().getElementsByTagName("html")->item(0));
247 ASSERT_EQ(fragment->Children().size(), 1UL); 247 ASSERT_EQ(fragment->Children().size(), 1UL);
248 auto* body_fragment = toNGPhysicalBoxFragment(fragment->Children()[0].get()); 248 auto* body_fragment = toNGPhysicalBoxFragment(fragment->Children()[0].get());
249 // 20 = max(first child's margin top, containers's margin top) 249 // 20 = max(first child's margin top, containers's margin top)
250 int body_top_offset = 20; 250 int body_top_offset = 20;
251 EXPECT_THAT(LayoutUnit(body_top_offset), body_fragment->TopOffset()); 251 EXPECT_THAT(LayoutUnit(body_top_offset), body_fragment->TopOffset());
252 // 8 = body's margin 252 // 8 = body's margin
253 int body_left_offset = 8; 253 int body_left_offset = 8;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 <div id='float-between-nonempties'></div> 352 <div id='float-between-nonempties'></div>
353 <div id='second-child'> 353 <div id='second-child'>
354 <div id='float-top-align'></div> 354 <div id='float-top-align'></div>
355 <div id='empty3'></div> 355 <div id='empty3'></div>
356 <div id='empty4' style='margin-top: -30px'></div> 356 <div id='empty4' style='margin-top: -30px'></div>
357 </div> 357 </div>
358 <div id='empty5'></div> 358 <div id='empty5'></div>
359 )HTML"); 359 )HTML");
360 360
361 // ** Run LayoutNG algorithm ** 361 // ** Run LayoutNG algorithm **
362 NGConstraintSpace* space; 362 RefPtr<NGConstraintSpace> space;
363 RefPtr<NGPhysicalBoxFragment> fragment; 363 RefPtr<NGPhysicalBoxFragment> fragment;
364 std::tie(fragment, space) = RunBlockLayoutAlgorithmForElement( 364 std::tie(fragment, space) = RunBlockLayoutAlgorithmForElement(
365 document().getElementsByTagName("html")->item(0)); 365 document().getElementsByTagName("html")->item(0));
366 366
367 auto* body_fragment = toNGPhysicalBoxFragment(fragment->Children()[0].get()); 367 auto* body_fragment = toNGPhysicalBoxFragment(fragment->Children()[0].get());
368 // -7 = empty1's margin(-15) + body's margin(8) 368 // -7 = empty1's margin(-15) + body's margin(8)
369 int body_top_offset = -7; 369 int body_top_offset = -7;
370 EXPECT_THAT(LayoutUnit(body_top_offset), body_fragment->TopOffset()); 370 EXPECT_THAT(LayoutUnit(body_top_offset), body_fragment->TopOffset());
371 int body_left_offset = 8; 371 int body_left_offset = 8;
372 EXPECT_THAT(LayoutUnit(body_top_offset), body_fragment->TopOffset()); 372 EXPECT_THAT(LayoutUnit(body_top_offset), body_fragment->TopOffset());
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 <div id="div2">vertical</div> 677 <div id="div2">vertical</div>
678 </div> 678 </div>
679 <div id="div3"></div> 679 <div id="div3"></div>
680 </div> 680 </div>
681 )HTML"); 681 )HTML");
682 const int kHeight = 60; 682 const int kHeight = 60;
683 const int kMarginBottom = 10; 683 const int kMarginBottom = 10;
684 const int kMarginTop = 40; 684 const int kMarginTop = 40;
685 685
686 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 686 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
687 auto* space = 687 RefPtr<NGConstraintSpace> space =
688 ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::kLtr, 688 ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::kLtr,
689 NGLogicalSize(LayoutUnit(500), LayoutUnit(500))); 689 NGLogicalSize(LayoutUnit(500), LayoutUnit(500)));
690 RefPtr<NGPhysicalBoxFragment> frag = 690 RefPtr<NGPhysicalBoxFragment> frag =
691 RunBlockLayoutAlgorithm(space, container); 691 RunBlockLayoutAlgorithm(space.get(), container);
692 692
693 ASSERT_EQ(frag->Children().size(), 2UL); 693 ASSERT_EQ(frag->Children().size(), 2UL);
694 694
695 const NGPhysicalFragment* child1 = frag->Children()[0].get(); 695 const NGPhysicalFragment* child1 = frag->Children()[0].get();
696 EXPECT_EQ(0, child1->TopOffset()); 696 EXPECT_EQ(0, child1->TopOffset());
697 EXPECT_EQ(kHeight, child1->Height()); 697 EXPECT_EQ(kHeight, child1->Height());
698 698
699 const NGPhysicalFragment* child2 = frag->Children()[1].get(); 699 const NGPhysicalFragment* child2 = frag->Children()[1].get();
700 EXPECT_EQ(kHeight + std::max(kMarginBottom, kMarginTop), child2->TopOffset()); 700 EXPECT_EQ(kHeight + std::max(kMarginBottom, kMarginTop), child2->TopOffset());
701 } 701 }
(...skipping 23 matching lines...) Expand all
725 const int kBorderRight = 2; 725 const int kBorderRight = 2;
726 const int kBorderBottom = 3; 726 const int kBorderBottom = 3;
727 const int kBorderLeft = 4; 727 const int kBorderLeft = 4;
728 const int kPaddingTop = 5; 728 const int kPaddingTop = 5;
729 const int kPaddingRight = 6; 729 const int kPaddingRight = 6;
730 const int kPaddingBottom = 7; 730 const int kPaddingBottom = 7;
731 const int kPaddingLeft = 8; 731 const int kPaddingLeft = 8;
732 732
733 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 733 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
734 734
735 auto* space = ConstructConstraintSpace( 735 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
736 kHorizontalTopBottom, TextDirection::kLtr, 736 kHorizontalTopBottom, TextDirection::kLtr,
737 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); 737 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite));
738 738
739 RefPtr<NGPhysicalBoxFragment> frag = 739 RefPtr<NGPhysicalBoxFragment> frag =
740 RunBlockLayoutAlgorithm(space, container); 740 RunBlockLayoutAlgorithm(space.get(), container);
741 741
742 ASSERT_EQ(frag->Children().size(), 1UL); 742 ASSERT_EQ(frag->Children().size(), 1UL);
743 743
744 // div1 744 // div1
745 const NGPhysicalFragment* child = frag->Children()[0].get(); 745 const NGPhysicalFragment* child = frag->Children()[0].get();
746 EXPECT_EQ(kBorderLeft + kPaddingLeft + kWidth + kPaddingRight + kBorderRight, 746 EXPECT_EQ(kBorderLeft + kPaddingLeft + kWidth + kPaddingRight + kBorderRight,
747 child->Width()); 747 child->Width());
748 EXPECT_EQ(kBorderTop + kPaddingTop + kHeight + kPaddingBottom + kBorderBottom, 748 EXPECT_EQ(kBorderTop + kPaddingTop + kHeight + kPaddingBottom + kBorderBottom,
749 child->Height()); 749 child->Height());
750 750
(...skipping 11 matching lines...) Expand all
762 setBodyInnerHTML(R"HTML( 762 setBodyInnerHTML(R"HTML(
763 <div id="container" style="width: 30px; padding-left: 10px"> 763 <div id="container" style="width: 30px; padding-left: 10px">
764 <div id="div1" style="width: 40%"></div> 764 <div id="div1" style="width: 40%"></div>
765 </div> 765 </div>
766 )HTML"); 766 )HTML");
767 const int kPaddingLeft = 10; 767 const int kPaddingLeft = 10;
768 const int kWidth = 30; 768 const int kWidth = 30;
769 769
770 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 770 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
771 771
772 auto* space = ConstructConstraintSpace( 772 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
773 kHorizontalTopBottom, TextDirection::kLtr, 773 kHorizontalTopBottom, TextDirection::kLtr,
774 NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); 774 NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
775 RefPtr<NGPhysicalBoxFragment> frag = 775 RefPtr<NGPhysicalBoxFragment> frag =
776 RunBlockLayoutAlgorithm(space, container); 776 RunBlockLayoutAlgorithm(space.get(), container);
777 777
778 EXPECT_EQ(LayoutUnit(kWidth + kPaddingLeft), frag->Width()); 778 EXPECT_EQ(LayoutUnit(kWidth + kPaddingLeft), frag->Width());
779 EXPECT_EQ(NGPhysicalFragment::kFragmentBox, frag->Type()); 779 EXPECT_EQ(NGPhysicalFragment::kFragmentBox, frag->Type());
780 ASSERT_EQ(frag->Children().size(), 1UL); 780 ASSERT_EQ(frag->Children().size(), 1UL);
781 781
782 const NGPhysicalFragment* child = frag->Children()[0].get(); 782 const NGPhysicalFragment* child = frag->Children()[0].get();
783 EXPECT_EQ(LayoutUnit(12), child->Width()); 783 EXPECT_EQ(LayoutUnit(12), child->Width());
784 } 784 }
785 785
786 // A very simple auto margin case. We rely on the tests in ng_length_utils_test 786 // A very simple auto margin case. We rely on the tests in ng_length_utils_test
787 // for the more complex cases; just make sure we handle auto at all here. 787 // for the more complex cases; just make sure we handle auto at all here.
788 TEST_F(NGBlockLayoutAlgorithmTest, AutoMargin) { 788 TEST_F(NGBlockLayoutAlgorithmTest, AutoMargin) {
789 setBodyInnerHTML(R"HTML( 789 setBodyInnerHTML(R"HTML(
790 <style> 790 <style>
791 #first { width: 10px; margin-left: auto; margin-right: auto; } 791 #first { width: 10px; margin-left: auto; margin-right: auto; }
792 </style> 792 </style>
793 <div id="container" style="width: 30px; padding-left: 10px"> 793 <div id="container" style="width: 30px; padding-left: 10px">
794 <div id="first"> 794 <div id="first">
795 </div> 795 </div>
796 </div> 796 </div>
797 )HTML"); 797 )HTML");
798 const int kPaddingLeft = 10; 798 const int kPaddingLeft = 10;
799 const int kWidth = 30; 799 const int kWidth = 30;
800 const int kChildWidth = 10; 800 const int kChildWidth = 10;
801 801
802 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 802 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
803 803
804 auto* space = ConstructConstraintSpace( 804 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
805 kHorizontalTopBottom, TextDirection::kLtr, 805 kHorizontalTopBottom, TextDirection::kLtr,
806 NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); 806 NGLogicalSize(LayoutUnit(100), NGSizeIndefinite));
807 RefPtr<NGPhysicalBoxFragment> frag = 807 RefPtr<NGPhysicalBoxFragment> frag =
808 RunBlockLayoutAlgorithm(space, container); 808 RunBlockLayoutAlgorithm(space.get(), container);
809 809
810 EXPECT_EQ(LayoutUnit(kWidth + kPaddingLeft), frag->Width()); 810 EXPECT_EQ(LayoutUnit(kWidth + kPaddingLeft), frag->Width());
811 EXPECT_EQ(NGPhysicalFragment::kFragmentBox, frag->Type()); 811 EXPECT_EQ(NGPhysicalFragment::kFragmentBox, frag->Type());
812 EXPECT_EQ(LayoutUnit(kWidth + kPaddingLeft), frag->WidthOverflow()); 812 EXPECT_EQ(LayoutUnit(kWidth + kPaddingLeft), frag->WidthOverflow());
813 ASSERT_EQ(1UL, frag->Children().size()); 813 ASSERT_EQ(1UL, frag->Children().size());
814 814
815 const NGPhysicalFragment* child = frag->Children()[0].get(); 815 const NGPhysicalFragment* child = frag->Children()[0].get();
816 EXPECT_EQ(LayoutUnit(kChildWidth), child->Width()); 816 EXPECT_EQ(LayoutUnit(kChildWidth), child->Width());
817 EXPECT_EQ(LayoutUnit(kPaddingLeft + 10), child->LeftOffset()); 817 EXPECT_EQ(LayoutUnit(kPaddingLeft + 10), child->LeftOffset());
818 EXPECT_EQ(LayoutUnit(0), child->TopOffset()); 818 EXPECT_EQ(LayoutUnit(0), child->TopOffset());
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 <div id='empty1'> 856 <div id='empty1'>
857 <div id='empty2'> 857 <div id='empty2'>
858 <div id='left-float'></div> 858 <div id='left-float'></div>
859 <div id='right-float'></div> 859 <div id='right-float'></div>
860 </div> 860 </div>
861 </div> 861 </div>
862 </div> 862 </div>
863 )HTML"); 863 )HTML");
864 864
865 // ** Run LayoutNG algorithm ** 865 // ** Run LayoutNG algorithm **
866 NGConstraintSpace* space; 866 RefPtr<NGConstraintSpace> space;
867 RefPtr<NGPhysicalBoxFragment> fragment; 867 RefPtr<NGPhysicalBoxFragment> fragment;
868 std::tie(fragment, space) = RunBlockLayoutAlgorithmForElement( 868 std::tie(fragment, space) = RunBlockLayoutAlgorithmForElement(
869 document().getElementsByTagName("html")->item(0)); 869 document().getElementsByTagName("html")->item(0));
870 870
871 auto* body_fragment = toNGPhysicalBoxFragment(fragment->Children()[0].get()); 871 auto* body_fragment = toNGPhysicalBoxFragment(fragment->Children()[0].get());
872 // 20 = std::max(empty1's margin, empty2's margin, body's margin) 872 // 20 = std::max(empty1's margin, empty2's margin, body's margin)
873 int body_top_offset = 20; 873 int body_top_offset = 20;
874 EXPECT_THAT(LayoutUnit(body_top_offset), body_fragment->TopOffset()); 874 EXPECT_THAT(LayoutUnit(body_top_offset), body_fragment->TopOffset());
875 ASSERT_EQ(1UL, body_fragment->Children().size()); 875 ASSERT_EQ(1UL, body_fragment->Children().size());
876 auto* container_fragment = 876 auto* container_fragment =
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
989 <div id='container'> 989 <div id='container'>
990 <div id='left-float'></div> 990 <div id='left-float'></div>
991 <div id='left-wide-float'></div> 991 <div id='left-wide-float'></div>
992 <div id='regular'></div> 992 <div id='regular'></div>
993 <div id='right-float'></div> 993 <div id='right-float'></div>
994 <div id='left-float-with-margin'></div> 994 <div id='left-float-with-margin'></div>
995 </div> 995 </div>
996 )HTML"); 996 )HTML");
997 997
998 // ** Run LayoutNG algorithm ** 998 // ** Run LayoutNG algorithm **
999 NGConstraintSpace* space; 999 RefPtr<NGConstraintSpace> space;
1000 RefPtr<NGPhysicalBoxFragment> fragment; 1000 RefPtr<NGPhysicalBoxFragment> fragment;
1001 std::tie(fragment, space) = RunBlockLayoutAlgorithmForElement( 1001 std::tie(fragment, space) = RunBlockLayoutAlgorithmForElement(
1002 document().getElementsByTagName("html")->item(0)); 1002 document().getElementsByTagName("html")->item(0));
1003 1003
1004 // ** Verify LayoutNG fragments and the list of positioned floats ** 1004 // ** Verify LayoutNG fragments and the list of positioned floats **
1005 ASSERT_EQ(1UL, fragment->Children().size()); 1005 ASSERT_EQ(1UL, fragment->Children().size());
1006 auto* body_fragment = toNGPhysicalBoxFragment(fragment->Children()[0].get()); 1006 auto* body_fragment = toNGPhysicalBoxFragment(fragment->Children()[0].get());
1007 EXPECT_THAT(LayoutUnit(8), body_fragment->TopOffset()); 1007 EXPECT_THAT(LayoutUnit(8), body_fragment->TopOffset());
1008 auto* container_fragment = 1008 auto* container_fragment =
1009 toNGPhysicalBoxFragment(body_fragment->Children()[0].get()); 1009 toNGPhysicalBoxFragment(body_fragment->Children()[0].get());
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
1270 setBodyInnerHTML(R"HTML( 1270 setBodyInnerHTML(R"HTML(
1271 <div id="container"> 1271 <div id="container">
1272 <div id="first-child" style="width: 20px"></div> 1272 <div id="first-child" style="width: 20px"></div>
1273 <div id="second-child" style="width: 30px"></div> 1273 <div id="second-child" style="width: 30px"></div>
1274 </div> 1274 </div>
1275 )HTML"); 1275 )HTML");
1276 const int kWidthChild2 = 30; 1276 const int kWidthChild2 = 30;
1277 1277
1278 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 1278 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
1279 1279
1280 auto* space = ConstructConstraintSpace( 1280 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
1281 kHorizontalTopBottom, TextDirection::kLtr, 1281 kHorizontalTopBottom, TextDirection::kLtr,
1282 NGLogicalSize(LayoutUnit(100), NGSizeIndefinite), true); 1282 NGLogicalSize(LayoutUnit(100), NGSizeIndefinite), true);
1283 RefPtr<NGPhysicalFragment> frag = RunBlockLayoutAlgorithm(space, container); 1283 RefPtr<NGPhysicalFragment> frag =
1284 RunBlockLayoutAlgorithm(space.get(), container);
1284 1285
1285 EXPECT_EQ(LayoutUnit(kWidthChild2), frag->Width()); 1286 EXPECT_EQ(LayoutUnit(kWidthChild2), frag->Width());
1286 } 1287 }
1287 1288
1288 class FragmentChildIterator { 1289 class FragmentChildIterator {
1289 STACK_ALLOCATED(); 1290 STACK_ALLOCATED();
1290 1291
1291 public: 1292 public:
1292 explicit FragmentChildIterator(const NGPhysicalBoxFragment* parent) { 1293 explicit FragmentChildIterator(const NGPhysicalBoxFragment* parent) {
1293 SetParent(parent); 1294 SetParent(parent);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1329 width: 210px; 1330 width: 210px;
1330 } 1331 }
1331 </style> 1332 </style>
1332 <div id="container"> 1333 <div id="container">
1333 <div id="parent"> 1334 <div id="parent">
1334 </div> 1335 </div>
1335 </div> 1336 </div>
1336 )HTML"); 1337 )HTML");
1337 1338
1338 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 1339 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
1339 auto* space = ConstructConstraintSpace( 1340 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
1340 kHorizontalTopBottom, TextDirection::kLtr, 1341 kHorizontalTopBottom, TextDirection::kLtr,
1341 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); 1342 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite));
1342 RefPtr<const NGPhysicalBoxFragment> parent_fragment = 1343 RefPtr<const NGPhysicalBoxFragment> parent_fragment =
1343 RunBlockLayoutAlgorithm(space, container); 1344 RunBlockLayoutAlgorithm(space.get(), container);
1344 FragmentChildIterator iterator(parent_fragment.get()); 1345 FragmentChildIterator iterator(parent_fragment.get());
1345 const auto* fragment = iterator.NextChild(); 1346 const auto* fragment = iterator.NextChild();
1346 ASSERT_TRUE(fragment); 1347 ASSERT_TRUE(fragment);
1347 EXPECT_EQ(LayoutUnit(210), fragment->Width()); 1348 EXPECT_EQ(LayoutUnit(210), fragment->Width());
1348 EXPECT_EQ(LayoutUnit(100), fragment->Height()); 1349 EXPECT_EQ(LayoutUnit(100), fragment->Height());
1349 EXPECT_FALSE(iterator.NextChild()); 1350 EXPECT_FALSE(iterator.NextChild());
1350 1351
1351 // There should be nothing inside the multicol container. 1352 // There should be nothing inside the multicol container.
1352 EXPECT_FALSE(FragmentChildIterator(fragment).NextChild()); 1353 EXPECT_FALSE(FragmentChildIterator(fragment).NextChild());
1353 } 1354 }
(...skipping 10 matching lines...) Expand all
1364 </style> 1365 </style>
1365 <div id="container"> 1366 <div id="container">
1366 <div id="parent"> 1367 <div id="parent">
1367 <div id="child"> 1368 <div id="child">
1368 </div> 1369 </div>
1369 </div> 1370 </div>
1370 </div> 1371 </div>
1371 )HTML"); 1372 )HTML");
1372 1373
1373 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 1374 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
1374 auto* space = ConstructConstraintSpace( 1375 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
1375 kHorizontalTopBottom, TextDirection::kLtr, 1376 kHorizontalTopBottom, TextDirection::kLtr,
1376 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); 1377 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite));
1377 RefPtr<const NGPhysicalBoxFragment> parent_fragment = 1378 RefPtr<const NGPhysicalBoxFragment> parent_fragment =
1378 RunBlockLayoutAlgorithm(space, container); 1379 RunBlockLayoutAlgorithm(space.get(), container);
1379 FragmentChildIterator iterator(parent_fragment.get()); 1380 FragmentChildIterator iterator(parent_fragment.get());
1380 const auto* fragment = iterator.NextChild(); 1381 const auto* fragment = iterator.NextChild();
1381 EXPECT_EQ(LayoutUnit(210), fragment->Width()); 1382 EXPECT_EQ(LayoutUnit(210), fragment->Width());
1382 EXPECT_EQ(LayoutUnit(100), fragment->Height()); 1383 EXPECT_EQ(LayoutUnit(100), fragment->Height());
1383 ASSERT_TRUE(fragment); 1384 ASSERT_TRUE(fragment);
1384 EXPECT_FALSE(iterator.NextChild()); 1385 EXPECT_FALSE(iterator.NextChild());
1385 iterator.SetParent(fragment); 1386 iterator.SetParent(fragment);
1386 1387
1387 // #child fragment in first column 1388 // #child fragment in first column
1388 fragment = iterator.NextChild(); 1389 fragment = iterator.NextChild();
(...skipping 21 matching lines...) Expand all
1410 </style> 1411 </style>
1411 <div id="container"> 1412 <div id="container">
1412 <div id="parent"> 1413 <div id="parent">
1413 <div id="child" style="width: 60%; height: 100%"> 1414 <div id="child" style="width: 60%; height: 100%">
1414 </div> 1415 </div>
1415 </div> 1416 </div>
1416 </div> 1417 </div>
1417 )HTML"); 1418 )HTML");
1418 1419
1419 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 1420 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
1420 auto* space = ConstructConstraintSpace( 1421 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
1421 kHorizontalTopBottom, TextDirection::kLtr, 1422 kHorizontalTopBottom, TextDirection::kLtr,
1422 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); 1423 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite));
1423 RefPtr<const NGPhysicalBoxFragment> parent_fragment = 1424 RefPtr<const NGPhysicalBoxFragment> parent_fragment =
1424 RunBlockLayoutAlgorithm(space, container); 1425 RunBlockLayoutAlgorithm(space.get(), container);
1425 1426
1426 FragmentChildIterator iterator(parent_fragment.get()); 1427 FragmentChildIterator iterator(parent_fragment.get());
1427 const auto* fragment = iterator.NextChild(); 1428 const auto* fragment = iterator.NextChild();
1428 ASSERT_TRUE(fragment); 1429 ASSERT_TRUE(fragment);
1429 EXPECT_EQ(LayoutUnit(310), fragment->Width()); 1430 EXPECT_EQ(LayoutUnit(310), fragment->Width());
1430 EXPECT_EQ(LayoutUnit(100), fragment->Height()); 1431 EXPECT_EQ(LayoutUnit(100), fragment->Height());
1431 EXPECT_FALSE(iterator.NextChild()); 1432 EXPECT_FALSE(iterator.NextChild());
1432 iterator.SetParent(fragment); 1433 iterator.SetParent(fragment);
1433 1434
1434 // #child fragment in first column 1435 // #child fragment in first column
(...skipping 21 matching lines...) Expand all
1456 } 1457 }
1457 </style> 1458 </style>
1458 <div id="container"> 1459 <div id="container">
1459 <div id="parent"> 1460 <div id="parent">
1460 <div id="child" style="width: 75%; height: 150px"></div> 1461 <div id="child" style="width: 75%; height: 150px"></div>
1461 </div> 1462 </div>
1462 </div> 1463 </div>
1463 )HTML"); 1464 )HTML");
1464 1465
1465 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 1466 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
1466 auto* space = ConstructConstraintSpace( 1467 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
1467 kHorizontalTopBottom, TextDirection::kLtr, 1468 kHorizontalTopBottom, TextDirection::kLtr,
1468 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); 1469 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite));
1469 RefPtr<const NGPhysicalBoxFragment> parent_fragment = 1470 RefPtr<const NGPhysicalBoxFragment> parent_fragment =
1470 RunBlockLayoutAlgorithm(space, container); 1471 RunBlockLayoutAlgorithm(space.get(), container);
1471 1472
1472 FragmentChildIterator iterator(parent_fragment.get()); 1473 FragmentChildIterator iterator(parent_fragment.get());
1473 const auto* fragment = iterator.NextChild(); 1474 const auto* fragment = iterator.NextChild();
1474 ASSERT_TRUE(fragment); 1475 ASSERT_TRUE(fragment);
1475 EXPECT_EQ(LayoutUnit(210), fragment->Width()); 1476 EXPECT_EQ(LayoutUnit(210), fragment->Width());
1476 EXPECT_EQ(LayoutUnit(100), fragment->Height()); 1477 EXPECT_EQ(LayoutUnit(100), fragment->Height());
1477 EXPECT_FALSE(iterator.NextChild()); 1478 EXPECT_FALSE(iterator.NextChild());
1478 1479
1479 iterator.SetParent(fragment); 1480 iterator.SetParent(fragment);
1480 // #child fragment in first column 1481 // #child fragment in first column
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1512 </style> 1513 </style>
1513 <div id="container"> 1514 <div id="container">
1514 <div id="parent"> 1515 <div id="parent">
1515 <div id="child" style="width: 75%; height: 250px;"> 1516 <div id="child" style="width: 75%; height: 250px;">
1516 </div> 1517 </div>
1517 </div> 1518 </div>
1518 </div> 1519 </div>
1519 )HTML"); 1520 )HTML");
1520 1521
1521 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 1522 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
1522 auto* space = ConstructConstraintSpace( 1523 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
1523 kHorizontalTopBottom, TextDirection::kLtr, 1524 kHorizontalTopBottom, TextDirection::kLtr,
1524 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); 1525 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite));
1525 RefPtr<const NGPhysicalBoxFragment> parent_fragment = 1526 RefPtr<const NGPhysicalBoxFragment> parent_fragment =
1526 RunBlockLayoutAlgorithm(space, container); 1527 RunBlockLayoutAlgorithm(space.get(), container);
1527 1528
1528 FragmentChildIterator iterator(parent_fragment.get()); 1529 FragmentChildIterator iterator(parent_fragment.get());
1529 const auto* fragment = iterator.NextChild(); 1530 const auto* fragment = iterator.NextChild();
1530 ASSERT_TRUE(fragment); 1531 ASSERT_TRUE(fragment);
1531 EXPECT_EQ(LayoutUnit(320), fragment->Width()); 1532 EXPECT_EQ(LayoutUnit(320), fragment->Width());
1532 EXPECT_EQ(LayoutUnit(100), fragment->Height()); 1533 EXPECT_EQ(LayoutUnit(100), fragment->Height());
1533 EXPECT_FALSE(iterator.NextChild()); 1534 EXPECT_FALSE(iterator.NextChild());
1534 1535
1535 iterator.SetParent(fragment); 1536 iterator.SetParent(fragment);
1536 // #child fragment in first column 1537 // #child fragment in first column
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1578 </style> 1579 </style>
1579 <div id="container"> 1580 <div id="container">
1580 <div id="parent"> 1581 <div id="parent">
1581 <div id="child" style="width: 1px; height: 250px;"> 1582 <div id="child" style="width: 1px; height: 250px;">
1582 </div> 1583 </div>
1583 </div> 1584 </div>
1584 </div> 1585 </div>
1585 )HTML"); 1586 )HTML");
1586 1587
1587 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 1588 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
1588 auto* space = ConstructConstraintSpace( 1589 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
1589 kHorizontalTopBottom, TextDirection::kLtr, 1590 kHorizontalTopBottom, TextDirection::kLtr,
1590 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); 1591 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite));
1591 RefPtr<const NGPhysicalBoxFragment> parent_fragment = 1592 RefPtr<const NGPhysicalBoxFragment> parent_fragment =
1592 RunBlockLayoutAlgorithm(space, container); 1593 RunBlockLayoutAlgorithm(space.get(), container);
1593 1594
1594 FragmentChildIterator iterator(parent_fragment.get()); 1595 FragmentChildIterator iterator(parent_fragment.get());
1595 const auto* fragment = iterator.NextChild(); 1596 const auto* fragment = iterator.NextChild();
1596 ASSERT_TRUE(fragment); 1597 ASSERT_TRUE(fragment);
1597 EXPECT_EQ(LayoutUnit(210), fragment->Width()); 1598 EXPECT_EQ(LayoutUnit(210), fragment->Width());
1598 EXPECT_EQ(LayoutUnit(100), fragment->Height()); 1599 EXPECT_EQ(LayoutUnit(100), fragment->Height());
1599 EXPECT_FALSE(iterator.NextChild()); 1600 EXPECT_FALSE(iterator.NextChild());
1600 1601
1601 iterator.SetParent(fragment); 1602 iterator.SetParent(fragment);
1602 // #child fragment in first column 1603 // #child fragment in first column
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1645 <div id="parent"> 1646 <div id="parent">
1646 <div id="child1" style="width: 75%; height: 60px;"> 1647 <div id="child1" style="width: 75%; height: 60px;">
1647 </div> 1648 </div>
1648 <div id="child2" style="width: 85%; height: 60px;"> 1649 <div id="child2" style="width: 85%; height: 60px;">
1649 </div> 1650 </div>
1650 </div> 1651 </div>
1651 </div> 1652 </div>
1652 )HTML"); 1653 )HTML");
1653 1654
1654 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 1655 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
1655 auto* space = ConstructConstraintSpace( 1656 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
1656 kHorizontalTopBottom, TextDirection::kLtr, 1657 kHorizontalTopBottom, TextDirection::kLtr,
1657 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); 1658 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite));
1658 RefPtr<const NGPhysicalBoxFragment> parent_fragment = 1659 RefPtr<const NGPhysicalBoxFragment> parent_fragment =
1659 RunBlockLayoutAlgorithm(space, container); 1660 RunBlockLayoutAlgorithm(space.get(), container);
1660 1661
1661 FragmentChildIterator iterator(parent_fragment.get()); 1662 FragmentChildIterator iterator(parent_fragment.get());
1662 const auto* fragment = iterator.NextChild(); 1663 const auto* fragment = iterator.NextChild();
1663 ASSERT_TRUE(fragment); 1664 ASSERT_TRUE(fragment);
1664 EXPECT_EQ(LayoutUnit(320), fragment->Width()); 1665 EXPECT_EQ(LayoutUnit(320), fragment->Width());
1665 EXPECT_EQ(LayoutUnit(100), fragment->Height()); 1666 EXPECT_EQ(LayoutUnit(100), fragment->Height());
1666 EXPECT_FALSE(iterator.NextChild()); 1667 EXPECT_FALSE(iterator.NextChild());
1667 1668
1668 iterator.SetParent(fragment); 1669 iterator.SetParent(fragment);
1669 // #child1 fragment in first column 1670 // #child1 fragment in first column
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1715 <div id="grandchild2" style="width: 40px; height: 20px;"> 1716 <div id="grandchild2" style="width: 40px; height: 20px;">
1716 </div> 1717 </div>
1717 </div> 1718 </div>
1718 <div id="child2" style="width: 85%; height: 10px;"></div> 1719 <div id="child2" style="width: 85%; height: 10px;"></div>
1719 </div> 1720 </div>
1720 </div> 1721 </div>
1721 </div> 1722 </div>
1722 )HTML"); 1723 )HTML");
1723 1724
1724 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 1725 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
1725 auto* space = ConstructConstraintSpace( 1726 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
1726 kHorizontalTopBottom, TextDirection::kLtr, 1727 kHorizontalTopBottom, TextDirection::kLtr,
1727 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); 1728 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite));
1728 RefPtr<const NGPhysicalBoxFragment> parent_fragment = 1729 RefPtr<const NGPhysicalBoxFragment> parent_fragment =
1729 RunBlockLayoutAlgorithm(space, container); 1730 RunBlockLayoutAlgorithm(space.get(), container);
1730 1731
1731 FragmentChildIterator iterator(parent_fragment.get()); 1732 FragmentChildIterator iterator(parent_fragment.get());
1732 const auto* fragment = iterator.NextChild(); 1733 const auto* fragment = iterator.NextChild();
1733 ASSERT_TRUE(fragment); 1734 ASSERT_TRUE(fragment);
1734 EXPECT_EQ(LayoutUnit(320), fragment->Width()); 1735 EXPECT_EQ(LayoutUnit(320), fragment->Width());
1735 EXPECT_EQ(LayoutUnit(100), fragment->Height()); 1736 EXPECT_EQ(LayoutUnit(100), fragment->Height());
1736 EXPECT_FALSE(iterator.NextChild()); 1737 EXPECT_FALSE(iterator.NextChild());
1737 1738
1738 iterator.SetParent(fragment); 1739 iterator.SetParent(fragment);
1739 // #child1 fragment in first column 1740 // #child1 fragment in first column
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1802 </style> 1803 </style>
1803 <div id="container"> 1804 <div id="container">
1804 <div id="parent"> 1805 <div id="parent">
1805 <div id="child" style="float: left; width: 75%; height: 100px;"> 1806 <div id="child" style="float: left; width: 75%; height: 100px;">
1806 </div> 1807 </div>
1807 </div> 1808 </div>
1808 </div> 1809 </div>
1809 )HTML"); 1810 )HTML");
1810 1811
1811 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 1812 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
1812 auto* space = ConstructConstraintSpace( 1813 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
1813 kHorizontalTopBottom, TextDirection::kLtr, 1814 kHorizontalTopBottom, TextDirection::kLtr,
1814 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); 1815 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite));
1815 RefPtr<const NGPhysicalBoxFragment> parent_fragment = 1816 RefPtr<const NGPhysicalBoxFragment> parent_fragment =
1816 RunBlockLayoutAlgorithm(space, container); 1817 RunBlockLayoutAlgorithm(space.get(), container);
1817 1818
1818 FragmentChildIterator iterator(parent_fragment.get()); 1819 FragmentChildIterator iterator(parent_fragment.get());
1819 const auto* fragment = iterator.NextChild(); 1820 const auto* fragment = iterator.NextChild();
1820 ASSERT_TRUE(fragment); 1821 ASSERT_TRUE(fragment);
1821 EXPECT_EQ(LayoutUnit(320), fragment->Width()); 1822 EXPECT_EQ(LayoutUnit(320), fragment->Width());
1822 EXPECT_EQ(LayoutUnit(100), fragment->Height()); 1823 EXPECT_EQ(LayoutUnit(100), fragment->Height());
1823 EXPECT_FALSE(iterator.NextChild()); 1824 EXPECT_FALSE(iterator.NextChild());
1824 1825
1825 iterator.SetParent(fragment); 1826 iterator.SetParent(fragment);
1826 // #child fragment in first column 1827 // #child fragment in first column
(...skipping 24 matching lines...) Expand all
1851 <div id="parent"> 1852 <div id="parent">
1852 <div id="child1" style="float: left; width: 15%; height: 100px;"> 1853 <div id="child1" style="float: left; width: 15%; height: 100px;">
1853 </div> 1854 </div>
1854 <div id="child2" style="float: right; width: 16%; height: 100px;"> 1855 <div id="child2" style="float: right; width: 16%; height: 100px;">
1855 </div> 1856 </div>
1856 </div> 1857 </div>
1857 </div> 1858 </div>
1858 )HTML"); 1859 )HTML");
1859 1860
1860 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 1861 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
1861 auto* space = ConstructConstraintSpace( 1862 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
1862 kHorizontalTopBottom, TextDirection::kLtr, 1863 kHorizontalTopBottom, TextDirection::kLtr,
1863 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); 1864 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite));
1864 RefPtr<const NGPhysicalBoxFragment> parent_fragment = 1865 RefPtr<const NGPhysicalBoxFragment> parent_fragment =
1865 RunBlockLayoutAlgorithm(space, container); 1866 RunBlockLayoutAlgorithm(space.get(), container);
1866 1867
1867 FragmentChildIterator iterator(parent_fragment.get()); 1868 FragmentChildIterator iterator(parent_fragment.get());
1868 const auto* fragment = iterator.NextChild(); 1869 const auto* fragment = iterator.NextChild();
1869 ASSERT_TRUE(fragment); 1870 ASSERT_TRUE(fragment);
1870 EXPECT_EQ(LayoutUnit(320), fragment->Width()); 1871 EXPECT_EQ(LayoutUnit(320), fragment->Width());
1871 EXPECT_EQ(LayoutUnit(100), fragment->Height()); 1872 EXPECT_EQ(LayoutUnit(100), fragment->Height());
1872 EXPECT_FALSE(iterator.NextChild()); 1873 EXPECT_FALSE(iterator.NextChild());
1873 1874
1874 iterator.SetParent(fragment); 1875 iterator.SetParent(fragment);
1875 // #child1 fragment in first column 1876 // #child1 fragment in first column
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1908 <div id="parent"> 1909 <div id="parent">
1909 <div id="child1" style="float: left; width: 15%; height: 150px;"> 1910 <div id="child1" style="float: left; width: 15%; height: 150px;">
1910 </div> 1911 </div>
1911 <div id="child2" style="float: right; width: 16%; height: 150px;"> 1912 <div id="child2" style="float: right; width: 16%; height: 150px;">
1912 </div> 1913 </div>
1913 </div> 1914 </div>
1914 </div> 1915 </div>
1915 )HTML"); 1916 )HTML");
1916 1917
1917 auto* container = new NGBlockNode(getLayoutObjectByElementId("container")); 1918 auto* container = new NGBlockNode(getLayoutObjectByElementId("container"));
1918 auto* space = ConstructConstraintSpace( 1919 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
1919 kHorizontalTopBottom, TextDirection::kLtr, 1920 kHorizontalTopBottom, TextDirection::kLtr,
1920 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); 1921 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite));
1921 RefPtr<const NGPhysicalBoxFragment> parent_fragment = 1922 RefPtr<const NGPhysicalBoxFragment> parent_fragment =
1922 RunBlockLayoutAlgorithm(space, container); 1923 RunBlockLayoutAlgorithm(space.get(), container);
1923 1924
1924 FragmentChildIterator iterator(parent_fragment.get()); 1925 FragmentChildIterator iterator(parent_fragment.get());
1925 const auto* fragment = iterator.NextChild(); 1926 const auto* fragment = iterator.NextChild();
1926 ASSERT_TRUE(fragment); 1927 ASSERT_TRUE(fragment);
1927 EXPECT_EQ(LayoutUnit(320), fragment->Width()); 1928 EXPECT_EQ(LayoutUnit(320), fragment->Width());
1928 EXPECT_EQ(LayoutUnit(100), fragment->Height()); 1929 EXPECT_EQ(LayoutUnit(100), fragment->Height());
1929 EXPECT_FALSE(iterator.NextChild()); 1930 EXPECT_FALSE(iterator.NextChild());
1930 1931
1931 iterator.SetParent(fragment); 1932 iterator.SetParent(fragment);
1932 // #child1 fragment in first column 1933 // #child1 fragment in first column
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
2113 height: 200px; 2114 height: 200px;
2114 } 2115 }
2115 </style> 2116 </style>
2116 <div id='container'></div> 2117 <div id='container'></div>
2117 )HTML"); 2118 )HTML");
2118 2119
2119 LayoutUnit kFragmentainerSpaceAvailable(200); 2120 LayoutUnit kFragmentainerSpaceAvailable(200);
2120 2121
2121 NGBlockNode* node = new NGBlockNode( 2122 NGBlockNode* node = new NGBlockNode(
2122 toLayoutBlockFlow(getLayoutObjectByElementId("container"))); 2123 toLayoutBlockFlow(getLayoutObjectByElementId("container")));
2123 auto* space = ConstructConstraintSpace( 2124 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
2124 kHorizontalTopBottom, TextDirection::kLtr, 2125 kHorizontalTopBottom, TextDirection::kLtr,
2125 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, 2126 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false,
2126 kFragmentainerSpaceAvailable); 2127 kFragmentainerSpaceAvailable);
2127 2128
2128 // We should only have one 150x200 fragment with no fragmentation. 2129 // We should only have one 150x200 fragment with no fragmentation.
2129 RefPtr<const NGPhysicalFragment> fragment = 2130 RefPtr<const NGPhysicalFragment> fragment =
2130 NGBlockLayoutAlgorithm(node, space).Layout()->PhysicalFragment(); 2131 NGBlockLayoutAlgorithm(node, space.get()).Layout()->PhysicalFragment();
2131 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(200)), fragment->Size()); 2132 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(200)), fragment->Size());
2132 ASSERT_TRUE(fragment->BreakToken()->IsFinished()); 2133 ASSERT_TRUE(fragment->BreakToken()->IsFinished());
2133 } 2134 }
2134 2135
2135 // Tests that a block will fragment if it reaches the fragmentation line. 2136 // Tests that a block will fragment if it reaches the fragmentation line.
2136 TEST_F(NGBlockLayoutAlgorithmTest, SimpleFragmentation) { 2137 TEST_F(NGBlockLayoutAlgorithmTest, SimpleFragmentation) {
2137 setBodyInnerHTML(R"HTML( 2138 setBodyInnerHTML(R"HTML(
2138 <!DOCTYPE html> 2139 <!DOCTYPE html>
2139 <style> 2140 <style>
2140 #container { 2141 #container {
2141 width: 150px; 2142 width: 150px;
2142 height: 300px; 2143 height: 300px;
2143 } 2144 }
2144 </style> 2145 </style>
2145 <div id='container'></div> 2146 <div id='container'></div>
2146 )HTML"); 2147 )HTML");
2147 2148
2148 LayoutUnit kFragmentainerSpaceAvailable(200); 2149 LayoutUnit kFragmentainerSpaceAvailable(200);
2149 2150
2150 NGBlockNode* node = new NGBlockNode( 2151 NGBlockNode* node = new NGBlockNode(
2151 toLayoutBlockFlow(getLayoutObjectByElementId("container"))); 2152 toLayoutBlockFlow(getLayoutObjectByElementId("container")));
2152 auto* space = ConstructConstraintSpace( 2153 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
2153 kHorizontalTopBottom, TextDirection::kLtr, 2154 kHorizontalTopBottom, TextDirection::kLtr,
2154 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, 2155 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false,
2155 kFragmentainerSpaceAvailable); 2156 kFragmentainerSpaceAvailable);
2156 2157
2157 RefPtr<const NGPhysicalFragment> fragment = 2158 RefPtr<const NGPhysicalFragment> fragment =
2158 NGBlockLayoutAlgorithm(node, space).Layout()->PhysicalFragment(); 2159 NGBlockLayoutAlgorithm(node, space.get()).Layout()->PhysicalFragment();
2159 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(200)), fragment->Size()); 2160 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(200)), fragment->Size());
2160 ASSERT_FALSE(fragment->BreakToken()->IsFinished()); 2161 ASSERT_FALSE(fragment->BreakToken()->IsFinished());
2161 2162
2162 fragment = NGBlockLayoutAlgorithm(node, space, 2163 fragment = NGBlockLayoutAlgorithm(node, space.get(),
2163 toNGBlockBreakToken(fragment->BreakToken())) 2164 toNGBlockBreakToken(fragment->BreakToken()))
2164 .Layout() 2165 .Layout()
2165 ->PhysicalFragment(); 2166 ->PhysicalFragment();
2166 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(100)), fragment->Size()); 2167 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(100)), fragment->Size());
2167 ASSERT_TRUE(fragment->BreakToken()->IsFinished()); 2168 ASSERT_TRUE(fragment->BreakToken()->IsFinished());
2168 } 2169 }
2169 2170
2170 // Tests that children inside the same block formatting context fragment when 2171 // Tests that children inside the same block formatting context fragment when
2171 // reaching a fragmentation line. 2172 // reaching a fragmentation line.
2172 TEST_F(NGBlockLayoutAlgorithmTest, InnerChildrenFragmentation) { 2173 TEST_F(NGBlockLayoutAlgorithmTest, InnerChildrenFragmentation) {
(...skipping 16 matching lines...) Expand all
2189 <div id='container'> 2190 <div id='container'>
2190 <div id='child1'></div> 2191 <div id='child1'></div>
2191 <div id='child2'></div> 2192 <div id='child2'></div>
2192 </div> 2193 </div>
2193 )HTML"); 2194 )HTML");
2194 2195
2195 LayoutUnit kFragmentainerSpaceAvailable(200); 2196 LayoutUnit kFragmentainerSpaceAvailable(200);
2196 2197
2197 NGBlockNode* node = new NGBlockNode( 2198 NGBlockNode* node = new NGBlockNode(
2198 toLayoutBlockFlow(getLayoutObjectByElementId("container"))); 2199 toLayoutBlockFlow(getLayoutObjectByElementId("container")));
2199 auto* space = ConstructConstraintSpace( 2200 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
2200 kHorizontalTopBottom, TextDirection::kLtr, 2201 kHorizontalTopBottom, TextDirection::kLtr,
2201 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, 2202 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false,
2202 kFragmentainerSpaceAvailable); 2203 kFragmentainerSpaceAvailable);
2203 2204
2204 RefPtr<const NGPhysicalFragment> fragment = 2205 RefPtr<const NGPhysicalFragment> fragment =
2205 NGBlockLayoutAlgorithm(node, space).Layout()->PhysicalFragment(); 2206 NGBlockLayoutAlgorithm(node, space.get()).Layout()->PhysicalFragment();
2206 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(200)), fragment->Size()); 2207 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(200)), fragment->Size());
2207 ASSERT_FALSE(fragment->BreakToken()->IsFinished()); 2208 ASSERT_FALSE(fragment->BreakToken()->IsFinished());
2208 2209
2209 FragmentChildIterator iterator(toNGPhysicalBoxFragment(fragment.get())); 2210 FragmentChildIterator iterator(toNGPhysicalBoxFragment(fragment.get()));
2210 const NGPhysicalBoxFragment* child = iterator.NextChild(); 2211 const NGPhysicalBoxFragment* child = iterator.NextChild();
2211 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(180)), child->Size()); 2212 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(180)), child->Size());
2212 EXPECT_EQ(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(20)), child->Offset()); 2213 EXPECT_EQ(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(20)), child->Offset());
2213 2214
2214 EXPECT_FALSE(iterator.NextChild()); 2215 EXPECT_FALSE(iterator.NextChild());
2215 2216
2216 fragment = NGBlockLayoutAlgorithm(node, space, 2217 fragment = NGBlockLayoutAlgorithm(node, space.get(),
2217 toNGBlockBreakToken(fragment->BreakToken())) 2218 toNGBlockBreakToken(fragment->BreakToken()))
2218 .Layout() 2219 .Layout()
2219 ->PhysicalFragment(); 2220 ->PhysicalFragment();
2220 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(140)), fragment->Size()); 2221 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(140)), fragment->Size());
2221 ASSERT_TRUE(fragment->BreakToken()->IsFinished()); 2222 ASSERT_TRUE(fragment->BreakToken()->IsFinished());
2222 2223
2223 iterator.SetParent(toNGPhysicalBoxFragment(fragment.get())); 2224 iterator.SetParent(toNGPhysicalBoxFragment(fragment.get()));
2224 child = iterator.NextChild(); 2225 child = iterator.NextChild();
2225 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(20)), child->Size()); 2226 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(20)), child->Size());
2226 EXPECT_EQ(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(0)), child->Offset()); 2227 EXPECT_EQ(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(0)), child->Offset());
(...skipping 30 matching lines...) Expand all
2257 <div id='container'> 2258 <div id='container'>
2258 <div id='child1'></div> 2259 <div id='child1'></div>
2259 <div id='child2'></div> 2260 <div id='child2'></div>
2260 </div> 2261 </div>
2261 )HTML"); 2262 )HTML");
2262 2263
2263 LayoutUnit kFragmentainerSpaceAvailable(200); 2264 LayoutUnit kFragmentainerSpaceAvailable(200);
2264 2265
2265 NGBlockNode* node = new NGBlockNode( 2266 NGBlockNode* node = new NGBlockNode(
2266 toLayoutBlockFlow(getLayoutObjectByElementId("container"))); 2267 toLayoutBlockFlow(getLayoutObjectByElementId("container")));
2267 auto* space = ConstructConstraintSpace( 2268 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
2268 kHorizontalTopBottom, TextDirection::kLtr, 2269 kHorizontalTopBottom, TextDirection::kLtr,
2269 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, 2270 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false,
2270 kFragmentainerSpaceAvailable); 2271 kFragmentainerSpaceAvailable);
2271 2272
2272 RefPtr<const NGPhysicalFragment> fragment = 2273 RefPtr<const NGPhysicalFragment> fragment =
2273 NGBlockLayoutAlgorithm(node, space).Layout()->PhysicalFragment(); 2274 NGBlockLayoutAlgorithm(node, space.get()).Layout()->PhysicalFragment();
2274 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(200)), fragment->Size()); 2275 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(200)), fragment->Size());
2275 ASSERT_FALSE(fragment->BreakToken()->IsFinished()); 2276 ASSERT_FALSE(fragment->BreakToken()->IsFinished());
2276 2277
2277 FragmentChildIterator iterator(toNGPhysicalBoxFragment(fragment.get())); 2278 FragmentChildIterator iterator(toNGPhysicalBoxFragment(fragment.get()));
2278 const NGPhysicalBoxFragment* child = iterator.NextChild(); 2279 const NGPhysicalBoxFragment* child = iterator.NextChild();
2279 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(180)), child->Size()); 2280 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(180)), child->Size());
2280 EXPECT_EQ(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(20)), child->Offset()); 2281 EXPECT_EQ(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(20)), child->Offset());
2281 2282
2282 EXPECT_FALSE(iterator.NextChild()); 2283 EXPECT_FALSE(iterator.NextChild());
2283 2284
2284 fragment = NGBlockLayoutAlgorithm(node, space, 2285 fragment = NGBlockLayoutAlgorithm(node, space.get(),
2285 toNGBlockBreakToken(fragment->BreakToken())) 2286 toNGBlockBreakToken(fragment->BreakToken()))
2286 .Layout() 2287 .Layout()
2287 ->PhysicalFragment(); 2288 ->PhysicalFragment();
2288 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(140)), fragment->Size()); 2289 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(140)), fragment->Size());
2289 ASSERT_TRUE(fragment->BreakToken()->IsFinished()); 2290 ASSERT_TRUE(fragment->BreakToken()->IsFinished());
2290 2291
2291 iterator.SetParent(toNGPhysicalBoxFragment(fragment.get())); 2292 iterator.SetParent(toNGPhysicalBoxFragment(fragment.get()));
2292 child = iterator.NextChild(); 2293 child = iterator.NextChild();
2293 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(20)), child->Size()); 2294 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(20)), child->Size());
2294 EXPECT_EQ(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(0)), child->Offset()); 2295 EXPECT_EQ(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(0)), child->Offset());
(...skipping 28 matching lines...) Expand all
2323 <div id='container'> 2324 <div id='container'>
2324 <div id='child1'></div> 2325 <div id='child1'></div>
2325 <div id='child2'></div> 2326 <div id='child2'></div>
2326 </div> 2327 </div>
2327 )HTML"); 2328 )HTML");
2328 2329
2329 LayoutUnit kFragmentainerSpaceAvailable(200); 2330 LayoutUnit kFragmentainerSpaceAvailable(200);
2330 2331
2331 NGBlockNode* node = new NGBlockNode( 2332 NGBlockNode* node = new NGBlockNode(
2332 toLayoutBlockFlow(getLayoutObjectByElementId("container"))); 2333 toLayoutBlockFlow(getLayoutObjectByElementId("container")));
2333 auto* space = ConstructConstraintSpace( 2334 RefPtr<NGConstraintSpace> space = ConstructConstraintSpace(
2334 kHorizontalTopBottom, TextDirection::kLtr, 2335 kHorizontalTopBottom, TextDirection::kLtr,
2335 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, 2336 NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false,
2336 kFragmentainerSpaceAvailable); 2337 kFragmentainerSpaceAvailable);
2337 2338
2338 RefPtr<const NGPhysicalFragment> fragment = 2339 RefPtr<const NGPhysicalFragment> fragment =
2339 NGBlockLayoutAlgorithm(node, space).Layout()->PhysicalFragment(); 2340 NGBlockLayoutAlgorithm(node, space.get()).Layout()->PhysicalFragment();
2340 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(70)), fragment->Size()); 2341 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(70)), fragment->Size());
2341 ASSERT_FALSE(fragment->BreakToken()->IsFinished()); 2342 ASSERT_FALSE(fragment->BreakToken()->IsFinished());
2342 2343
2343 FragmentChildIterator iterator(toNGPhysicalBoxFragment(fragment.get())); 2344 FragmentChildIterator iterator(toNGPhysicalBoxFragment(fragment.get()));
2344 const NGPhysicalBoxFragment* child = iterator.NextChild(); 2345 const NGPhysicalBoxFragment* child = iterator.NextChild();
2345 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(180)), child->Size()); 2346 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(180)), child->Size());
2346 EXPECT_EQ(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(20)), child->Offset()); 2347 EXPECT_EQ(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(20)), child->Offset());
2347 2348
2348 EXPECT_FALSE(iterator.NextChild()); 2349 EXPECT_FALSE(iterator.NextChild());
2349 2350
2350 fragment = NGBlockLayoutAlgorithm(node, space, 2351 fragment = NGBlockLayoutAlgorithm(node, space.get(),
2351 toNGBlockBreakToken(fragment->BreakToken())) 2352 toNGBlockBreakToken(fragment->BreakToken()))
2352 .Layout() 2353 .Layout()
2353 ->PhysicalFragment(); 2354 ->PhysicalFragment();
2354 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(0)), fragment->Size()); 2355 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(0)), fragment->Size());
2355 ASSERT_TRUE(fragment->BreakToken()->IsFinished()); 2356 ASSERT_TRUE(fragment->BreakToken()->IsFinished());
2356 2357
2357 iterator.SetParent(toNGPhysicalBoxFragment(fragment.get())); 2358 iterator.SetParent(toNGPhysicalBoxFragment(fragment.get()));
2358 child = iterator.NextChild(); 2359 child = iterator.NextChild();
2359 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(20)), child->Size()); 2360 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(20)), child->Size());
2360 EXPECT_EQ(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(0)), child->Offset()); 2361 EXPECT_EQ(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(0)), child->Offset());
2361 2362
2362 child = iterator.NextChild(); 2363 child = iterator.NextChild();
2363 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(100)), child->Size()); 2364 EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(100)), child->Size());
2364 EXPECT_EQ(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(40)), child->Offset()); 2365 EXPECT_EQ(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(40)), child->Offset());
2365 2366
2366 EXPECT_FALSE(iterator.NextChild()); 2367 EXPECT_FALSE(iterator.NextChild());
2367 } 2368 }
2368 2369
2369 } // namespace 2370 } // namespace
2370 } // namespace blink 2371 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698