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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/layout/LayoutTableTest.cpp
diff --git a/third_party/WebKit/Source/core/layout/LayoutTableTest.cpp b/third_party/WebKit/Source/core/layout/LayoutTableTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f51be73df11df0a0c46af0553d8d4a6e5fc50e8c
--- /dev/null
+++ b/third_party/WebKit/Source/core/layout/LayoutTableTest.cpp
@@ -0,0 +1,239 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "core/layout/LayoutTable.h"
+
+#include "core/layout/LayoutTableCol.h"
+#include "core/layout/LayoutTestHelper.h"
+
+namespace blink {
+
+namespace {
+
+class LayoutTableTest : public RenderingTest {
+ protected:
+ LayoutTable* GetTableByElementId(const char* id) {
+ return ToLayoutTable(GetLayoutObjectByElementId(id));
+ }
+};
+
+TEST_F(LayoutTableTest, EffectiveColumnAndAbsoluteColumn) {
+ SetBodyInnerHTML(
+ "<table id ='table'>"
+ " <tr><td colspan='5'></td></tr>"
+ " <tr><td colspan='3'></td><td colspan=5'></td></tr>"
+ " <tr><td></td></tr>"
+ "</table>");
+
+ auto* table = GetTableByElementId("table");
+ EXPECT_EQ(4u, table->NumEffectiveColumns());
+
+ EXPECT_EQ(0u, table->EffectiveColumnToAbsoluteColumn(0));
+ EXPECT_EQ(1u, table->EffectiveColumnToAbsoluteColumn(1));
+ EXPECT_EQ(3u, table->EffectiveColumnToAbsoluteColumn(2));
+ EXPECT_EQ(5u, table->EffectiveColumnToAbsoluteColumn(3));
+ EXPECT_EQ(8u, table->EffectiveColumnToAbsoluteColumn(4));
+
+ EXPECT_EQ(0u, table->AbsoluteColumnToEffectiveColumn(0));
+ EXPECT_EQ(1u, table->AbsoluteColumnToEffectiveColumn(1));
+ EXPECT_EQ(1u, table->AbsoluteColumnToEffectiveColumn(2));
+ EXPECT_EQ(2u, table->AbsoluteColumnToEffectiveColumn(3));
+ EXPECT_EQ(2u, table->AbsoluteColumnToEffectiveColumn(4));
+ EXPECT_EQ(3u, table->AbsoluteColumnToEffectiveColumn(5));
+ EXPECT_EQ(3u, table->AbsoluteColumnToEffectiveColumn(6));
+ EXPECT_EQ(3u, table->AbsoluteColumnToEffectiveColumn(7));
+ EXPECT_EQ(4u, table->AbsoluteColumnToEffectiveColumn(8));
+}
+
+TEST_F(LayoutTableTest, EffectiveColumnAndAbsoluteColumnWithCols) {
+ SetBodyInnerHTML(
+ "<table id ='table'>"
+ " <colgroup>"
+ " <col>"
+ " <col span='3'>"
+ " <col span='2'>"
+ " </colgroup>"
+ " <tr>"
+ " <td></td>"
+ " <td colspan='2'></td>"
+ " <td></td>"
+ " <td colspan='2'></td>"
+ " </tr>"
+ "</table>");
+
+ auto* table = GetTableByElementId("table");
+ EXPECT_EQ(4u, table->NumEffectiveColumns());
+
+ EXPECT_EQ(0u, table->EffectiveColumnToAbsoluteColumn(0));
+ EXPECT_EQ(1u, table->EffectiveColumnToAbsoluteColumn(1));
+ EXPECT_EQ(3u, table->EffectiveColumnToAbsoluteColumn(2));
+ EXPECT_EQ(4u, table->EffectiveColumnToAbsoluteColumn(3));
+ EXPECT_EQ(6u, table->EffectiveColumnToAbsoluteColumn(4));
+
+ EXPECT_EQ(0u, table->AbsoluteColumnToEffectiveColumn(0));
+ EXPECT_EQ(1u, table->AbsoluteColumnToEffectiveColumn(1));
+ EXPECT_EQ(1u, table->AbsoluteColumnToEffectiveColumn(2));
+ EXPECT_EQ(2u, table->AbsoluteColumnToEffectiveColumn(3));
+ EXPECT_EQ(3u, table->AbsoluteColumnToEffectiveColumn(4));
+ EXPECT_EQ(3u, table->AbsoluteColumnToEffectiveColumn(5));
+ EXPECT_EQ(4u, table->AbsoluteColumnToEffectiveColumn(6));
+}
+
+TEST_F(LayoutTableTest, ColAndColGroupAtEffectiveColumn) {
+ SetBodyInnerHTML(
+ "<table id ='table'>"
+ " <colgroup id='colgroup1'>"
+ " <col id='col1a'>"
+ " <col id='col1b'>"
+ " </colgroup>"
+ " <colgroup id='colgroup2'>"
+ " <col id='col2' span='2'>"
+ " </colgroup>"
+ " <colgroup id='colgroup3' span='2'></colgroup>"
+ " <colgroup id='colgroup4' span='2'></colgroup>"
+ " <col id='col5' span='2'>"
+ " <tr>"
+ " <td colspan='2'></td>" // spans col1a and col1b
+ " <td></td><td></td>" // split col2 into two effective columns
+ " <td colspan=2'></td>" // matches col3
+ " <td colspan=3'></td>" // matches start but not end of col4
+ " <td></td>" // matches end but not start of col5
+ " </tr>"
+ "</table>");
+ // absolute | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
+ // effective | 0 | 1 | 2 | 3 | 4 | 5 |
+ // colgroup | 1 | 2 | 3 | 4 | |
+ // col | a | b | 2 | | | 5 |
+ // td | | | | | | |
+
+ auto* table = GetTableByElementId("table");
+ EXPECT_EQ(6u, table->NumEffectiveColumns());
+
+ auto c0 = table->ColAndColGroupAtEffectiveColumn(0);
+ EXPECT_EQ(GetLayoutObjectByElementId("colgroup1"), c0.colgroup);
+ EXPECT_EQ(GetLayoutObjectByElementId("col1a"), c0.col);
+ EXPECT_EQ(c0.col, c0.InnermostColOrColGroup());
+ EXPECT_TRUE(c0.adjoins_start_border_of_col_group);
+ EXPECT_TRUE(c0.adjoins_end_border_of_col_group);
+
+ auto c1 = table->ColAndColGroupAtEffectiveColumn(1);
+ EXPECT_EQ(GetLayoutObjectByElementId("colgroup2"), c1.colgroup);
+ EXPECT_EQ(GetLayoutObjectByElementId("col2"), c1.col);
+ EXPECT_EQ(c1.col, c1.InnermostColOrColGroup());
+ EXPECT_TRUE(c1.adjoins_start_border_of_col_group);
+ EXPECT_FALSE(c1.adjoins_end_border_of_col_group);
+
+ auto c2 = table->ColAndColGroupAtEffectiveColumn(2);
+ EXPECT_EQ(GetLayoutObjectByElementId("colgroup2"), c2.colgroup);
+ EXPECT_EQ(GetLayoutObjectByElementId("col2"), c2.col);
+ EXPECT_EQ(c2.col, c2.InnermostColOrColGroup());
+ EXPECT_FALSE(c2.adjoins_start_border_of_col_group);
+ EXPECT_TRUE(c2.adjoins_end_border_of_col_group);
+
+ auto c3 = table->ColAndColGroupAtEffectiveColumn(3);
+ EXPECT_EQ(GetLayoutObjectByElementId("colgroup3"), c3.colgroup);
+ EXPECT_EQ(nullptr, c3.col);
+ EXPECT_EQ(c3.colgroup, c3.InnermostColOrColGroup());
+ EXPECT_TRUE(c3.adjoins_start_border_of_col_group);
+ EXPECT_TRUE(c3.adjoins_end_border_of_col_group);
+
+ auto c4 = table->ColAndColGroupAtEffectiveColumn(4);
+ EXPECT_EQ(GetLayoutObjectByElementId("colgroup4"), c4.colgroup);
+ EXPECT_EQ(nullptr, c4.col);
+ EXPECT_EQ(c4.colgroup, c4.InnermostColOrColGroup());
+ EXPECT_TRUE(c4.adjoins_start_border_of_col_group);
+ EXPECT_FALSE(c4.adjoins_end_border_of_col_group);
+
+ auto c5 = table->ColAndColGroupAtEffectiveColumn(5);
+ EXPECT_EQ(GetLayoutObjectByElementId("col5")->Parent(), c5.colgroup);
+ EXPECT_EQ(GetLayoutObjectByElementId("col5"), c5.col);
+ EXPECT_EQ(c5.col, c5.InnermostColOrColGroup());
+ EXPECT_FALSE(c5.adjoins_start_border_of_col_group);
+ EXPECT_TRUE(c5.adjoins_end_border_of_col_group);
+
+ // Beyond the end of columns.
+ auto c6 = table->ColAndColGroupAtEffectiveColumn(6);
+ EXPECT_EQ(nullptr, c6.colgroup);
+ EXPECT_EQ(nullptr, c6.col);
+ EXPECT_EQ(nullptr, c6.InnermostColOrColGroup());
+ EXPECT_FALSE(c6.adjoins_start_border_of_col_group);
+ EXPECT_FALSE(c6.adjoins_end_border_of_col_group);
+}
+
+TEST_F(LayoutTableTest, ColAndColGroupAtEffectiveColumnSingleEffectiveColumn) {
+ SetBodyInnerHTML(
+ "<table id ='table'>"
+ " <colgroup id='colgroup'>"
+ " <col id='col'>"
+ " <col span='2'>"
+ " <col span='3'>"
+ " </colgroup>"
+ " <tr>"
+ " <td colspan='6'></td>"
+ " </tr>"
+ "</table>");
+ // absolute | 0 | 1 | 2 | 3 | 4 | 5 |
+ // effective | 0 |
+ // colgroup | |
+ // col | | | |
+ // td | |
+
+ auto* table = GetTableByElementId("table");
+ EXPECT_EQ(1u, table->NumEffectiveColumns());
+
+ auto c0 = table->ColAndColGroupAtEffectiveColumn(0);
+ EXPECT_EQ(GetLayoutObjectByElementId("colgroup"), c0.colgroup);
+ EXPECT_EQ(GetLayoutObjectByElementId("col"), c0.col);
+ EXPECT_EQ(c0.col, c0.InnermostColOrColGroup());
+ EXPECT_TRUE(c0.adjoins_start_border_of_col_group);
+ EXPECT_TRUE(c0.adjoins_end_border_of_col_group);
+
+ auto c1 = table->ColAndColGroupAtEffectiveColumn(1);
+ EXPECT_EQ(nullptr, c1.colgroup);
+ EXPECT_EQ(nullptr, c1.col);
+ EXPECT_EQ(nullptr, c1.InnermostColOrColGroup());
+ EXPECT_FALSE(c1.adjoins_start_border_of_col_group);
+ EXPECT_FALSE(c1.adjoins_end_border_of_col_group);
+}
+
+TEST_F(LayoutTableTest,
+ ColAndColGroupAtEffectiveColumnSingleEffectiveColumnUnmatchedEnd) {
+ SetBodyInnerHTML(
+ "<table id ='table'>"
+ " <colgroup id='colgroup'>"
+ " <col id='col'>"
+ " <col span='2'>"
+ " <col span='3'>"
+ " </colgroup>"
+ " <tr>"
+ " <td colspan='5'></td>"
+ " </tr>"
+ "</table>");
+ // absolute | 0 | 1 | 2 | 3 | 4 |
+ // effective | 0 |
+ // colgroup | |
+ // col | | | |
+ // td | |
+
+ auto* table = GetTableByElementId("table");
+ EXPECT_EQ(1u, table->NumEffectiveColumns());
+
+ auto c0 = table->ColAndColGroupAtEffectiveColumn(0);
+ EXPECT_EQ(GetLayoutObjectByElementId("colgroup"), c0.colgroup);
+ EXPECT_EQ(GetLayoutObjectByElementId("col"), c0.col);
+ EXPECT_EQ(c0.col, c0.InnermostColOrColGroup());
+ EXPECT_TRUE(c0.adjoins_start_border_of_col_group);
+ EXPECT_FALSE(c0.adjoins_end_border_of_col_group);
+
+ auto c1 = table->ColAndColGroupAtEffectiveColumn(1);
+ EXPECT_EQ(nullptr, c1.colgroup);
+ EXPECT_EQ(nullptr, c1.col);
+ EXPECT_EQ(nullptr, c1.InnermostColOrColGroup());
+ EXPECT_FALSE(c1.adjoins_start_border_of_col_group);
+ EXPECT_FALSE(c1.adjoins_end_border_of_col_group);
+}
+
+} // anonymous namespace
+
+} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698