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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThreadTest.cpp

Issue 2394263004: Reformat comments in core/layout up until LayoutMultiColumnFlowThread (Closed)
Patch Set: Rebase w/HEAD Created 4 years, 2 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
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
11 11
12 namespace blink { 12 namespace blink {
13 13
14 namespace { 14 namespace {
15 15
16 class MultiColumnRenderingTest : public RenderingTest { 16 class MultiColumnRenderingTest : public RenderingTest {
17 public: 17 public:
18 LayoutMultiColumnFlowThread* findFlowThread(const char* id) const; 18 LayoutMultiColumnFlowThread* findFlowThread(const char* id) const;
19 19
20 // Generate a signature string based on what kind of column boxes the flow thr ead has 20 // Generate a signature string based on what kind of column boxes the flow
21 // established. 'c' is used for regular column content sets, while 's' is used for spanners. 21 // thread has established. 'c' is used for regular column content sets, while
22 // '?' is used when there's an unknown box type (which should be considered a failure). 22 // 's' is used for spanners. '?' is used when there's an unknown box type
23 // (which should be considered a failure).
23 String columnSetSignature(LayoutMultiColumnFlowThread*); 24 String columnSetSignature(LayoutMultiColumnFlowThread*);
24 String columnSetSignature(const char* multicolId); 25 String columnSetSignature(const char* multicolId);
25 26
26 void setMulticolHTML(const String&); 27 void setMulticolHTML(const String&);
27 }; 28 };
28 29
29 LayoutMultiColumnFlowThread* MultiColumnRenderingTest::findFlowThread( 30 LayoutMultiColumnFlowThread* MultiColumnRenderingTest::findFlowThread(
30 const char* id) const { 31 const char* id) const {
31 if (LayoutBlockFlow* multicolContainer = 32 if (LayoutBlockFlow* multicolContainer =
32 toLayoutBlockFlow(getLayoutObjectByElementId(id))) 33 toLayoutBlockFlow(getLayoutObjectByElementId(id)))
(...skipping 23 matching lines...) Expand all
56 void MultiColumnRenderingTest::setMulticolHTML(const String& html) { 57 void MultiColumnRenderingTest::setMulticolHTML(const String& html) {
57 const char* style = 58 const char* style =
58 "<style>" 59 "<style>"
59 " #mc { columns:2; }" 60 " #mc { columns:2; }"
60 " .s, #spanner, #spanner1, #spanner2 { column-span:all; }" 61 " .s, #spanner, #spanner1, #spanner2 { column-span:all; }"
61 "</style>"; 62 "</style>";
62 setBodyInnerHTML(style + html); 63 setBodyInnerHTML(style + html);
63 } 64 }
64 65
65 TEST_F(MultiColumnRenderingTest, OneBlockWithInDepthTreeStructureCheck) { 66 TEST_F(MultiColumnRenderingTest, OneBlockWithInDepthTreeStructureCheck) {
66 // Examine the layout tree established by a simple multicol container with a b lock with some text inside. 67 // Examine the layout tree established by a simple multicol container with a
68 // block with some text inside.
67 setMulticolHTML("<div id='mc'><div>xxx</div></div>"); 69 setMulticolHTML("<div id='mc'><div>xxx</div></div>");
68 LayoutBlockFlow* multicolContainer = 70 LayoutBlockFlow* multicolContainer =
69 toLayoutBlockFlow(getLayoutObjectByElementId("mc")); 71 toLayoutBlockFlow(getLayoutObjectByElementId("mc"));
70 ASSERT_TRUE(multicolContainer); 72 ASSERT_TRUE(multicolContainer);
71 LayoutMultiColumnFlowThread* flowThread = 73 LayoutMultiColumnFlowThread* flowThread =
72 multicolContainer->multiColumnFlowThread(); 74 multicolContainer->multiColumnFlowThread();
73 ASSERT_TRUE(flowThread); 75 ASSERT_TRUE(flowThread);
74 EXPECT_EQ(columnSetSignature(flowThread), "c"); 76 EXPECT_EQ(columnSetSignature(flowThread), "c");
75 EXPECT_EQ(flowThread->parent(), multicolContainer); 77 EXPECT_EQ(flowThread->parent(), multicolContainer);
76 EXPECT_FALSE(flowThread->previousSibling()); 78 EXPECT_FALSE(flowThread->previousSibling());
(...skipping 20 matching lines...) Expand all
97 setMulticolHTML("<div id='mc'><div id='block'></div></div>"); 99 setMulticolHTML("<div id='mc'><div id='block'></div></div>");
98 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 100 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
99 ASSERT_EQ(columnSetSignature(flowThread), "c"); 101 ASSERT_EQ(columnSetSignature(flowThread), "c");
100 LayoutMultiColumnSet* columnSet = flowThread->firstMultiColumnSet(); 102 LayoutMultiColumnSet* columnSet = flowThread->firstMultiColumnSet();
101 EXPECT_EQ( 103 EXPECT_EQ(
102 flowThread->mapDescendantToColumnSet(getLayoutObjectByElementId("block")), 104 flowThread->mapDescendantToColumnSet(getLayoutObjectByElementId("block")),
103 columnSet); 105 columnSet);
104 } 106 }
105 107
106 TEST_F(MultiColumnRenderingTest, TwoBlocks) { 108 TEST_F(MultiColumnRenderingTest, TwoBlocks) {
107 // No matter how much content, we should only create one column set (unless th ere are spanners). 109 // No matter how much content, we should only create one column set (unless
110 // there are spanners).
108 setMulticolHTML( 111 setMulticolHTML(
109 "<div id='mc'><div id='block1'></div><div id='block2'></div></div>"); 112 "<div id='mc'><div id='block1'></div><div id='block2'></div></div>");
110 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 113 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
111 ASSERT_EQ(columnSetSignature(flowThread), "c"); 114 ASSERT_EQ(columnSetSignature(flowThread), "c");
112 LayoutMultiColumnSet* columnSet = flowThread->firstMultiColumnSet(); 115 LayoutMultiColumnSet* columnSet = flowThread->firstMultiColumnSet();
113 EXPECT_EQ(flowThread->mapDescendantToColumnSet( 116 EXPECT_EQ(flowThread->mapDescendantToColumnSet(
114 getLayoutObjectByElementId("block1")), 117 getLayoutObjectByElementId("block1")),
115 columnSet); 118 columnSet);
116 EXPECT_EQ(flowThread->mapDescendantToColumnSet( 119 EXPECT_EQ(flowThread->mapDescendantToColumnSet(
117 getLayoutObjectByElementId("block2")), 120 getLayoutObjectByElementId("block2")),
118 columnSet); 121 columnSet);
119 } 122 }
120 123
121 TEST_F(MultiColumnRenderingTest, Spanner) { 124 TEST_F(MultiColumnRenderingTest, Spanner) {
122 // With one spanner and no column content, we should create a spanner set. 125 // With one spanner and no column content, we should create a spanner set.
123 setMulticolHTML("<div id='mc'><div id='spanner'></div></div>"); 126 setMulticolHTML("<div id='mc'><div id='spanner'></div></div>");
124 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 127 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
125 ASSERT_EQ(columnSetSignature(flowThread), "s"); 128 ASSERT_EQ(columnSetSignature(flowThread), "s");
126 LayoutBox* columnBox = flowThread->firstMultiColumnBox(); 129 LayoutBox* columnBox = flowThread->firstMultiColumnBox();
127 EXPECT_EQ(flowThread->firstMultiColumnSet(), nullptr); 130 EXPECT_EQ(flowThread->firstMultiColumnSet(), nullptr);
128 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder( 131 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(
129 getLayoutObjectByElementId("spanner")), 132 getLayoutObjectByElementId("spanner")),
130 columnBox); 133 columnBox);
131 EXPECT_EQ(getLayoutObjectByElementId("spanner")->spannerPlaceholder(), 134 EXPECT_EQ(getLayoutObjectByElementId("spanner")->spannerPlaceholder(),
132 columnBox); 135 columnBox);
133 } 136 }
134 137
135 TEST_F(MultiColumnRenderingTest, ContentThenSpanner) { 138 TEST_F(MultiColumnRenderingTest, ContentThenSpanner) {
136 // With some column content followed by a spanner, we need a column set follow ed by a spanner set. 139 // With some column content followed by a spanner, we need a column set
140 // followed by a spanner set.
137 setMulticolHTML( 141 setMulticolHTML(
138 "<div id='mc'><div id='columnContent'></div><div " 142 "<div id='mc'><div id='columnContent'></div><div "
139 "id='spanner'></div></div>"); 143 "id='spanner'></div></div>");
140 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 144 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
141 ASSERT_EQ(columnSetSignature(flowThread), "cs"); 145 ASSERT_EQ(columnSetSignature(flowThread), "cs");
142 LayoutBox* columnBox = flowThread->firstMultiColumnBox(); 146 LayoutBox* columnBox = flowThread->firstMultiColumnBox();
143 EXPECT_EQ(flowThread->mapDescendantToColumnSet( 147 EXPECT_EQ(flowThread->mapDescendantToColumnSet(
144 getLayoutObjectByElementId("columnContent")), 148 getLayoutObjectByElementId("columnContent")),
145 columnBox); 149 columnBox);
146 columnBox = columnBox->nextSiblingMultiColumnBox(); 150 columnBox = columnBox->nextSiblingMultiColumnBox();
147 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder( 151 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(
148 getLayoutObjectByElementId("spanner")), 152 getLayoutObjectByElementId("spanner")),
149 columnBox); 153 columnBox);
150 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder( 154 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(
151 getLayoutObjectByElementId("columnContent")), 155 getLayoutObjectByElementId("columnContent")),
152 nullptr); 156 nullptr);
153 } 157 }
154 158
155 TEST_F(MultiColumnRenderingTest, SpannerThenContent) { 159 TEST_F(MultiColumnRenderingTest, SpannerThenContent) {
156 // With a spanner followed by some column content, we need a spanner set follo wed by a column set. 160 // With a spanner followed by some column content, we need a spanner set
161 // followed by a column set.
157 setMulticolHTML( 162 setMulticolHTML(
158 "<div id='mc'><div id='spanner'></div><div " 163 "<div id='mc'><div id='spanner'></div><div "
159 "id='columnContent'></div></div>"); 164 "id='columnContent'></div></div>");
160 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 165 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
161 ASSERT_EQ(columnSetSignature(flowThread), "sc"); 166 ASSERT_EQ(columnSetSignature(flowThread), "sc");
162 LayoutBox* columnBox = flowThread->firstMultiColumnBox(); 167 LayoutBox* columnBox = flowThread->firstMultiColumnBox();
163 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder( 168 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(
164 getLayoutObjectByElementId("spanner")), 169 getLayoutObjectByElementId("spanner")),
165 columnBox); 170 columnBox);
166 columnBox = columnBox->nextSiblingMultiColumnBox(); 171 columnBox = columnBox->nextSiblingMultiColumnBox();
167 EXPECT_EQ(flowThread->mapDescendantToColumnSet( 172 EXPECT_EQ(flowThread->mapDescendantToColumnSet(
168 getLayoutObjectByElementId("columnContent")), 173 getLayoutObjectByElementId("columnContent")),
169 columnBox); 174 columnBox);
170 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder( 175 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(
171 getLayoutObjectByElementId("columnContent")), 176 getLayoutObjectByElementId("columnContent")),
172 nullptr); 177 nullptr);
173 } 178 }
174 179
175 TEST_F(MultiColumnRenderingTest, ContentThenSpannerThenContent) { 180 TEST_F(MultiColumnRenderingTest, ContentThenSpannerThenContent) {
176 // With column content followed by a spanner followed by some column content, we need a column 181 // With column content followed by a spanner followed by some column content,
182 // we need a column
177 // set followed by a spanner set followed by a column set. 183 // set followed by a spanner set followed by a column set.
178 setMulticolHTML( 184 setMulticolHTML(
179 "<div id='mc'><div id='columnContentBefore'></div><div " 185 "<div id='mc'><div id='columnContentBefore'></div><div "
180 "id='spanner'></div><div id='columnContentAfter'></div></div>"); 186 "id='spanner'></div><div id='columnContentAfter'></div></div>");
181 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 187 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
182 ASSERT_EQ(columnSetSignature(flowThread), "csc"); 188 ASSERT_EQ(columnSetSignature(flowThread), "csc");
183 LayoutBox* columnBox = flowThread->firstMultiColumnSet(); 189 LayoutBox* columnBox = flowThread->firstMultiColumnSet();
184 EXPECT_EQ(flowThread->mapDescendantToColumnSet( 190 EXPECT_EQ(flowThread->mapDescendantToColumnSet(
185 getLayoutObjectByElementId("columnContentBefore")), 191 getLayoutObjectByElementId("columnContentBefore")),
186 columnBox); 192 columnBox);
(...skipping 28 matching lines...) Expand all
215 columnBox); 221 columnBox);
216 columnBox = columnBox->nextSiblingMultiColumnBox(); 222 columnBox = columnBox->nextSiblingMultiColumnBox();
217 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder( 223 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(
218 getLayoutObjectByElementId("spanner2")), 224 getLayoutObjectByElementId("spanner2")),
219 columnBox); 225 columnBox);
220 EXPECT_EQ(getLayoutObjectByElementId("spanner2")->spannerPlaceholder(), 226 EXPECT_EQ(getLayoutObjectByElementId("spanner2")->spannerPlaceholder(),
221 columnBox); 227 columnBox);
222 } 228 }
223 229
224 TEST_F(MultiColumnRenderingTest, SpannerThenContentThenSpanner) { 230 TEST_F(MultiColumnRenderingTest, SpannerThenContentThenSpanner) {
225 // With two spanners and some column content in-between, we need a spanner set , a column set and another spanner set. 231 // With two spanners and some column content in-between, we need a spanner
232 // set, a column set and another spanner set.
226 setMulticolHTML( 233 setMulticolHTML(
227 "<div id='mc'><div id='spanner1'></div><div " 234 "<div id='mc'><div id='spanner1'></div><div "
228 "id='columnContent'></div><div id='spanner2'></div></div>"); 235 "id='columnContent'></div><div id='spanner2'></div></div>");
229 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 236 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
230 ASSERT_EQ(columnSetSignature(flowThread), "scs"); 237 ASSERT_EQ(columnSetSignature(flowThread), "scs");
231 LayoutMultiColumnSet* columnSet = flowThread->firstMultiColumnSet(); 238 LayoutMultiColumnSet* columnSet = flowThread->firstMultiColumnSet();
232 EXPECT_EQ(columnSet->nextSiblingMultiColumnSet(), nullptr); 239 EXPECT_EQ(columnSet->nextSiblingMultiColumnSet(), nullptr);
233 LayoutBox* columnBox = flowThread->firstMultiColumnBox(); 240 LayoutBox* columnBox = flowThread->firstMultiColumnBox();
234 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder( 241 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(
235 getLayoutObjectByElementId("spanner1")), 242 getLayoutObjectByElementId("spanner1")),
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 void setMulticolHTML(const char*); 568 void setMulticolHTML(const char*);
562 void reparentLayoutObject(const char* newParentId, 569 void reparentLayoutObject(const char* newParentId,
563 const char* childId, 570 const char* childId,
564 const char* insertBeforeId = nullptr); 571 const char* insertBeforeId = nullptr);
565 void destroyLayoutObject(LayoutObject* child); 572 void destroyLayoutObject(LayoutObject* child);
566 void destroyLayoutObject(const char* childId); 573 void destroyLayoutObject(const char* childId);
567 }; 574 };
568 575
569 void MultiColumnTreeModifyingTest::setMulticolHTML(const char* html) { 576 void MultiColumnTreeModifyingTest::setMulticolHTML(const char* html) {
570 MultiColumnRenderingTest::setMulticolHTML(html); 577 MultiColumnRenderingTest::setMulticolHTML(html);
571 // Allow modifications to the layout tree structure, because that's what we wa nt to test. 578 // Allow modifications to the layout tree structure, because that's what we
579 // want to test.
572 document().lifecycle().advanceTo(DocumentLifecycle::InStyleRecalc); 580 document().lifecycle().advanceTo(DocumentLifecycle::InStyleRecalc);
573 } 581 }
574 582
575 void MultiColumnTreeModifyingTest::reparentLayoutObject( 583 void MultiColumnTreeModifyingTest::reparentLayoutObject(
576 const char* newParentId, 584 const char* newParentId,
577 const char* childId, 585 const char* childId,
578 const char* insertBeforeId) { 586 const char* insertBeforeId) {
579 LayoutObject* newParent = getLayoutObjectByElementId(newParentId); 587 LayoutObject* newParent = getLayoutObjectByElementId(newParentId);
580 LayoutObject* child = getLayoutObjectByElementId(childId); 588 LayoutObject* child = getLayoutObjectByElementId(childId);
581 LayoutObject* insertBefore = 589 LayoutObject* insertBefore =
582 insertBeforeId ? getLayoutObjectByElementId(insertBeforeId) : nullptr; 590 insertBeforeId ? getLayoutObjectByElementId(insertBeforeId) : nullptr;
583 child->remove(); 591 child->remove();
584 newParent->addChild(child, insertBefore); 592 newParent->addChild(child, insertBefore);
585 } 593 }
586 594
587 void MultiColumnTreeModifyingTest::destroyLayoutObject(LayoutObject* child) { 595 void MultiColumnTreeModifyingTest::destroyLayoutObject(LayoutObject* child) {
588 // Remove and destroy in separate steps, so that we get to test removal of sub trees. 596 // Remove and destroy in separate steps, so that we get to test removal of
597 // subtrees.
589 child->remove(); 598 child->remove();
590 child->node()->detachLayoutTree(); 599 child->node()->detachLayoutTree();
591 } 600 }
592 601
593 void MultiColumnTreeModifyingTest::destroyLayoutObject(const char* childId) { 602 void MultiColumnTreeModifyingTest::destroyLayoutObject(const char* childId) {
594 destroyLayoutObject(getLayoutObjectByElementId(childId)); 603 destroyLayoutObject(getLayoutObjectByElementId(childId));
595 } 604 }
596 605
597 TEST_F(MultiColumnTreeModifyingTest, InsertFirstContentAndRemove) { 606 TEST_F(MultiColumnTreeModifyingTest, InsertFirstContentAndRemove) {
598 setMulticolHTML("<div id='block'></div><div id='mc'></div>"); 607 setMulticolHTML("<div id='block'></div><div id='mc'></div>");
599 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 608 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
600 LayoutBlockFlow* block = 609 LayoutBlockFlow* block =
601 toLayoutBlockFlow(getLayoutObjectByElementId("block")); 610 toLayoutBlockFlow(getLayoutObjectByElementId("block"));
602 LayoutBlockFlow* multicolContainer = 611 LayoutBlockFlow* multicolContainer =
603 toLayoutBlockFlow(getLayoutObjectByElementId("mc")); 612 toLayoutBlockFlow(getLayoutObjectByElementId("mc"));
604 block->remove(); 613 block->remove();
605 multicolContainer->addChild(block); 614 multicolContainer->addChild(block);
606 EXPECT_EQ(block->parent(), flowThread); 615 EXPECT_EQ(block->parent(), flowThread);
607 // A set should have appeared, now that the multicol container has content. 616 // A set should have appeared, now that the multicol container has content.
608 EXPECT_EQ(columnSetSignature(flowThread), "c"); 617 EXPECT_EQ(columnSetSignature(flowThread), "c");
609 618
610 destroyLayoutObject(block); 619 destroyLayoutObject(block);
611 // The set should be gone again now, since there's nothing inside the multicol container anymore. 620 // The set should be gone again now, since there's nothing inside the multicol
621 // container anymore.
612 EXPECT_EQ(columnSetSignature("mc"), ""); 622 EXPECT_EQ(columnSetSignature("mc"), "");
613 } 623 }
614 624
615 TEST_F(MultiColumnTreeModifyingTest, InsertContentBeforeContentAndRemove) { 625 TEST_F(MultiColumnTreeModifyingTest, InsertContentBeforeContentAndRemove) {
616 setMulticolHTML( 626 setMulticolHTML(
617 "<div id='block'></div><div id='mc'><div id='insertBefore'></div></div>"); 627 "<div id='block'></div><div id='mc'><div id='insertBefore'></div></div>");
618 EXPECT_EQ(columnSetSignature("mc"), "c"); 628 EXPECT_EQ(columnSetSignature("mc"), "c");
619 reparentLayoutObject("mc", "block", "insertBefore"); 629 reparentLayoutObject("mc", "block", "insertBefore");
620 // There was already some content prior to our insertion, so no new set should be inserted. 630 // There was already some content prior to our insertion, so no new set should
631 // be inserted.
621 EXPECT_EQ(columnSetSignature("mc"), "c"); 632 EXPECT_EQ(columnSetSignature("mc"), "c");
622 destroyLayoutObject("block"); 633 destroyLayoutObject("block");
623 // There's still some content after the removal, so the set should remain. 634 // There's still some content after the removal, so the set should remain.
624 EXPECT_EQ(columnSetSignature("mc"), "c"); 635 EXPECT_EQ(columnSetSignature("mc"), "c");
625 } 636 }
626 637
627 TEST_F(MultiColumnTreeModifyingTest, InsertContentAfterContentAndRemove) { 638 TEST_F(MultiColumnTreeModifyingTest, InsertContentAfterContentAndRemove) {
628 setMulticolHTML("<div id='block'></div><div id='mc'><div></div></div>"); 639 setMulticolHTML("<div id='block'></div><div id='mc'><div></div></div>");
629 EXPECT_EQ(columnSetSignature("mc"), "c"); 640 EXPECT_EQ(columnSetSignature("mc"), "c");
630 reparentLayoutObject("mc", "block"); 641 reparentLayoutObject("mc", "block");
631 // There was already some content prior to our insertion, so no new set should be inserted. 642 // There was already some content prior to our insertion, so no new set should
643 // be inserted.
632 EXPECT_EQ(columnSetSignature("mc"), "c"); 644 EXPECT_EQ(columnSetSignature("mc"), "c");
633 destroyLayoutObject("block"); 645 destroyLayoutObject("block");
634 // There's still some content after the removal, so the set should remain. 646 // There's still some content after the removal, so the set should remain.
635 EXPECT_EQ(columnSetSignature("mc"), "c"); 647 EXPECT_EQ(columnSetSignature("mc"), "c");
636 } 648 }
637 649
638 TEST_F(MultiColumnTreeModifyingTest, InsertSpannerAndRemove) { 650 TEST_F(MultiColumnTreeModifyingTest, InsertSpannerAndRemove) {
639 setMulticolHTML("<div id='spanner'></div><div id='mc'></div>"); 651 setMulticolHTML("<div id='spanner'></div><div id='mc'></div>");
640 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 652 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
641 LayoutBlockFlow* spanner = 653 LayoutBlockFlow* spanner =
642 toLayoutBlockFlow(getLayoutObjectByElementId("spanner")); 654 toLayoutBlockFlow(getLayoutObjectByElementId("spanner"));
643 LayoutBlockFlow* multicolContainer = 655 LayoutBlockFlow* multicolContainer =
644 toLayoutBlockFlow(getLayoutObjectByElementId("mc")); 656 toLayoutBlockFlow(getLayoutObjectByElementId("mc"));
645 spanner->remove(); 657 spanner->remove();
646 multicolContainer->addChild(spanner); 658 multicolContainer->addChild(spanner);
647 EXPECT_EQ(spanner->parent(), flowThread); 659 EXPECT_EQ(spanner->parent(), flowThread);
648 // We should now have a spanner placeholder, since we just moved a spanner int o the multicol container. 660 // We should now have a spanner placeholder, since we just moved a spanner
661 // into the multicol container.
649 EXPECT_EQ(columnSetSignature(flowThread), "s"); 662 EXPECT_EQ(columnSetSignature(flowThread), "s");
650 destroyLayoutObject(spanner); 663 destroyLayoutObject(spanner);
651 EXPECT_EQ(columnSetSignature(flowThread), ""); 664 EXPECT_EQ(columnSetSignature(flowThread), "");
652 } 665 }
653 666
654 TEST_F(MultiColumnTreeModifyingTest, InsertTwoSpannersAndRemove) { 667 TEST_F(MultiColumnTreeModifyingTest, InsertTwoSpannersAndRemove) {
655 setMulticolHTML( 668 setMulticolHTML(
656 "<div id='block'>ee<div class='s'></div><div class='s'></div></div><div " 669 "<div id='block'>ee<div class='s'></div><div class='s'></div></div><div "
657 "id='mc'></div>"); 670 "id='mc'></div>");
658 reparentLayoutObject("mc", "block"); 671 reparentLayoutObject("mc", "block");
659 EXPECT_EQ(columnSetSignature("mc"), "css"); 672 EXPECT_EQ(columnSetSignature("mc"), "css");
660 destroyLayoutObject("block"); 673 destroyLayoutObject("block");
661 EXPECT_EQ(columnSetSignature("mc"), ""); 674 EXPECT_EQ(columnSetSignature("mc"), "");
662 } 675 }
663 676
664 TEST_F(MultiColumnTreeModifyingTest, InsertSpannerAfterContentAndRemove) { 677 TEST_F(MultiColumnTreeModifyingTest, InsertSpannerAfterContentAndRemove) {
665 setMulticolHTML("<div id='spanner'></div><div id='mc'><div></div></div>"); 678 setMulticolHTML("<div id='spanner'></div><div id='mc'><div></div></div>");
666 reparentLayoutObject("mc", "spanner"); 679 reparentLayoutObject("mc", "spanner");
667 // We should now have a spanner placeholder, since we just moved a spanner int o the multicol container. 680 // We should now have a spanner placeholder, since we just moved a spanner
681 // into the multicol container.
668 EXPECT_EQ(columnSetSignature("mc"), "cs"); 682 EXPECT_EQ(columnSetSignature("mc"), "cs");
669 destroyLayoutObject("spanner"); 683 destroyLayoutObject("spanner");
670 EXPECT_EQ(columnSetSignature("mc"), "c"); 684 EXPECT_EQ(columnSetSignature("mc"), "c");
671 } 685 }
672 686
673 TEST_F(MultiColumnTreeModifyingTest, InsertSpannerBeforeContentAndRemove) { 687 TEST_F(MultiColumnTreeModifyingTest, InsertSpannerBeforeContentAndRemove) {
674 setMulticolHTML( 688 setMulticolHTML(
675 "<div id='spanner'></div><div id='mc'><div " 689 "<div id='spanner'></div><div id='mc'><div "
676 "id='columnContent'></div></div>"); 690 "id='columnContent'></div></div>");
677 reparentLayoutObject("mc", "spanner", "columnContent"); 691 reparentLayoutObject("mc", "spanner", "columnContent");
678 // We should now have a spanner placeholder, since we just moved a spanner int o the multicol container. 692 // We should now have a spanner placeholder, since we just moved a spanner
693 // into the multicol container.
679 EXPECT_EQ(columnSetSignature("mc"), "sc"); 694 EXPECT_EQ(columnSetSignature("mc"), "sc");
680 destroyLayoutObject("spanner"); 695 destroyLayoutObject("spanner");
681 EXPECT_EQ(columnSetSignature("mc"), "c"); 696 EXPECT_EQ(columnSetSignature("mc"), "c");
682 } 697 }
683 698
684 TEST_F(MultiColumnTreeModifyingTest, InsertSpannerBetweenContentAndRemove) { 699 TEST_F(MultiColumnTreeModifyingTest, InsertSpannerBetweenContentAndRemove) {
685 setMulticolHTML( 700 setMulticolHTML(
686 "<div id='spanner'></div><div id='mc'><div></div><div " 701 "<div id='spanner'></div><div id='mc'><div></div><div "
687 "id='insertBefore'></div></div>"); 702 "id='insertBefore'></div></div>");
688 reparentLayoutObject("mc", "spanner", "insertBefore"); 703 reparentLayoutObject("mc", "spanner", "insertBefore");
689 // Since the spanner was inserted in the middle of column content, what used t o be one column 704 // Since the spanner was inserted in the middle of column content, what used
690 // set had to be split in two, in order to get a spot to insert the spanner pl aceholder. 705 // to be one column set had to be split in two, in order to get a spot to
706 // insert the spanner placeholder.
691 EXPECT_EQ(columnSetSignature("mc"), "csc"); 707 EXPECT_EQ(columnSetSignature("mc"), "csc");
692 destroyLayoutObject("spanner"); 708 destroyLayoutObject("spanner");
693 // The spanner placeholder should be gone again now, and the two sets be merge d into one. 709 // The spanner placeholder should be gone again now, and the two sets be
710 // merged into one.
694 EXPECT_EQ(columnSetSignature("mc"), "c"); 711 EXPECT_EQ(columnSetSignature("mc"), "c");
695 } 712 }
696 713
697 TEST_F(MultiColumnTreeModifyingTest, 714 TEST_F(MultiColumnTreeModifyingTest,
698 InsertSubtreeWithContentAndSpannerAndRemove) { 715 InsertSubtreeWithContentAndSpannerAndRemove) {
699 setMulticolHTML( 716 setMulticolHTML(
700 "<div id='block'>text<div id='spanner'></div>text</div><div " 717 "<div id='block'>text<div id='spanner'></div>text</div><div "
701 "id='mc'></div>"); 718 "id='mc'></div>");
702 reparentLayoutObject("mc", "block"); 719 reparentLayoutObject("mc", "block");
703 EXPECT_EQ(columnSetSignature("mc"), "csc"); 720 EXPECT_EQ(columnSetSignature("mc"), "csc");
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
767 EXPECT_EQ(columnSetSignature("mc"), "s"); 784 EXPECT_EQ(columnSetSignature("mc"), "s");
768 } 785 }
769 786
770 TEST_F(MultiColumnTreeModifyingTest, 787 TEST_F(MultiColumnTreeModifyingTest,
771 InsertContentAfterContentBeforeSpannerAndRemove) { 788 InsertContentAfterContentBeforeSpannerAndRemove) {
772 setMulticolHTML( 789 setMulticolHTML(
773 "<div id='block'></div><div id='mc'>text<div id='insertBefore' " 790 "<div id='block'></div><div id='mc'>text<div id='insertBefore' "
774 "class='s'></div></div>"); 791 "class='s'></div></div>");
775 EXPECT_EQ(columnSetSignature("mc"), "cs"); 792 EXPECT_EQ(columnSetSignature("mc"), "cs");
776 reparentLayoutObject("mc", "block", "insertBefore"); 793 reparentLayoutObject("mc", "block", "insertBefore");
777 // There was already some content before the spanner prior to our insertion, s o no new set 794 // There was already some content before the spanner prior to our insertion,
778 // should be inserted. 795 // so no new set should be inserted.
779 EXPECT_EQ(columnSetSignature("mc"), "cs"); 796 EXPECT_EQ(columnSetSignature("mc"), "cs");
780 destroyLayoutObject("block"); 797 destroyLayoutObject("block");
781 EXPECT_EQ(columnSetSignature("mc"), "cs"); 798 EXPECT_EQ(columnSetSignature("mc"), "cs");
782 } 799 }
783 800
784 TEST_F(MultiColumnTreeModifyingTest, 801 TEST_F(MultiColumnTreeModifyingTest,
785 InsertContentAfterContentAndSpannerAndRemove) { 802 InsertContentAfterContentAndSpannerAndRemove) {
786 setMulticolHTML( 803 setMulticolHTML(
787 "<div id='block'></div><div id='mc'>content<div class='s'></div></div>"); 804 "<div id='block'></div><div id='mc'>content<div class='s'></div></div>");
788 EXPECT_EQ(columnSetSignature("mc"), "cs"); 805 EXPECT_EQ(columnSetSignature("mc"), "cs");
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
1064 "<div id='mc'>text<div id='spanner'><div " 1081 "<div id='mc'>text<div id='spanner'><div "
1065 "class='s'></div></div>text</div>"); 1082 "class='s'></div></div>text</div>");
1066 EXPECT_EQ(columnSetSignature("mc"), "csc"); 1083 EXPECT_EQ(columnSetSignature("mc"), "csc");
1067 destroyLayoutObject("spanner"); 1084 destroyLayoutObject("spanner");
1068 EXPECT_EQ(columnSetSignature("mc"), "c"); 1085 EXPECT_EQ(columnSetSignature("mc"), "c");
1069 } 1086 }
1070 1087
1071 } // anonymous namespace 1088 } // anonymous namespace
1072 1089
1073 } // namespace blink 1090 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698