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

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

Issue 2884573002: Replace LayoutTableCell::AbsoluteColumnIndex() with EffectiveColumnIndex()
Patch Set: - Created 3 years, 7 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
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "core/layout/LayoutTable.h"
6
7 #include "core/layout/LayoutTableCol.h"
8 #include "core/layout/LayoutTestHelper.h"
9
10 namespace blink {
11
12 namespace {
13
14 class LayoutTableTest : public RenderingTest {
15 protected:
16 LayoutTable* GetTableByElementId(const char* id) {
17 return ToLayoutTable(GetLayoutObjectByElementId(id));
18 }
19 };
20
21 TEST_F(LayoutTableTest, EffectiveColumnAndAbsoluteColumn) {
22 SetBodyInnerHTML(
23 "<table id ='table'>"
24 " <tr><td colspan='5'></td></tr>"
25 " <tr><td colspan='3'></td><td colspan=5'></td></tr>"
26 " <tr><td></td></tr>"
27 "</table>");
28
29 auto* table = GetTableByElementId("table");
30 EXPECT_EQ(4u, table->NumEffectiveColumns());
31
32 EXPECT_EQ(0u, table->EffectiveColumnToAbsoluteColumn(0));
33 EXPECT_EQ(1u, table->EffectiveColumnToAbsoluteColumn(1));
34 EXPECT_EQ(3u, table->EffectiveColumnToAbsoluteColumn(2));
35 EXPECT_EQ(5u, table->EffectiveColumnToAbsoluteColumn(3));
36 EXPECT_EQ(8u, table->EffectiveColumnToAbsoluteColumn(4));
37
38 EXPECT_EQ(0u, table->AbsoluteColumnToEffectiveColumn(0));
39 EXPECT_EQ(1u, table->AbsoluteColumnToEffectiveColumn(1));
40 EXPECT_EQ(1u, table->AbsoluteColumnToEffectiveColumn(2));
41 EXPECT_EQ(2u, table->AbsoluteColumnToEffectiveColumn(3));
42 EXPECT_EQ(2u, table->AbsoluteColumnToEffectiveColumn(4));
43 EXPECT_EQ(3u, table->AbsoluteColumnToEffectiveColumn(5));
44 EXPECT_EQ(3u, table->AbsoluteColumnToEffectiveColumn(6));
45 EXPECT_EQ(3u, table->AbsoluteColumnToEffectiveColumn(7));
46 EXPECT_EQ(4u, table->AbsoluteColumnToEffectiveColumn(8));
47 }
48
49 TEST_F(LayoutTableTest, EffectiveColumnAndAbsoluteColumnWithCols) {
50 SetBodyInnerHTML(
51 "<table id ='table'>"
52 " <colgroup>"
53 " <col>"
54 " <col span='3'>"
55 " <col span='2'>"
56 " </colgroup>"
57 " <tr>"
58 " <td></td>"
59 " <td colspan='2'></td>"
60 " <td></td>"
61 " <td colspan='2'></td>"
62 " </tr>"
63 "</table>");
64
65 auto* table = GetTableByElementId("table");
66 EXPECT_EQ(4u, table->NumEffectiveColumns());
67
68 EXPECT_EQ(0u, table->EffectiveColumnToAbsoluteColumn(0));
69 EXPECT_EQ(1u, table->EffectiveColumnToAbsoluteColumn(1));
70 EXPECT_EQ(3u, table->EffectiveColumnToAbsoluteColumn(2));
71 EXPECT_EQ(4u, table->EffectiveColumnToAbsoluteColumn(3));
72 EXPECT_EQ(6u, table->EffectiveColumnToAbsoluteColumn(4));
73
74 EXPECT_EQ(0u, table->AbsoluteColumnToEffectiveColumn(0));
75 EXPECT_EQ(1u, table->AbsoluteColumnToEffectiveColumn(1));
76 EXPECT_EQ(1u, table->AbsoluteColumnToEffectiveColumn(2));
77 EXPECT_EQ(2u, table->AbsoluteColumnToEffectiveColumn(3));
78 EXPECT_EQ(3u, table->AbsoluteColumnToEffectiveColumn(4));
79 EXPECT_EQ(3u, table->AbsoluteColumnToEffectiveColumn(5));
80 EXPECT_EQ(4u, table->AbsoluteColumnToEffectiveColumn(6));
81 }
82
83 TEST_F(LayoutTableTest, ColAndColGroupAtEffectiveColumn) {
84 SetBodyInnerHTML(
85 "<table id ='table'>"
86 " <colgroup id='colgroup1'>"
87 " <col id='col1a'>"
88 " <col id='col1b'>"
89 " </colgroup>"
90 " <colgroup id='colgroup2'>"
91 " <col id='col2' span='2'>"
92 " </colgroup>"
93 " <colgroup id='colgroup3' span='2'></colgroup>"
94 " <colgroup id='colgroup4' span='2'></colgroup>"
95 " <col id='col5' span='2'>"
96 " <tr>"
97 " <td colspan='2'></td>" // spans col1a and col1b
98 " <td></td><td></td>" // split col2 into two effective columns
99 " <td colspan=2'></td>" // matches col3
100 " <td colspan=3'></td>" // matches start but not end of col4
101 " <td></td>" // matches end but not start of col5
102 " </tr>"
103 "</table>");
104 // absolute | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
105 // effective | 0 | 1 | 2 | 3 | 4 | 5 |
106 // colgroup | 1 | 2 | 3 | 4 | |
107 // col | a | b | 2 | | | 5 |
108 // td | | | | | | |
109
110 auto* table = GetTableByElementId("table");
111 EXPECT_EQ(6u, table->NumEffectiveColumns());
112
113 auto c0 = table->ColAndColGroupAtEffectiveColumn(0);
114 EXPECT_EQ(GetLayoutObjectByElementId("colgroup1"), c0.colgroup);
115 EXPECT_EQ(GetLayoutObjectByElementId("col1a"), c0.col);
116 EXPECT_EQ(c0.col, c0.InnermostColOrColGroup());
117 EXPECT_TRUE(c0.adjoins_start_border_of_col_group);
118 EXPECT_TRUE(c0.adjoins_end_border_of_col_group);
119
120 auto c1 = table->ColAndColGroupAtEffectiveColumn(1);
121 EXPECT_EQ(GetLayoutObjectByElementId("colgroup2"), c1.colgroup);
122 EXPECT_EQ(GetLayoutObjectByElementId("col2"), c1.col);
123 EXPECT_EQ(c1.col, c1.InnermostColOrColGroup());
124 EXPECT_TRUE(c1.adjoins_start_border_of_col_group);
125 EXPECT_FALSE(c1.adjoins_end_border_of_col_group);
126
127 auto c2 = table->ColAndColGroupAtEffectiveColumn(2);
128 EXPECT_EQ(GetLayoutObjectByElementId("colgroup2"), c2.colgroup);
129 EXPECT_EQ(GetLayoutObjectByElementId("col2"), c2.col);
130 EXPECT_EQ(c2.col, c2.InnermostColOrColGroup());
131 EXPECT_FALSE(c2.adjoins_start_border_of_col_group);
132 EXPECT_TRUE(c2.adjoins_end_border_of_col_group);
133
134 auto c3 = table->ColAndColGroupAtEffectiveColumn(3);
135 EXPECT_EQ(GetLayoutObjectByElementId("colgroup3"), c3.colgroup);
136 EXPECT_EQ(nullptr, c3.col);
137 EXPECT_EQ(c3.colgroup, c3.InnermostColOrColGroup());
138 EXPECT_TRUE(c3.adjoins_start_border_of_col_group);
139 EXPECT_TRUE(c3.adjoins_end_border_of_col_group);
140
141 auto c4 = table->ColAndColGroupAtEffectiveColumn(4);
142 EXPECT_EQ(GetLayoutObjectByElementId("colgroup4"), c4.colgroup);
143 EXPECT_EQ(nullptr, c4.col);
144 EXPECT_EQ(c4.colgroup, c4.InnermostColOrColGroup());
145 EXPECT_TRUE(c4.adjoins_start_border_of_col_group);
146 EXPECT_FALSE(c4.adjoins_end_border_of_col_group);
147
148 auto c5 = table->ColAndColGroupAtEffectiveColumn(5);
149 EXPECT_EQ(GetLayoutObjectByElementId("col5")->Parent(), c5.colgroup);
150 EXPECT_EQ(GetLayoutObjectByElementId("col5"), c5.col);
151 EXPECT_EQ(c5.col, c5.InnermostColOrColGroup());
152 EXPECT_FALSE(c5.adjoins_start_border_of_col_group);
153 EXPECT_TRUE(c5.adjoins_end_border_of_col_group);
154
155 // Beyond the end of columns.
156 auto c6 = table->ColAndColGroupAtEffectiveColumn(6);
157 EXPECT_EQ(nullptr, c6.colgroup);
158 EXPECT_EQ(nullptr, c6.col);
159 EXPECT_EQ(nullptr, c6.InnermostColOrColGroup());
160 EXPECT_FALSE(c6.adjoins_start_border_of_col_group);
161 EXPECT_FALSE(c6.adjoins_end_border_of_col_group);
162 }
163
164 TEST_F(LayoutTableTest, ColAndColGroupAtEffectiveColumnSingleEffectiveColumn) {
165 SetBodyInnerHTML(
166 "<table id ='table'>"
167 " <colgroup id='colgroup'>"
168 " <col id='col'>"
169 " <col span='2'>"
170 " <col span='3'>"
171 " </colgroup>"
172 " <tr>"
173 " <td colspan='6'></td>"
174 " </tr>"
175 "</table>");
176 // absolute | 0 | 1 | 2 | 3 | 4 | 5 |
177 // effective | 0 |
178 // colgroup | |
179 // col | | | |
180 // td | |
181
182 auto* table = GetTableByElementId("table");
183 EXPECT_EQ(1u, table->NumEffectiveColumns());
184
185 auto c0 = table->ColAndColGroupAtEffectiveColumn(0);
186 EXPECT_EQ(GetLayoutObjectByElementId("colgroup"), c0.colgroup);
187 EXPECT_EQ(GetLayoutObjectByElementId("col"), c0.col);
188 EXPECT_EQ(c0.col, c0.InnermostColOrColGroup());
189 EXPECT_TRUE(c0.adjoins_start_border_of_col_group);
190 EXPECT_TRUE(c0.adjoins_end_border_of_col_group);
191
192 auto c1 = table->ColAndColGroupAtEffectiveColumn(1);
193 EXPECT_EQ(nullptr, c1.colgroup);
194 EXPECT_EQ(nullptr, c1.col);
195 EXPECT_EQ(nullptr, c1.InnermostColOrColGroup());
196 EXPECT_FALSE(c1.adjoins_start_border_of_col_group);
197 EXPECT_FALSE(c1.adjoins_end_border_of_col_group);
198 }
199
200 TEST_F(LayoutTableTest,
201 ColAndColGroupAtEffectiveColumnSingleEffectiveColumnUnmatchedEnd) {
202 SetBodyInnerHTML(
203 "<table id ='table'>"
204 " <colgroup id='colgroup'>"
205 " <col id='col'>"
206 " <col span='2'>"
207 " <col span='3'>"
208 " </colgroup>"
209 " <tr>"
210 " <td colspan='5'></td>"
211 " </tr>"
212 "</table>");
213 // absolute | 0 | 1 | 2 | 3 | 4 |
214 // effective | 0 |
215 // colgroup | |
216 // col | | | |
217 // td | |
218
219 auto* table = GetTableByElementId("table");
220 EXPECT_EQ(1u, table->NumEffectiveColumns());
221
222 auto c0 = table->ColAndColGroupAtEffectiveColumn(0);
223 EXPECT_EQ(GetLayoutObjectByElementId("colgroup"), c0.colgroup);
224 EXPECT_EQ(GetLayoutObjectByElementId("col"), c0.col);
225 EXPECT_EQ(c0.col, c0.InnermostColOrColGroup());
226 EXPECT_TRUE(c0.adjoins_start_border_of_col_group);
227 EXPECT_FALSE(c0.adjoins_end_border_of_col_group);
228
229 auto c1 = table->ColAndColGroupAtEffectiveColumn(1);
230 EXPECT_EQ(nullptr, c1.colgroup);
231 EXPECT_EQ(nullptr, c1.col);
232 EXPECT_EQ(nullptr, c1.InnermostColOrColGroup());
233 EXPECT_FALSE(c1.adjoins_start_border_of_col_group);
234 EXPECT_FALSE(c1.adjoins_end_border_of_col_group);
235 }
236
237 } // anonymous namespace
238
239 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698