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

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

Issue 1662483002: Introduce RenderingTest::getLayoutObjectByElementId(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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 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 10 matching lines...) Expand all
21 // established. 'c' is used for regular column content sets, while 's' is us ed for spanners. 21 // established. 'c' is used for regular column content sets, while 's' is us ed for spanners.
22 // '?' is used when there's an unknown box type (which should be considered a failure). 22 // '?' is used when there's an unknown box type (which should be considered a failure).
23 String columnSetSignature(LayoutMultiColumnFlowThread*); 23 String columnSetSignature(LayoutMultiColumnFlowThread*);
24 String columnSetSignature(const char* multicolId); 24 String columnSetSignature(const char* multicolId);
25 25
26 void setMulticolHTML(const String&); 26 void setMulticolHTML(const String&);
27 }; 27 };
28 28
29 LayoutMultiColumnFlowThread* MultiColumnRenderingTest::findFlowThread(const char * id) const 29 LayoutMultiColumnFlowThread* MultiColumnRenderingTest::findFlowThread(const char * id) const
30 { 30 {
31 Node* multicol = document().getElementById(id); 31 if (LayoutBlockFlow* multicolContainer = toLayoutBlockFlow(getLayoutObjectBy ElementId(id)))
32 if (!multicol) 32 return multicolContainer->multiColumnFlowThread();
33 return nullptr; 33 return nullptr;
34 LayoutBlockFlow* multicolContainer = toLayoutBlockFlow(multicol->layoutObjec t());
35 if (!multicolContainer)
36 return nullptr;
37 return multicolContainer->multiColumnFlowThread();
38 } 34 }
39 35
40 String MultiColumnRenderingTest::columnSetSignature(LayoutMultiColumnFlowThread* flowThread) 36 String MultiColumnRenderingTest::columnSetSignature(LayoutMultiColumnFlowThread* flowThread)
41 { 37 {
42 String signature = ""; 38 String signature = "";
43 for (LayoutBox* columnBox = flowThread->firstMultiColumnBox(); 39 for (LayoutBox* columnBox = flowThread->firstMultiColumnBox();
44 columnBox; 40 columnBox;
45 columnBox = columnBox->nextSiblingMultiColumnBox()) { 41 columnBox = columnBox->nextSiblingMultiColumnBox()) {
46 if (columnBox->isLayoutMultiColumnSpannerPlaceholder()) 42 if (columnBox->isLayoutMultiColumnSpannerPlaceholder())
47 signature.append('s'); 43 signature.append('s');
(...skipping 17 matching lines...) Expand all
65 " #mc { -webkit-columns:2; }" 61 " #mc { -webkit-columns:2; }"
66 " .s, #spanner, #spanner1, #spanner2 { -webkit-column-span:all; }" 62 " .s, #spanner, #spanner1, #spanner2 { -webkit-column-span:all; }"
67 "</style>"; 63 "</style>";
68 setBodyInnerHTML(style + html); 64 setBodyInnerHTML(style + html);
69 } 65 }
70 66
71 TEST_F(MultiColumnRenderingTest, OneBlockWithInDepthTreeStructureCheck) 67 TEST_F(MultiColumnRenderingTest, OneBlockWithInDepthTreeStructureCheck)
72 { 68 {
73 // Examine the layout tree established by a simple multicol container with a block with some text inside. 69 // Examine the layout tree established by a simple multicol container with a block with some text inside.
74 setMulticolHTML("<div id='mc'><div>xxx</div></div>"); 70 setMulticolHTML("<div id='mc'><div>xxx</div></div>");
75 Node* multicol = document().getElementById("mc"); 71 LayoutBlockFlow* multicolContainer = toLayoutBlockFlow(getLayoutObjectByElem entId("mc"));
76 ASSERT_TRUE(multicol);
77 LayoutBlockFlow* multicolContainer = toLayoutBlockFlow(multicol->layoutObjec t());
78 ASSERT_TRUE(multicolContainer); 72 ASSERT_TRUE(multicolContainer);
79 LayoutMultiColumnFlowThread* flowThread = multicolContainer->multiColumnFlow Thread(); 73 LayoutMultiColumnFlowThread* flowThread = multicolContainer->multiColumnFlow Thread();
80 ASSERT_TRUE(flowThread); 74 ASSERT_TRUE(flowThread);
81 EXPECT_EQ(columnSetSignature(flowThread), "c"); 75 EXPECT_EQ(columnSetSignature(flowThread), "c");
82 EXPECT_EQ(flowThread->parent(), multicolContainer); 76 EXPECT_EQ(flowThread->parent(), multicolContainer);
83 EXPECT_FALSE(flowThread->previousSibling()); 77 EXPECT_FALSE(flowThread->previousSibling());
84 LayoutMultiColumnSet* columnSet = flowThread->firstMultiColumnSet(); 78 LayoutMultiColumnSet* columnSet = flowThread->firstMultiColumnSet();
85 ASSERT_TRUE(columnSet); 79 ASSERT_TRUE(columnSet);
86 EXPECT_EQ(columnSet->previousSibling(), flowThread); 80 EXPECT_EQ(columnSet->previousSibling(), flowThread);
87 EXPECT_FALSE(columnSet->nextSibling()); 81 EXPECT_FALSE(columnSet->nextSibling());
(...skipping 12 matching lines...) Expand all
100 EXPECT_EQ(columnSetSignature("mc"), ""); 94 EXPECT_EQ(columnSetSignature("mc"), "");
101 } 95 }
102 96
103 TEST_F(MultiColumnRenderingTest, OneBlock) 97 TEST_F(MultiColumnRenderingTest, OneBlock)
104 { 98 {
105 // There is some content, so we should create a column set. 99 // There is some content, so we should create a column set.
106 setMulticolHTML("<div id='mc'><div id='block'></div></div>"); 100 setMulticolHTML("<div id='mc'><div id='block'></div></div>");
107 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 101 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
108 ASSERT_EQ(columnSetSignature(flowThread), "c"); 102 ASSERT_EQ(columnSetSignature(flowThread), "c");
109 LayoutMultiColumnSet* columnSet = flowThread->firstMultiColumnSet(); 103 LayoutMultiColumnSet* columnSet = flowThread->firstMultiColumnSet();
110 EXPECT_EQ(flowThread->mapDescendantToColumnSet(document().getElementById("bl ock")->layoutObject()), columnSet); 104 EXPECT_EQ(flowThread->mapDescendantToColumnSet(getLayoutObjectByElementId("b lock")), columnSet);
111 } 105 }
112 106
113 TEST_F(MultiColumnRenderingTest, TwoBlocks) 107 TEST_F(MultiColumnRenderingTest, TwoBlocks)
114 { 108 {
115 // No matter how much content, we should only create one column set (unless there are spanners). 109 // No matter how much content, we should only create one column set (unless there are spanners).
116 setMulticolHTML("<div id='mc'><div id='block1'></div><div id='block2'></div> </div>"); 110 setMulticolHTML("<div id='mc'><div id='block1'></div><div id='block2'></div> </div>");
117 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 111 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
118 ASSERT_EQ(columnSetSignature(flowThread), "c"); 112 ASSERT_EQ(columnSetSignature(flowThread), "c");
119 LayoutMultiColumnSet* columnSet = flowThread->firstMultiColumnSet(); 113 LayoutMultiColumnSet* columnSet = flowThread->firstMultiColumnSet();
120 EXPECT_EQ(flowThread->mapDescendantToColumnSet(document().getElementById("bl ock1")->layoutObject()), columnSet); 114 EXPECT_EQ(flowThread->mapDescendantToColumnSet(getLayoutObjectByElementId("b lock1")), columnSet);
121 EXPECT_EQ(flowThread->mapDescendantToColumnSet(document().getElementById("bl ock2")->layoutObject()), columnSet); 115 EXPECT_EQ(flowThread->mapDescendantToColumnSet(getLayoutObjectByElementId("b lock2")), columnSet);
122 } 116 }
123 117
124 TEST_F(MultiColumnRenderingTest, Spanner) 118 TEST_F(MultiColumnRenderingTest, Spanner)
125 { 119 {
126 // With one spanner and no column content, we should create a spanner set. 120 // With one spanner and no column content, we should create a spanner set.
127 setMulticolHTML("<div id='mc'><div id='spanner'></div></div>"); 121 setMulticolHTML("<div id='mc'><div id='spanner'></div></div>");
128 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 122 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
129 ASSERT_EQ(columnSetSignature(flowThread), "s"); 123 ASSERT_EQ(columnSetSignature(flowThread), "s");
130 LayoutBox* columnBox = flowThread->firstMultiColumnBox(); 124 LayoutBox* columnBox = flowThread->firstMultiColumnBox();
131 EXPECT_EQ(flowThread->firstMultiColumnSet(), nullptr); 125 EXPECT_EQ(flowThread->firstMultiColumnSet(), nullptr);
132 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("spanner")->layoutObject()), columnBox); 126 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("spanner")), columnBox);
133 EXPECT_EQ(document().getElementById("spanner")->layoutObject()->spannerPlace holder(), columnBox); 127 EXPECT_EQ(getLayoutObjectByElementId("spanner")->spannerPlaceholder(), colum nBox);
134 } 128 }
135 129
136 TEST_F(MultiColumnRenderingTest, ContentThenSpanner) 130 TEST_F(MultiColumnRenderingTest, ContentThenSpanner)
137 { 131 {
138 // With some column content followed by a spanner, we need a column set foll owed by a spanner set. 132 // With some column content followed by a spanner, we need a column set foll owed by a spanner set.
139 setMulticolHTML("<div id='mc'><div id='columnContent'></div><div id='spanner '></div></div>"); 133 setMulticolHTML("<div id='mc'><div id='columnContent'></div><div id='spanner '></div></div>");
140 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 134 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
141 ASSERT_EQ(columnSetSignature(flowThread), "cs"); 135 ASSERT_EQ(columnSetSignature(flowThread), "cs");
142 LayoutBox* columnBox = flowThread->firstMultiColumnBox(); 136 LayoutBox* columnBox = flowThread->firstMultiColumnBox();
143 EXPECT_EQ(flowThread->mapDescendantToColumnSet(document().getElementById("co lumnContent")->layoutObject()), columnBox); 137 EXPECT_EQ(flowThread->mapDescendantToColumnSet(getLayoutObjectByElementId("c olumnContent")), columnBox);
144 columnBox = columnBox->nextSiblingMultiColumnBox(); 138 columnBox = columnBox->nextSiblingMultiColumnBox();
145 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("spanner")->layoutObject()), columnBox); 139 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("spanner")), columnBox);
146 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("columnContent")->layoutObject()), nullptr); 140 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("columnContent")), nullptr);
147 } 141 }
148 142
149 TEST_F(MultiColumnRenderingTest, SpannerThenContent) 143 TEST_F(MultiColumnRenderingTest, SpannerThenContent)
150 { 144 {
151 // With a spanner followed by some column content, we need a spanner set fol lowed by a column set. 145 // With a spanner followed by some column content, we need a spanner set fol lowed by a column set.
152 setMulticolHTML("<div id='mc'><div id='spanner'></div><div id='columnContent '></div></div>"); 146 setMulticolHTML("<div id='mc'><div id='spanner'></div><div id='columnContent '></div></div>");
153 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 147 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
154 ASSERT_EQ(columnSetSignature(flowThread), "sc"); 148 ASSERT_EQ(columnSetSignature(flowThread), "sc");
155 LayoutBox* columnBox = flowThread->firstMultiColumnBox(); 149 LayoutBox* columnBox = flowThread->firstMultiColumnBox();
156 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("spanner")->layoutObject()), columnBox); 150 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("spanner")), columnBox);
157 columnBox = columnBox->nextSiblingMultiColumnBox(); 151 columnBox = columnBox->nextSiblingMultiColumnBox();
158 EXPECT_EQ(flowThread->mapDescendantToColumnSet(document().getElementById("co lumnContent")->layoutObject()), columnBox); 152 EXPECT_EQ(flowThread->mapDescendantToColumnSet(getLayoutObjectByElementId("c olumnContent")), columnBox);
159 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("columnContent")->layoutObject()), nullptr); 153 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("columnContent")), nullptr);
160 } 154 }
161 155
162 TEST_F(MultiColumnRenderingTest, ContentThenSpannerThenContent) 156 TEST_F(MultiColumnRenderingTest, ContentThenSpannerThenContent)
163 { 157 {
164 // With column content followed by a spanner followed by some column content , we need a column 158 // With column content followed by a spanner followed by some column content , we need a column
165 // set followed by a spanner set followed by a column set. 159 // set followed by a spanner set followed by a column set.
166 setMulticolHTML("<div id='mc'><div id='columnContentBefore'></div><div id='s panner'></div><div id='columnContentAfter'></div></div>"); 160 setMulticolHTML("<div id='mc'><div id='columnContentBefore'></div><div id='s panner'></div><div id='columnContentAfter'></div></div>");
167 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 161 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
168 ASSERT_EQ(columnSetSignature(flowThread), "csc"); 162 ASSERT_EQ(columnSetSignature(flowThread), "csc");
169 LayoutBox* columnBox = flowThread->firstMultiColumnSet(); 163 LayoutBox* columnBox = flowThread->firstMultiColumnSet();
170 EXPECT_EQ(flowThread->mapDescendantToColumnSet(document().getElementById("co lumnContentBefore")->layoutObject()), columnBox); 164 EXPECT_EQ(flowThread->mapDescendantToColumnSet(getLayoutObjectByElementId("c olumnContentBefore")), columnBox);
171 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("columnContentBefore")->layoutObject()), nullptr); 165 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("columnContentBefore")), nullptr);
172 columnBox = columnBox->nextSiblingMultiColumnBox(); 166 columnBox = columnBox->nextSiblingMultiColumnBox();
173 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("spanner")->layoutObject()), columnBox); 167 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("spanner")), columnBox);
174 columnBox = columnBox->nextSiblingMultiColumnBox(); 168 columnBox = columnBox->nextSiblingMultiColumnBox();
175 EXPECT_EQ(flowThread->mapDescendantToColumnSet(document().getElementById("co lumnContentAfter")->layoutObject()), columnBox); 169 EXPECT_EQ(flowThread->mapDescendantToColumnSet(getLayoutObjectByElementId("c olumnContentAfter")), columnBox);
176 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("columnContentAfter")->layoutObject()), nullptr); 170 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("columnContentAfter")), nullptr);
177 } 171 }
178 172
179 TEST_F(MultiColumnRenderingTest, TwoSpanners) 173 TEST_F(MultiColumnRenderingTest, TwoSpanners)
180 { 174 {
181 // With two spanners and no column content, we need two spanner sets. 175 // With two spanners and no column content, we need two spanner sets.
182 setMulticolHTML("<div id='mc'><div id='spanner1'></div><div id='spanner2'></ div></div>"); 176 setMulticolHTML("<div id='mc'><div id='spanner1'></div><div id='spanner2'></ div></div>");
183 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 177 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
184 ASSERT_EQ(columnSetSignature(flowThread), "ss"); 178 ASSERT_EQ(columnSetSignature(flowThread), "ss");
185 LayoutBox* columnBox = flowThread->firstMultiColumnBox(); 179 LayoutBox* columnBox = flowThread->firstMultiColumnBox();
186 EXPECT_EQ(flowThread->firstMultiColumnSet(), nullptr); 180 EXPECT_EQ(flowThread->firstMultiColumnSet(), nullptr);
187 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("spanner1")->layoutObject()), columnBox); 181 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("spanner1")), columnBox);
188 EXPECT_EQ(document().getElementById("spanner1")->layoutObject()->spannerPlac eholder(), columnBox); 182 EXPECT_EQ(getLayoutObjectByElementId("spanner1")->spannerPlaceholder(), colu mnBox);
189 columnBox = columnBox->nextSiblingMultiColumnBox(); 183 columnBox = columnBox->nextSiblingMultiColumnBox();
190 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("spanner2")->layoutObject()), columnBox); 184 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("spanner2")), columnBox);
191 EXPECT_EQ(document().getElementById("spanner2")->layoutObject()->spannerPlac eholder(), columnBox); 185 EXPECT_EQ(getLayoutObjectByElementId("spanner2")->spannerPlaceholder(), colu mnBox);
192 } 186 }
193 187
194 TEST_F(MultiColumnRenderingTest, SpannerThenContentThenSpanner) 188 TEST_F(MultiColumnRenderingTest, SpannerThenContentThenSpanner)
195 { 189 {
196 // With two spanners and some column content in-between, we need a spanner s et, a column set and another spanner set. 190 // With two spanners and some column content in-between, we need a spanner s et, a column set and another spanner set.
197 setMulticolHTML("<div id='mc'><div id='spanner1'></div><div id='columnConten t'></div><div id='spanner2'></div></div>"); 191 setMulticolHTML("<div id='mc'><div id='spanner1'></div><div id='columnConten t'></div><div id='spanner2'></div></div>");
198 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 192 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
199 ASSERT_EQ(columnSetSignature(flowThread), "scs"); 193 ASSERT_EQ(columnSetSignature(flowThread), "scs");
200 LayoutMultiColumnSet* columnSet = flowThread->firstMultiColumnSet(); 194 LayoutMultiColumnSet* columnSet = flowThread->firstMultiColumnSet();
201 EXPECT_EQ(columnSet->nextSiblingMultiColumnSet(), nullptr); 195 EXPECT_EQ(columnSet->nextSiblingMultiColumnSet(), nullptr);
202 LayoutBox* columnBox = flowThread->firstMultiColumnBox(); 196 LayoutBox* columnBox = flowThread->firstMultiColumnBox();
203 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("spanner1")->layoutObject()), columnBox); 197 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("spanner1")), columnBox);
204 columnBox = columnBox->nextSiblingMultiColumnBox(); 198 columnBox = columnBox->nextSiblingMultiColumnBox();
205 EXPECT_EQ(columnBox, columnSet); 199 EXPECT_EQ(columnBox, columnSet);
206 EXPECT_EQ(flowThread->mapDescendantToColumnSet(document().getElementById("co lumnContent")->layoutObject()), columnSet); 200 EXPECT_EQ(flowThread->mapDescendantToColumnSet(getLayoutObjectByElementId("c olumnContent")), columnSet);
207 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("columnContent")->layoutObject()), nullptr); 201 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("columnContent")), nullptr);
208 columnBox = columnBox->nextSiblingMultiColumnBox(); 202 columnBox = columnBox->nextSiblingMultiColumnBox();
209 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("spanner2")->layoutObject()), columnBox); 203 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("spanner2")), columnBox);
210 } 204 }
211 205
212 TEST_F(MultiColumnRenderingTest, SpannerWithSpanner) 206 TEST_F(MultiColumnRenderingTest, SpannerWithSpanner)
213 { 207 {
214 // column-span:all on something inside column-span:all has no effect. 208 // column-span:all on something inside column-span:all has no effect.
215 setMulticolHTML("<div id='mc'><div id='spanner'><div id='invalidSpanner' cla ss='s'></div></div></div>"); 209 setMulticolHTML("<div id='mc'><div id='spanner'><div id='invalidSpanner' cla ss='s'></div></div></div>");
216 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 210 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
217 ASSERT_EQ(columnSetSignature(flowThread), "s"); 211 ASSERT_EQ(columnSetSignature(flowThread), "s");
218 LayoutBox* columnBox = flowThread->firstMultiColumnBox(); 212 LayoutBox* columnBox = flowThread->firstMultiColumnBox();
219 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("spanner")->layoutObject()), columnBox); 213 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("spanner")), columnBox);
220 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("invalidSpanner")->layoutObject()), columnBox); 214 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("invalidSpanner")), columnBox);
221 EXPECT_EQ(toLayoutMultiColumnSpannerPlaceholder(columnBox)->layoutObjectInFl owThread(), document().getElementById("spanner")->layoutObject()); 215 EXPECT_EQ(toLayoutMultiColumnSpannerPlaceholder(columnBox)->layoutObjectInFl owThread(), getLayoutObjectByElementId("spanner"));
222 EXPECT_EQ(document().getElementById("spanner")->layoutObject()->spannerPlace holder(), columnBox); 216 EXPECT_EQ(getLayoutObjectByElementId("spanner")->spannerPlaceholder(), colum nBox);
223 EXPECT_EQ(document().getElementById("invalidSpanner")->layoutObject()->spann erPlaceholder(), nullptr); 217 EXPECT_EQ(getLayoutObjectByElementId("invalidSpanner")->spannerPlaceholder() , nullptr);
224 } 218 }
225 219
226 TEST_F(MultiColumnRenderingTest, SubtreeWithSpanner) 220 TEST_F(MultiColumnRenderingTest, SubtreeWithSpanner)
227 { 221 {
228 setMulticolHTML("<div id='mc'><div id='outer'><div id='block1'></div><div id ='spanner'></div><div id='block2'></div></div></div>"); 222 setMulticolHTML("<div id='mc'><div id='outer'><div id='block1'></div><div id ='spanner'></div><div id='block2'></div></div></div>");
229 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 223 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
230 EXPECT_EQ(columnSetSignature(flowThread), "csc"); 224 EXPECT_EQ(columnSetSignature(flowThread), "csc");
231 LayoutBox* columnBox = flowThread->firstMultiColumnBox(); 225 LayoutBox* columnBox = flowThread->firstMultiColumnBox();
232 EXPECT_EQ(flowThread->mapDescendantToColumnSet(document().getElementById("ou ter")->layoutObject()), columnBox); 226 EXPECT_EQ(flowThread->mapDescendantToColumnSet(getLayoutObjectByElementId("o uter")), columnBox);
233 EXPECT_EQ(flowThread->mapDescendantToColumnSet(document().getElementById("bl ock1")->layoutObject()), columnBox); 227 EXPECT_EQ(flowThread->mapDescendantToColumnSet(getLayoutObjectByElementId("b lock1")), columnBox);
234 columnBox = columnBox->nextSiblingMultiColumnBox(); 228 columnBox = columnBox->nextSiblingMultiColumnBox();
235 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("spanner")->layoutObject()), columnBox); 229 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("spanner")), columnBox);
236 EXPECT_EQ(document().getElementById("spanner")->layoutObject()->spannerPlace holder(), columnBox); 230 EXPECT_EQ(getLayoutObjectByElementId("spanner")->spannerPlaceholder(), colum nBox);
237 EXPECT_EQ(toLayoutMultiColumnSpannerPlaceholder(columnBox)->layoutObjectInFl owThread(), document().getElementById("spanner")->layoutObject()); 231 EXPECT_EQ(toLayoutMultiColumnSpannerPlaceholder(columnBox)->layoutObjectInFl owThread(), getLayoutObjectByElementId("spanner"));
238 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("outer")->layoutObject()), nullptr); 232 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("outer")), nullptr);
239 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("block1")->layoutObject()), nullptr); 233 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("block1")), nullptr);
240 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("block2")->layoutObject()), nullptr); 234 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("block2")), nullptr);
241 columnBox = columnBox->nextSiblingMultiColumnBox(); 235 columnBox = columnBox->nextSiblingMultiColumnBox();
242 EXPECT_EQ(flowThread->mapDescendantToColumnSet(document().getElementById("bl ock2")->layoutObject()), columnBox); 236 EXPECT_EQ(flowThread->mapDescendantToColumnSet(getLayoutObjectByElementId("b lock2")), columnBox);
243 } 237 }
244 238
245 TEST_F(MultiColumnRenderingTest, SubtreeWithSpannerAfterSpanner) 239 TEST_F(MultiColumnRenderingTest, SubtreeWithSpannerAfterSpanner)
246 { 240 {
247 setMulticolHTML("<div id='mc'><div id='spanner1'></div><div id='outer'>text< div id='spanner2'></div><div id='after'></div></div></div>"); 241 setMulticolHTML("<div id='mc'><div id='spanner1'></div><div id='outer'>text< div id='spanner2'></div><div id='after'></div></div></div>");
248 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 242 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
249 EXPECT_EQ(columnSetSignature(flowThread), "scsc"); 243 EXPECT_EQ(columnSetSignature(flowThread), "scsc");
250 LayoutBox* columnBox = flowThread->firstMultiColumnBox(); 244 LayoutBox* columnBox = flowThread->firstMultiColumnBox();
251 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("spanner1")->layoutObject()), columnBox); 245 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("spanner1")), columnBox);
252 EXPECT_EQ(toLayoutMultiColumnSpannerPlaceholder(columnBox)->layoutObjectInFl owThread(), document().getElementById("spanner1")->layoutObject()); 246 EXPECT_EQ(toLayoutMultiColumnSpannerPlaceholder(columnBox)->layoutObjectInFl owThread(), getLayoutObjectByElementId("spanner1"));
253 EXPECT_EQ(document().getElementById("spanner1")->layoutObject()->spannerPlac eholder(), columnBox); 247 EXPECT_EQ(getLayoutObjectByElementId("spanner1")->spannerPlaceholder(), colu mnBox);
254 columnBox = columnBox->nextSiblingMultiColumnBox(); 248 columnBox = columnBox->nextSiblingMultiColumnBox();
255 EXPECT_EQ(flowThread->mapDescendantToColumnSet(document().getElementById("ou ter")->layoutObject()), columnBox); 249 EXPECT_EQ(flowThread->mapDescendantToColumnSet(getLayoutObjectByElementId("o uter")), columnBox);
256 columnBox = columnBox->nextSiblingMultiColumnBox(); 250 columnBox = columnBox->nextSiblingMultiColumnBox();
257 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("spanner2")->layoutObject()), columnBox); 251 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("spanner2")), columnBox);
258 EXPECT_EQ(toLayoutMultiColumnSpannerPlaceholder(columnBox)->layoutObjectInFl owThread(), document().getElementById("spanner2")->layoutObject()); 252 EXPECT_EQ(toLayoutMultiColumnSpannerPlaceholder(columnBox)->layoutObjectInFl owThread(), getLayoutObjectByElementId("spanner2"));
259 EXPECT_EQ(document().getElementById("spanner2")->layoutObject()->spannerPlac eholder(), columnBox); 253 EXPECT_EQ(getLayoutObjectByElementId("spanner2")->spannerPlaceholder(), colu mnBox);
260 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("outer")->layoutObject()), nullptr); 254 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("outer")), nullptr);
261 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("after")->layoutObject()), nullptr); 255 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("after")), nullptr);
262 columnBox = columnBox->nextSiblingMultiColumnBox(); 256 columnBox = columnBox->nextSiblingMultiColumnBox();
263 EXPECT_EQ(flowThread->mapDescendantToColumnSet(document().getElementById("af ter")->layoutObject()), columnBox); 257 EXPECT_EQ(flowThread->mapDescendantToColumnSet(getLayoutObjectByElementId("a fter")), columnBox);
264 } 258 }
265 259
266 TEST_F(MultiColumnRenderingTest, SubtreeWithSpannerBeforeSpanner) 260 TEST_F(MultiColumnRenderingTest, SubtreeWithSpannerBeforeSpanner)
267 { 261 {
268 setMulticolHTML("<div id='mc'><div id='outer'>text<div id='spanner1'></div>t ext</div><div id='spanner2'></div></div>"); 262 setMulticolHTML("<div id='mc'><div id='outer'>text<div id='spanner1'></div>t ext</div><div id='spanner2'></div></div>");
269 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 263 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
270 EXPECT_EQ(columnSetSignature(flowThread), "cscs"); 264 EXPECT_EQ(columnSetSignature(flowThread), "cscs");
271 LayoutBox* columnBox = flowThread->firstMultiColumnSet(); 265 LayoutBox* columnBox = flowThread->firstMultiColumnSet();
272 EXPECT_EQ(flowThread->mapDescendantToColumnSet(document().getElementById("ou ter")->layoutObject()), columnBox); 266 EXPECT_EQ(flowThread->mapDescendantToColumnSet(getLayoutObjectByElementId("o uter")), columnBox);
273 columnBox = columnBox->nextSiblingMultiColumnBox(); 267 columnBox = columnBox->nextSiblingMultiColumnBox();
274 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("spanner1")->layoutObject()), columnBox); 268 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("spanner1")), columnBox);
275 EXPECT_EQ(document().getElementById("spanner1")->layoutObject()->spannerPlac eholder(), columnBox); 269 EXPECT_EQ(getLayoutObjectByElementId("spanner1")->spannerPlaceholder(), colu mnBox);
276 EXPECT_EQ(toLayoutMultiColumnSpannerPlaceholder(columnBox)->layoutObjectInFl owThread(), document().getElementById("spanner1")->layoutObject()); 270 EXPECT_EQ(toLayoutMultiColumnSpannerPlaceholder(columnBox)->layoutObjectInFl owThread(), getLayoutObjectByElementId("spanner1"));
277 columnBox = columnBox->nextSiblingMultiColumnBox()->nextSiblingMultiColumnBo x(); 271 columnBox = columnBox->nextSiblingMultiColumnBox()->nextSiblingMultiColumnBo x();
278 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("spanner2")->layoutObject()), columnBox); 272 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("spanner2")), columnBox);
279 EXPECT_EQ(document().getElementById("spanner2")->layoutObject()->spannerPlac eholder(), columnBox); 273 EXPECT_EQ(getLayoutObjectByElementId("spanner2")->spannerPlaceholder(), colu mnBox);
280 EXPECT_EQ(toLayoutMultiColumnSpannerPlaceholder(columnBox)->layoutObjectInFl owThread(), document().getElementById("spanner2")->layoutObject()); 274 EXPECT_EQ(toLayoutMultiColumnSpannerPlaceholder(columnBox)->layoutObjectInFl owThread(), getLayoutObjectByElementId("spanner2"));
281 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(document().getEleme ntById("outer")->layoutObject()), nullptr); 275 EXPECT_EQ(flowThread->containingColumnSpannerPlaceholder(getLayoutObjectByEl ementId("outer")), nullptr);
282 } 276 }
283 277
284 TEST_F(MultiColumnRenderingTest, columnSetAtBlockOffset) 278 TEST_F(MultiColumnRenderingTest, columnSetAtBlockOffset)
285 { 279 {
286 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>");
287 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 281 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
288 EXPECT_EQ(columnSetSignature(flowThread), "cscsc"); 282 EXPECT_EQ(columnSetSignature(flowThread), "cscsc");
289 LayoutMultiColumnSet* firstRow = flowThread->firstMultiColumnSet(); 283 LayoutMultiColumnSet* firstRow = flowThread->firstMultiColumnSet();
290 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(-10000)), firstRow); // negative overflow 284 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit(-10000)), firstRow); // negative overflow
291 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit()), firstRow); 285 EXPECT_EQ(flowThread->columnSetAtBlockOffset(LayoutUnit()), firstRow);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 339
346 void MultiColumnTreeModifyingTest::setMulticolHTML(const char* html) 340 void MultiColumnTreeModifyingTest::setMulticolHTML(const char* html)
347 { 341 {
348 MultiColumnRenderingTest::setMulticolHTML(html); 342 MultiColumnRenderingTest::setMulticolHTML(html);
349 // Allow modifications to the layout tree structure, because that's what we want to test. 343 // Allow modifications to the layout tree structure, because that's what we want to test.
350 document().lifecycle().advanceTo(DocumentLifecycle::InStyleRecalc); 344 document().lifecycle().advanceTo(DocumentLifecycle::InStyleRecalc);
351 } 345 }
352 346
353 void MultiColumnTreeModifyingTest::reparentLayoutObject(const char* newParentId, const char* childId, const char* insertBeforeId) 347 void MultiColumnTreeModifyingTest::reparentLayoutObject(const char* newParentId, const char* childId, const char* insertBeforeId)
354 { 348 {
355 LayoutObject* newParent = document().getElementById(newParentId)->layoutObje ct(); 349 LayoutObject* newParent = getLayoutObjectByElementId(newParentId);
356 LayoutObject* child = document().getElementById(childId)->layoutObject(); 350 LayoutObject* child = getLayoutObjectByElementId(childId);
357 LayoutObject* insertBefore = insertBeforeId ? document().getElementById(inse rtBeforeId)->layoutObject() : nullptr; 351 LayoutObject* insertBefore = insertBeforeId ? getLayoutObjectByElementId(ins ertBeforeId) : nullptr;
358 child->remove(); 352 child->remove();
359 newParent->addChild(child, insertBefore); 353 newParent->addChild(child, insertBefore);
360 } 354 }
361 355
362 void MultiColumnTreeModifyingTest::destroyLayoutObject(LayoutObject* child) 356 void MultiColumnTreeModifyingTest::destroyLayoutObject(LayoutObject* child)
363 { 357 {
364 // Remove and destroy in separate steps, so that we get to test removal of s ubtrees. 358 // Remove and destroy in separate steps, so that we get to test removal of s ubtrees.
365 child->remove(); 359 child->remove();
366 child->node()->detach(); 360 child->node()->detach();
367 } 361 }
368 362
369 void MultiColumnTreeModifyingTest::destroyLayoutObject(const char* childId) 363 void MultiColumnTreeModifyingTest::destroyLayoutObject(const char* childId)
370 { 364 {
371 destroyLayoutObject(document().getElementById(childId)->layoutObject()); 365 destroyLayoutObject(getLayoutObjectByElementId(childId));
372 } 366 }
373 367
374 TEST_F(MultiColumnTreeModifyingTest, InsertFirstContentAndRemove) 368 TEST_F(MultiColumnTreeModifyingTest, InsertFirstContentAndRemove)
375 { 369 {
376 setMulticolHTML("<div id='block'></div><div id='mc'></div>"); 370 setMulticolHTML("<div id='block'></div><div id='mc'></div>");
377 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 371 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
378 LayoutBlockFlow* block = toLayoutBlockFlow(document().getElementById("block" )->layoutObject()); 372 LayoutBlockFlow* block = toLayoutBlockFlow(getLayoutObjectByElementId("block "));
379 LayoutBlockFlow* multicolContainer = toLayoutBlockFlow(document().getElement ById("mc")->layoutObject()); 373 LayoutBlockFlow* multicolContainer = toLayoutBlockFlow(getLayoutObjectByElem entId("mc"));
380 block->remove(); 374 block->remove();
381 multicolContainer->addChild(block); 375 multicolContainer->addChild(block);
382 EXPECT_EQ(block->parent(), flowThread); 376 EXPECT_EQ(block->parent(), flowThread);
383 // A set should have appeared, now that the multicol container has content. 377 // A set should have appeared, now that the multicol container has content.
384 EXPECT_EQ(columnSetSignature(flowThread), "c"); 378 EXPECT_EQ(columnSetSignature(flowThread), "c");
385 379
386 destroyLayoutObject(block); 380 destroyLayoutObject(block);
387 // The set should be gone again now, since there's nothing inside the multic ol container anymore. 381 // The set should be gone again now, since there's nothing inside the multic ol container anymore.
388 EXPECT_EQ(columnSetSignature("mc"), ""); 382 EXPECT_EQ(columnSetSignature("mc"), "");
389 } 383 }
(...skipping 19 matching lines...) Expand all
409 EXPECT_EQ(columnSetSignature("mc"), "c"); 403 EXPECT_EQ(columnSetSignature("mc"), "c");
410 destroyLayoutObject("block"); 404 destroyLayoutObject("block");
411 // There's still some content after the removal, so the set should remain. 405 // There's still some content after the removal, so the set should remain.
412 EXPECT_EQ(columnSetSignature("mc"), "c"); 406 EXPECT_EQ(columnSetSignature("mc"), "c");
413 } 407 }
414 408
415 TEST_F(MultiColumnTreeModifyingTest, InsertSpannerAndRemove) 409 TEST_F(MultiColumnTreeModifyingTest, InsertSpannerAndRemove)
416 { 410 {
417 setMulticolHTML("<div id='spanner'></div><div id='mc'></div>"); 411 setMulticolHTML("<div id='spanner'></div><div id='mc'></div>");
418 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc"); 412 LayoutMultiColumnFlowThread* flowThread = findFlowThread("mc");
419 LayoutBlockFlow* spanner = toLayoutBlockFlow(document().getElementById("span ner")->layoutObject()); 413 LayoutBlockFlow* spanner = toLayoutBlockFlow(getLayoutObjectByElementId("spa nner"));
420 LayoutBlockFlow* multicolContainer = toLayoutBlockFlow(document().getElement ById("mc")->layoutObject()); 414 LayoutBlockFlow* multicolContainer = toLayoutBlockFlow(getLayoutObjectByElem entId("mc"));
421 spanner->remove(); 415 spanner->remove();
422 multicolContainer->addChild(spanner); 416 multicolContainer->addChild(spanner);
423 EXPECT_EQ(spanner->parent(), flowThread); 417 EXPECT_EQ(spanner->parent(), flowThread);
424 // We should now have a spanner placeholder, since we just moved a spanner i nto the multicol container. 418 // We should now have a spanner placeholder, since we just moved a spanner i nto the multicol container.
425 EXPECT_EQ(columnSetSignature(flowThread), "s"); 419 EXPECT_EQ(columnSetSignature(flowThread), "s");
426 destroyLayoutObject(spanner); 420 destroyLayoutObject(spanner);
427 EXPECT_EQ(columnSetSignature(flowThread), ""); 421 EXPECT_EQ(columnSetSignature(flowThread), "");
428 } 422 }
429 423
430 TEST_F(MultiColumnTreeModifyingTest, InsertTwoSpannersAndRemove) 424 TEST_F(MultiColumnTreeModifyingTest, InsertTwoSpannersAndRemove)
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
791 { 785 {
792 setMulticolHTML("<div id='mc'>text<div id='spanner'><div class='s'></div></d iv>text</div>"); 786 setMulticolHTML("<div id='mc'>text<div id='spanner'><div class='s'></div></d iv>text</div>");
793 EXPECT_EQ(columnSetSignature("mc"), "csc"); 787 EXPECT_EQ(columnSetSignature("mc"), "csc");
794 destroyLayoutObject("spanner"); 788 destroyLayoutObject("spanner");
795 EXPECT_EQ(columnSetSignature("mc"), "c"); 789 EXPECT_EQ(columnSetSignature("mc"), "c");
796 } 790 }
797 791
798 } // anonymous namespace 792 } // anonymous namespace
799 793
800 } // namespace blink 794 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutBoxTest.cpp ('k') | third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698