| 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
|
|
|