OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/LayoutMultiColumnFlowThread.h" | 5 #include "core/layout/LayoutMultiColumnFlowThread.h" |
6 | 6 |
7 #include "core/layout/LayoutMultiColumnSet.h" | 7 #include "core/layout/LayoutMultiColumnSet.h" |
8 #include "core/layout/LayoutMultiColumnSpannerPlaceholder.h" | 8 #include "core/layout/LayoutMultiColumnSpannerPlaceholder.h" |
9 #include "core/layout/LayoutTestHelper.h" | 9 #include "core/layout/LayoutTestHelper.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 EXPECT_EQ(toLayoutMultiColumnSpannerPlaceholder(columnBox)->layoutObjectInFl
owThread(), getLayoutObjectByElementId("spanner2")); | 274 EXPECT_EQ(toLayoutMultiColumnSpannerPlaceholder(columnBox)->layoutObjectInFl
owThread(), getLayoutObjectByElementId("spanner2")); |
275 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl
ementId("outer")), nullptr); | 275 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl
ementId("outer")), nullptr); |
276 } | 276 } |
277 | 277 |
278 TEST_F(MultiColumnRenderingTest, columnSetAtBlockOffset) | 278 TEST_F(MultiColumnRenderingTest, columnSetAtBlockOffset) |
279 { | 279 { |
280 setMulticolHTML("<div id='mc' style='line-height:100px;'>text<br>text<br>tex
t<br>text<br>text<div id='spanner1'>spanner</div>text<br>text<div id='spanner2'>
text<br>text</div>text</div>"); | 280 setMulticolHTML("<div id='mc' style='line-height:100px;'>text<br>text<br>tex
t<br>text<br>text<div id='spanner1'>spanner</div>text<br>text<div id='spanner2'>
text<br>text</div>text</div>"); |
281 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); | 281 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); |
282 EXPECT_EQ(columnSetSignature(flowThread), "cscsc"); | 282 EXPECT_EQ(columnSetSignature(flowThread), "cscsc"); |
283 LayoutMultiColumnSet* firstRow = flowThread->firstMultiColumnSet(); | 283 LayoutMultiColumnSet* firstRow = flowThread->firstMultiColumnSet(); |
284 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(-10000)), firstRow);
// negative overflow | 284 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(-10000), LayoutBox::
AssociateWithFormerPage), firstRow); // negative overflow |
285 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit()), firstRow); | 285 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(-10000), LayoutBox::
AssociateWithLatterPage), firstRow); // negative overflow |
286 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(499)), firstRow); //
bottom of last line in first row. | 286 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(), LayoutBox::Associ
ateWithFormerPage), firstRow); |
| 287 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(), LayoutBox::Associ
ateWithLatterPage), firstRow); |
| 288 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(499), LayoutBox::Ass
ociateWithFormerPage), firstRow); // bottom of last line in first row. |
| 289 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(499), LayoutBox::Ass
ociateWithLatterPage), firstRow); // bottom of last line in first row. |
287 LayoutMultiColumnSet* secondRow = firstRow->nextSiblingMultiColumnSet(); | 290 LayoutMultiColumnSet* secondRow = firstRow->nextSiblingMultiColumnSet(); |
288 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(500)), secondRow); | 291 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(500), LayoutBox::Ass
ociateWithFormerPage), firstRow); |
289 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(699)), secondRow); | 292 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(500), LayoutBox::Ass
ociateWithLatterPage), secondRow); |
| 293 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(699), LayoutBox::Ass
ociateWithFormerPage), secondRow); |
| 294 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(699), LayoutBox::Ass
ociateWithLatterPage), secondRow); |
290 LayoutMultiColumnSet* thirdRow = secondRow->nextSiblingMultiColumnSet(); | 295 LayoutMultiColumnSet* thirdRow = secondRow->nextSiblingMultiColumnSet(); |
291 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(700)), thirdRow); | 296 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(700), LayoutBox::Ass
ociateWithFormerPage), secondRow); |
292 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(799)), thirdRow); //
bottom of last row | 297 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(700), LayoutBox::Ass
ociateWithLatterPage), thirdRow); |
293 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(10000)), thirdRow);
// overflow | 298 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(799), LayoutBox::Ass
ociateWithLatterPage), thirdRow); // bottom of last row |
| 299 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(10000), LayoutBox::A
ssociateWithFormerPage), thirdRow); // overflow |
| 300 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(10000), LayoutBox::A
ssociateWithLatterPage), thirdRow); // overflow |
294 } | 301 } |
295 | 302 |
296 TEST_F(MultiColumnRenderingTest, columnSetAtBlockOffsetVerticalRl) | 303 TEST_F(MultiColumnRenderingTest, columnSetAtBlockOffsetVerticalRl) |
297 { | 304 { |
298 setMulticolHTML("<div id='mc' style='line-height:100px; -webkit-writing-mode
:vertical-rl;'>text<br>text<br>text<br>text<br>text<div id='spanner1'>spanner</d
iv>text<br>text<div id='spanner2'>text<br>text</div>text</div>"); | 305 setMulticolHTML("<div id='mc' style='line-height:100px; -webkit-writing-mode
:vertical-rl;'>text<br>text<br>text<br>text<br>text<div id='spanner1'>spanner</d
iv>text<br>text<div id='spanner2'>text<br>text</div>text</div>"); |
299 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); | 306 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); |
300 EXPECT_EQ(columnSetSignature(flowThread), "cscsc"); | 307 EXPECT_EQ(columnSetSignature(flowThread), "cscsc"); |
301 LayoutMultiColumnSet* firstRow = flowThread->firstMultiColumnSet(); | 308 LayoutMultiColumnSet* firstRow = flowThread->firstMultiColumnSet(); |
302 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(-10000)), firstRow);
// negative overflow | 309 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(-10000), LayoutBox::
AssociateWithFormerPage), firstRow); // negative overflow |
303 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit()), firstRow); | 310 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(-10000), LayoutBox::
AssociateWithLatterPage), firstRow); // negative overflow |
304 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(499)), firstRow); //
bottom of last line in first row. | 311 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(), LayoutBox::Associ
ateWithFormerPage), firstRow); |
| 312 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(), LayoutBox::Associ
ateWithLatterPage), firstRow); |
| 313 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(499), LayoutBox::Ass
ociateWithFormerPage), firstRow); // bottom of last line in first row. |
| 314 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(499), LayoutBox::Ass
ociateWithLatterPage), firstRow); // bottom of last line in first row. |
305 LayoutMultiColumnSet* secondRow = firstRow->nextSiblingMultiColumnSet(); | 315 LayoutMultiColumnSet* secondRow = firstRow->nextSiblingMultiColumnSet(); |
306 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(500)), secondRow); | 316 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(500), LayoutBox::Ass
ociateWithFormerPage), firstRow); |
307 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(699)), secondRow); | 317 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(500), LayoutBox::Ass
ociateWithLatterPage), secondRow); |
| 318 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(699), LayoutBox::Ass
ociateWithFormerPage), secondRow); |
| 319 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(699), LayoutBox::Ass
ociateWithLatterPage), secondRow); |
308 LayoutMultiColumnSet* thirdRow = secondRow->nextSiblingMultiColumnSet(); | 320 LayoutMultiColumnSet* thirdRow = secondRow->nextSiblingMultiColumnSet(); |
309 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(700)), thirdRow); | 321 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(700), LayoutBox::Ass
ociateWithFormerPage), secondRow); |
310 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(799)), thirdRow); //
bottom of last row | 322 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(700), LayoutBox::Ass
ociateWithLatterPage), thirdRow); |
311 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(10000)), thirdRow);
// overflow | 323 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(799), LayoutBox::Ass
ociateWithLatterPage), thirdRow); // bottom of last row |
| 324 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(10000), LayoutBox::A
ssociateWithFormerPage), thirdRow); // overflow |
| 325 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(10000), LayoutBox::A
ssociateWithLatterPage), thirdRow); // overflow |
312 } | 326 } |
313 | 327 |
314 TEST_F(MultiColumnRenderingTest, columnSetAtBlockOffsetVerticalLr) | 328 TEST_F(MultiColumnRenderingTest, columnSetAtBlockOffsetVerticalLr) |
315 { | 329 { |
316 setMulticolHTML("<div id='mc' style='line-height:100px; -webkit-writing-mode
:vertical-lr;'>text<br>text<br>text<br>text<br>text<div id='spanner1'>spanner</d
iv>text<br>text<div id='spanner2'>text<br>text</div>text</div>"); | 330 setMulticolHTML("<div id='mc' style='line-height:100px; -webkit-writing-mode
:vertical-lr;'>text<br>text<br>text<br>text<br>text<div id='spanner1'>spanner</d
iv>text<br>text<div id='spanner2'>text<br>text</div>text</div>"); |
317 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); | 331 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); |
318 EXPECT_EQ(columnSetSignature(flowThread), "cscsc"); | 332 EXPECT_EQ(columnSetSignature(flowThread), "cscsc"); |
319 LayoutMultiColumnSet* firstRow = flowThread->firstMultiColumnSet(); | 333 LayoutMultiColumnSet* firstRow = flowThread->firstMultiColumnSet(); |
320 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(-10000)), firstRow);
// negative overflow | 334 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(-10000), LayoutBox::
AssociateWithFormerPage), firstRow); // negative overflow |
321 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit()), firstRow); | 335 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(-10000), LayoutBox::
AssociateWithLatterPage), firstRow); // negative overflow |
322 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(499)), firstRow); //
bottom of last line in first row. | 336 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(), LayoutBox::Associ
ateWithFormerPage), firstRow); |
| 337 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(), LayoutBox::Associ
ateWithLatterPage), firstRow); |
| 338 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(499), LayoutBox::Ass
ociateWithFormerPage), firstRow); // bottom of last line in first row. |
| 339 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(499), LayoutBox::Ass
ociateWithLatterPage), firstRow); // bottom of last line in first row. |
323 LayoutMultiColumnSet* secondRow = firstRow->nextSiblingMultiColumnSet(); | 340 LayoutMultiColumnSet* secondRow = firstRow->nextSiblingMultiColumnSet(); |
324 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(500)), secondRow); | 341 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(500), LayoutBox::Ass
ociateWithFormerPage), firstRow); |
325 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(699)), secondRow); | 342 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(500), LayoutBox::Ass
ociateWithLatterPage), secondRow); |
| 343 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(699), LayoutBox::Ass
ociateWithFormerPage), secondRow); |
| 344 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(699), LayoutBox::Ass
ociateWithLatterPage), secondRow); |
326 LayoutMultiColumnSet* thirdRow = secondRow->nextSiblingMultiColumnSet(); | 345 LayoutMultiColumnSet* thirdRow = secondRow->nextSiblingMultiColumnSet(); |
327 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(700)), thirdRow); | 346 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(700), LayoutBox::Ass
ociateWithFormerPage), secondRow); |
328 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(799)), thirdRow); //
bottom of last row | 347 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(700), LayoutBox::Ass
ociateWithLatterPage), thirdRow); |
329 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(10000)), thirdRow);
// overflow | 348 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(799), LayoutBox::Ass
ociateWithLatterPage), thirdRow); // bottom of last row |
| 349 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(10000), LayoutBox::A
ssociateWithFormerPage), thirdRow); // overflow |
| 350 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(10000), LayoutBox::A
ssociateWithLatterPage), thirdRow); // overflow |
330 } | 351 } |
331 | 352 |
332 class MultiColumnTreeModifyingTest : public MultiColumnRenderingTest { | 353 class MultiColumnTreeModifyingTest : public MultiColumnRenderingTest { |
333 public: | 354 public: |
334 void setMulticolHTML(const char*); | 355 void setMulticolHTML(const char*); |
335 void reparentLayoutObject(const char* newParentId, const char* childId, cons
t char* insertBeforeId = nullptr); | 356 void reparentLayoutObject(const char* newParentId, const char* childId, cons
t char* insertBeforeId = nullptr); |
336 void destroyLayoutObject(LayoutObject* child); | 357 void destroyLayoutObject(LayoutObject* child); |
337 void destroyLayoutObject(const char* childId); | 358 void destroyLayoutObject(const char* childId); |
338 }; | 359 }; |
339 | 360 |
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
785 { | 806 { |
786 setMulticolHTML("<div id='mc'>text<div id='spanner'><div class='s'></div></d
iv>text</div>"); | 807 setMulticolHTML("<div id='mc'>text<div id='spanner'><div class='s'></div></d
iv>text</div>"); |
787 EXPECT_EQ(columnSetSignature("mc"), "csc"); | 808 EXPECT_EQ(columnSetSignature("mc"), "csc"); |
788 destroyLayoutObject("spanner"); | 809 destroyLayoutObject("spanner"); |
789 EXPECT_EQ(columnSetSignature("mc"), "c"); | 810 EXPECT_EQ(columnSetSignature("mc"), "c"); |
790 } | 811 } |
791 | 812 |
792 } // anonymous namespace | 813 } // anonymous namespace |
793 | 814 |
794 } // namespace blink | 815 } // namespace blink |
OLD | NEW |