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

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

Issue 2770483002: CS of out-of-flow positioned objects should have is_new_fc == true (Closed)
Patch Set: update TestExpectations Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/layout/ng/ng_constraint_space.h" 5 #include "core/layout/ng/ng_constraint_space.h"
6 6
7 #include "core/layout/ng/ng_constraint_space.h" 7 #include "core/layout/ng/ng_constraint_space.h"
8 #include "core/layout/ng/ng_constraint_space_builder.h" 8 #include "core/layout/ng/ng_constraint_space_builder.h"
9 #include "core/layout/ng/ng_layout_opportunity_iterator.h" 9 #include "core/layout/ng/ng_layout_opportunity_iterator.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 18 matching lines...) Expand all
29 .ToConstraintSpace(writing_mode); 29 .ToConstraintSpace(writing_mode);
30 } 30 }
31 31
32 TEST(NGConstraintSpaceTest, LayoutOpportunitiesNoExclusions) { 32 TEST(NGConstraintSpaceTest, LayoutOpportunitiesNoExclusions) {
33 NGLogicalSize size; 33 NGLogicalSize size;
34 size.inline_size = LayoutUnit(600); 34 size.inline_size = LayoutUnit(600);
35 size.block_size = LayoutUnit(400); 35 size.block_size = LayoutUnit(400);
36 RefPtr<NGConstraintSpace> space = 36 RefPtr<NGConstraintSpace> space =
37 ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::kLtr, size); 37 ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::kLtr, size);
38 38
39 NGLayoutOpportunityIterator iterator(space.get()); 39 NGLayoutOpportunityIterator iterator(space.get(), space->AvailableSize());
40 // 600x400 at (0,0) 40 // 600x400 at (0,0)
41 NGLayoutOpportunity opp1 = {{}, {LayoutUnit(600), LayoutUnit(400)}}; 41 NGLayoutOpportunity opp1 = {{}, {LayoutUnit(600), LayoutUnit(400)}};
42 EXPECT_EQ(opp1, iterator.Next()); 42 EXPECT_EQ(opp1, iterator.Next());
43 43
44 EXPECT_EQ(NGLayoutOpportunity(), iterator.Next()); 44 EXPECT_EQ(NGLayoutOpportunity(), iterator.Next());
45 } 45 }
46 46
47 TEST(NGConstraintSpaceTest, LayoutOpportunitiesTopRightExclusion) { 47 TEST(NGConstraintSpaceTest, LayoutOpportunitiesTopRightExclusion) {
48 NGLogicalSize size; 48 NGLogicalSize size;
49 size.inline_size = LayoutUnit(600); 49 size.inline_size = LayoutUnit(600);
50 size.block_size = LayoutUnit(400); 50 size.block_size = LayoutUnit(400);
51 // Create a space with a 100x100 exclusion in the top right corner. 51 // Create a space with a 100x100 exclusion in the top right corner.
52 RefPtr<NGConstraintSpace> space = 52 RefPtr<NGConstraintSpace> space =
53 ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::kLtr, size); 53 ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::kLtr, size);
54 NGExclusion exclusion; 54 NGExclusion exclusion;
55 exclusion.rect.size = {LayoutUnit(100), LayoutUnit(100)}; 55 exclusion.rect.size = {LayoutUnit(100), LayoutUnit(100)};
56 exclusion.rect.offset = {LayoutUnit(500), LayoutUnit()}; 56 exclusion.rect.offset = {LayoutUnit(500), LayoutUnit()};
57 space->AddExclusion(exclusion); 57 space->AddExclusion(exclusion);
58 58
59 NGLayoutOpportunityIterator iterator(space.get()); 59 NGLayoutOpportunityIterator iterator(space.get(), space->AvailableSize());
60 60
61 // First opportunity should be to the left of the exclusion: 500x400 at (0,0) 61 // First opportunity should be to the left of the exclusion: 500x400 at (0,0)
62 NGLayoutOpportunity opp1 = {{}, {LayoutUnit(500), LayoutUnit(400)}}; 62 NGLayoutOpportunity opp1 = {{}, {LayoutUnit(500), LayoutUnit(400)}};
63 EXPECT_EQ(opp1, iterator.Next()); 63 EXPECT_EQ(opp1, iterator.Next());
64 64
65 // Second opportunity should be below the exclusion: 600x300 at (0,100) 65 // Second opportunity should be below the exclusion: 600x300 at (0,100)
66 NGLayoutOpportunity opp2 = {{LayoutUnit(), LayoutUnit(100)}, 66 NGLayoutOpportunity opp2 = {{LayoutUnit(), LayoutUnit(100)},
67 {LayoutUnit(600), LayoutUnit(300)}}; 67 {LayoutUnit(600), LayoutUnit(300)}};
68 EXPECT_EQ(opp2, iterator.Next()); 68 EXPECT_EQ(opp2, iterator.Next());
69 69
70 EXPECT_EQ(NGLayoutOpportunity(), iterator.Next()); 70 EXPECT_EQ(NGLayoutOpportunity(), iterator.Next());
71 } 71 }
72 72
73 TEST(NGConstraintSpaceTest, LayoutOpportunitiesTopLeftExclusion) { 73 TEST(NGConstraintSpaceTest, LayoutOpportunitiesTopLeftExclusion) {
74 NGLogicalSize size; 74 NGLogicalSize size;
75 size.inline_size = LayoutUnit(600); 75 size.inline_size = LayoutUnit(600);
76 size.block_size = LayoutUnit(400); 76 size.block_size = LayoutUnit(400);
77 // Create a space with a 100x100 exclusion in the top left corner. 77 // Create a space with a 100x100 exclusion in the top left corner.
78 RefPtr<NGConstraintSpace> space = 78 RefPtr<NGConstraintSpace> space =
79 ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::kLtr, size); 79 ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::kLtr, size);
80 NGExclusion exclusion; 80 NGExclusion exclusion;
81 exclusion.rect.size = {LayoutUnit(100), LayoutUnit(100)}; 81 exclusion.rect.size = {LayoutUnit(100), LayoutUnit(100)};
82 space->AddExclusion(exclusion); 82 space->AddExclusion(exclusion);
83 83
84 NGLayoutOpportunityIterator iterator(space.get()); 84 NGLayoutOpportunityIterator iterator(space.get(), space->AvailableSize());
85 // First opportunity should be to the right of the exclusion: 85 // First opportunity should be to the right of the exclusion:
86 // 500x400 at (100, 0) 86 // 500x400 at (100, 0)
87 NGLayoutOpportunity opp1 = {{LayoutUnit(100), LayoutUnit()}, 87 NGLayoutOpportunity opp1 = {{LayoutUnit(100), LayoutUnit()},
88 {LayoutUnit(500), LayoutUnit(400)}}; 88 {LayoutUnit(500), LayoutUnit(400)}};
89 EXPECT_EQ(opp1, iterator.Next()); 89 EXPECT_EQ(opp1, iterator.Next());
90 90
91 // Second opportunity should be below the exclusion: 600x300 at (0,100) 91 // Second opportunity should be below the exclusion: 600x300 at (0,100)
92 NGLayoutOpportunity opp2 = {{LayoutUnit(), LayoutUnit(100)}, 92 NGLayoutOpportunity opp2 = {{LayoutUnit(), LayoutUnit(100)},
93 {LayoutUnit(600), LayoutUnit(300)}}; 93 {LayoutUnit(600), LayoutUnit(300)}};
94 EXPECT_EQ(opp2, iterator.Next()); 94 EXPECT_EQ(opp2, iterator.Next());
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 // Add exclusions 128 // Add exclusions
129 NGExclusion exclusion1; 129 NGExclusion exclusion1;
130 exclusion1.rect.size = {LayoutUnit(100), LayoutUnit(100)}; 130 exclusion1.rect.size = {LayoutUnit(100), LayoutUnit(100)};
131 exclusion1.rect.offset = {LayoutUnit(150), LayoutUnit(200)}; 131 exclusion1.rect.offset = {LayoutUnit(150), LayoutUnit(200)};
132 space->AddExclusion(exclusion1); 132 space->AddExclusion(exclusion1);
133 NGExclusion exclusion2; 133 NGExclusion exclusion2;
134 exclusion2.rect.size = {LayoutUnit(50), LayoutUnit(50)}; 134 exclusion2.rect.size = {LayoutUnit(50), LayoutUnit(50)};
135 exclusion2.rect.offset = {LayoutUnit(500), LayoutUnit(350)}; 135 exclusion2.rect.offset = {LayoutUnit(500), LayoutUnit(350)};
136 space->AddExclusion(exclusion2); 136 space->AddExclusion(exclusion2);
137 137
138 NGLayoutOpportunityIterator iterator(space.get()); 138 NGLayoutOpportunityIterator iterator(space.get(), space->AvailableSize());
139 NGLogicalOffset start_point1; 139 NGLogicalOffset start_point1;
140 // 600x200 at (0,0) 140 // 600x200 at (0,0)
141 NGLayoutOpportunity opp1 = {start_point1, {LayoutUnit(600), LayoutUnit(200)}}; 141 NGLayoutOpportunity opp1 = {start_point1, {LayoutUnit(600), LayoutUnit(200)}};
142 EXPECT_EQ(opp1, (iterator.Next())); 142 EXPECT_EQ(opp1, (iterator.Next()));
143 // 150x400 at (0,0) 143 // 150x400 at (0,0)
144 NGLayoutOpportunity opp2 = {start_point1, {LayoutUnit(150), LayoutUnit(400)}}; 144 NGLayoutOpportunity opp2 = {start_point1, {LayoutUnit(150), LayoutUnit(400)}};
145 EXPECT_EQ(opp2, (iterator.Next())); 145 EXPECT_EQ(opp2, (iterator.Next()));
146 146
147 NGLogicalOffset start_point2 = {LayoutUnit(250), LayoutUnit()}; 147 NGLogicalOffset start_point2 = {LayoutUnit(250), LayoutUnit()};
148 // 350x350 at (250,0) 148 // 350x350 at (250,0)
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 exclusion1.rect.size = {LayoutUnit(100), LayoutUnit(100)}; 193 exclusion1.rect.size = {LayoutUnit(100), LayoutUnit(100)};
194 exclusion1.rect.offset = {LayoutUnit(150), LayoutUnit(200)}; 194 exclusion1.rect.offset = {LayoutUnit(150), LayoutUnit(200)};
195 space->AddExclusion(exclusion1); 195 space->AddExclusion(exclusion1);
196 NGExclusion exclusion2; 196 NGExclusion exclusion2;
197 exclusion2.rect.size = {LayoutUnit(50), LayoutUnit(50)}; 197 exclusion2.rect.size = {LayoutUnit(50), LayoutUnit(50)};
198 exclusion2.rect.offset = {LayoutUnit(500), LayoutUnit(350)}; 198 exclusion2.rect.offset = {LayoutUnit(500), LayoutUnit(350)};
199 space->AddExclusion(exclusion2); 199 space->AddExclusion(exclusion2);
200 200
201 const NGLogicalOffset origin_point = {LayoutUnit(), LayoutUnit(200)}; 201 const NGLogicalOffset origin_point = {LayoutUnit(), LayoutUnit(200)};
202 const NGLogicalOffset leader_point = {LayoutUnit(250), LayoutUnit(300)}; 202 const NGLogicalOffset leader_point = {LayoutUnit(250), LayoutUnit(300)};
203 NGLayoutOpportunityIterator iterator(space.get(), origin_point, leader_point); 203 NGLayoutOpportunityIterator iterator(space.get(), space->AvailableSize(),
204 origin_point, leader_point);
204 205
205 NGLogicalOffset start_point1 = {LayoutUnit(250), LayoutUnit(200)}; 206 NGLogicalOffset start_point1 = {LayoutUnit(250), LayoutUnit(200)};
206 // 350x150 at (250,200) 207 // 350x150 at (250,200)
207 NGLayoutOpportunity opp1 = {start_point1, {LayoutUnit(350), LayoutUnit(150)}}; 208 NGLayoutOpportunity opp1 = {start_point1, {LayoutUnit(350), LayoutUnit(150)}};
208 EXPECT_EQ(opp1, iterator.Next()); 209 EXPECT_EQ(opp1, iterator.Next());
209 // 250x400 at (250,200) 210 // 250x400 at (250,200)
210 NGLayoutOpportunity opp2 = {start_point1, {LayoutUnit(250), LayoutUnit(400)}}; 211 NGLayoutOpportunity opp2 = {start_point1, {LayoutUnit(250), LayoutUnit(400)}};
211 EXPECT_EQ(opp2, iterator.Next()); 212 EXPECT_EQ(opp2, iterator.Next());
212 213
213 NGLogicalOffset start_point2 = {LayoutUnit(550), LayoutUnit(200)}; 214 NGLogicalOffset start_point2 = {LayoutUnit(550), LayoutUnit(200)};
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 // available constraint space, i.e. 0,0 600x200 253 // available constraint space, i.e. 0,0 600x200
253 TEST(NGConstraintSpaceTest, LayoutOpportunitiesWithOutOfBoundsExclusions) { 254 TEST(NGConstraintSpaceTest, LayoutOpportunitiesWithOutOfBoundsExclusions) {
254 NGLogicalSize size = {LayoutUnit(600), LayoutUnit(100)}; 255 NGLogicalSize size = {LayoutUnit(600), LayoutUnit(100)};
255 RefPtr<NGConstraintSpace> space = 256 RefPtr<NGConstraintSpace> space =
256 ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::kLtr, size); 257 ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::kLtr, size);
257 NGExclusion exclusion; 258 NGExclusion exclusion;
258 exclusion.rect.size = {LayoutUnit(100), LayoutUnit(100)}; 259 exclusion.rect.size = {LayoutUnit(100), LayoutUnit(100)};
259 exclusion.rect.offset = {LayoutUnit(), LayoutUnit(150)}; 260 exclusion.rect.offset = {LayoutUnit(), LayoutUnit(150)};
260 space->AddExclusion(exclusion); 261 space->AddExclusion(exclusion);
261 262
262 NGLayoutOpportunityIterator iterator(space.get()); 263 NGLayoutOpportunityIterator iterator(space.get(), space->AvailableSize());
263 // 600x100 at (0,0) 264 // 600x100 at (0,0)
264 NGLayoutOpportunity opp = {{}, size}; 265 NGLayoutOpportunity opp = {{}, size};
265 EXPECT_EQ(opp, iterator.Next()); 266 EXPECT_EQ(opp, iterator.Next());
266 267
267 EXPECT_EQ(NGLayoutOpportunity(), iterator.Next()); 268 EXPECT_EQ(NGLayoutOpportunity(), iterator.Next());
268 } 269 }
269 270
270 // Verifies that we combine 2 adjoining left exclusions into one left exclusion. 271 // Verifies that we combine 2 adjoining left exclusions into one left exclusion.
271 TEST(NGConstraintSpaceTest, TwoLeftExclusionsShadowEachOther) { 272 TEST(NGConstraintSpaceTest, TwoLeftExclusionsShadowEachOther) {
272 NGLogicalOffset bfc_offset = {LayoutUnit(8), LayoutUnit(8)}; 273 NGLogicalOffset bfc_offset = {LayoutUnit(8), LayoutUnit(8)};
273 RefPtr<NGConstraintSpace> space = 274 RefPtr<NGConstraintSpace> space =
274 ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::kLtr, 275 ConstructConstraintSpace(kHorizontalTopBottom, TextDirection::kLtr,
275 {LayoutUnit(200), LayoutUnit(200)}, bfc_offset); 276 {LayoutUnit(200), LayoutUnit(200)}, bfc_offset);
276 277
277 NGExclusion small_left; 278 NGExclusion small_left;
278 small_left.rect.size = {LayoutUnit(10), LayoutUnit(10)}; 279 small_left.rect.size = {LayoutUnit(10), LayoutUnit(10)};
279 small_left.rect.offset = bfc_offset; 280 small_left.rect.offset = bfc_offset;
280 small_left.type = NGExclusion::kFloatLeft; 281 small_left.type = NGExclusion::kFloatLeft;
281 space->AddExclusion(small_left); 282 space->AddExclusion(small_left);
282 283
283 NGExclusion big_left; 284 NGExclusion big_left;
284 big_left.rect.size = {LayoutUnit(20), LayoutUnit(20)}; 285 big_left.rect.size = {LayoutUnit(20), LayoutUnit(20)};
285 big_left.rect.offset = bfc_offset; 286 big_left.rect.offset = bfc_offset;
286 big_left.rect.offset.inline_offset += small_left.rect.InlineSize(); 287 big_left.rect.offset.inline_offset += small_left.rect.InlineSize();
287 big_left.type = NGExclusion::kFloatLeft; 288 big_left.type = NGExclusion::kFloatLeft;
288 space->AddExclusion(big_left); 289 space->AddExclusion(big_left);
289 290
290 NGLayoutOpportunityIterator iterator(space.get(), bfc_offset); 291 NGLayoutOpportunityIterator iterator(space.get(), space->AvailableSize(),
292 bfc_offset);
291 293
292 NGLogicalOffset start_point1 = bfc_offset; 294 NGLogicalOffset start_point1 = bfc_offset;
293 start_point1.inline_offset += 295 start_point1.inline_offset +=
294 small_left.rect.InlineSize() + big_left.rect.InlineSize(); 296 small_left.rect.InlineSize() + big_left.rect.InlineSize();
295 // 170x200 at (38, 8) 297 // 170x200 at (38, 8)
296 NGLayoutOpportunity opportunity1 = {start_point1, 298 NGLayoutOpportunity opportunity1 = {start_point1,
297 {LayoutUnit(170), LayoutUnit(200)}}; 299 {LayoutUnit(170), LayoutUnit(200)}};
298 EXPECT_EQ(opportunity1, iterator.Next()); 300 EXPECT_EQ(opportunity1, iterator.Next());
299 301
300 NGLogicalOffset start_point2 = bfc_offset; 302 NGLogicalOffset start_point2 = bfc_offset;
(...skipping 24 matching lines...) Expand all
325 327
326 NGExclusion big_right; 328 NGExclusion big_right;
327 big_right.rect.size = {LayoutUnit(20), LayoutUnit(20)}; 329 big_right.rect.size = {LayoutUnit(20), LayoutUnit(20)};
328 big_right.rect.offset = bfc_offset; 330 big_right.rect.offset = bfc_offset;
329 big_right.rect.offset.inline_offset += space->AvailableSize().inline_size - 331 big_right.rect.offset.inline_offset += space->AvailableSize().inline_size -
330 small_right.rect.InlineSize() - 332 small_right.rect.InlineSize() -
331 big_right.rect.InlineSize(); 333 big_right.rect.InlineSize();
332 big_right.type = NGExclusion::kFloatRight; 334 big_right.type = NGExclusion::kFloatRight;
333 space->AddExclusion(big_right); 335 space->AddExclusion(big_right);
334 336
335 NGLayoutOpportunityIterator iterator(space.get(), bfc_offset); 337 NGLayoutOpportunityIterator iterator(space.get(), space->AvailableSize(),
338 bfc_offset);
336 339
337 NGLogicalOffset start_point1 = bfc_offset; 340 NGLogicalOffset start_point1 = bfc_offset;
338 // 170x200 at (8, 8) 341 // 170x200 at (8, 8)
339 NGLayoutOpportunity opportunity1 = {start_point1, 342 NGLayoutOpportunity opportunity1 = {start_point1,
340 {LayoutUnit(170), LayoutUnit(200)}}; 343 {LayoutUnit(170), LayoutUnit(200)}};
341 EXPECT_EQ(opportunity1, iterator.Next()); 344 EXPECT_EQ(opportunity1, iterator.Next());
342 345
343 NGLogicalOffset start_point2 = bfc_offset; 346 NGLogicalOffset start_point2 = bfc_offset;
344 start_point2.block_offset += big_right.rect.BlockSize(); 347 start_point2.block_offset += big_right.rect.BlockSize();
345 // 200x180 at (8, 28) 348 // 200x180 at (8, 28)
346 NGLayoutOpportunity opportunity2 = {start_point2, 349 NGLayoutOpportunity opportunity2 = {start_point2,
347 {LayoutUnit(200), LayoutUnit(180)}}; 350 {LayoutUnit(200), LayoutUnit(180)}};
348 EXPECT_EQ(opportunity2, iterator.Next()); 351 EXPECT_EQ(opportunity2, iterator.Next());
349 352
350 EXPECT_EQ(NGLayoutOpportunity(), iterator.Next()); 353 EXPECT_EQ(NGLayoutOpportunity(), iterator.Next());
351 } 354 }
352 355
353 } // namespace 356 } // namespace
354 } // namespace blink 357 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698