| 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..77c1b4c68bec5e4c532969f5e8b7215d711fb8c7
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutTableTest.cpp
|
| @@ -0,0 +1,162 @@
|
| +// 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/LayoutTestHelper.h"
|
| +
|
| +namespace blink {
|
| +
|
| +namespace {
|
| +
|
| +class LayoutTableTest : public RenderingTest {
|
| + protected:
|
| + LayoutTable* GetTableByElementId(const char* id) {
|
| + return ToLayoutTable(GetLayoutObjectByElementId(id));
|
| + }
|
| +};
|
| +
|
| +TEST_F(LayoutTableTest, OverflowWithCollapsedBorders) {
|
| + SetBodyInnerHTML(
|
| + "<style>"
|
| + " table { border-collapse: collapse }"
|
| + " td { border: 0px solid blue; padding: 0 }"
|
| + " div { width: 100px; height: 100px }"
|
| + "</style>"
|
| + "<table id='table'>"
|
| + " <tr>"
|
| + " <td style='border-bottom-width: 10px;"
|
| + " outline: 3px solid blue'><div></div></td>"
|
| + " <td style='border-width: 3px 15px'><div></div></td>"
|
| + " </tr>"
|
| + " <tr style='outline: 8px solid green'><td><div></div></td></tr>"
|
| + "</table>");
|
| +
|
| + auto* table = GetTableByElementId("table");
|
| +
|
| + // The table's self visual overflow covers the collapsed borders.
|
| + LayoutRect expected_self_visual_overflow = table->BorderBoxRect();
|
| + expected_self_visual_overflow.ExpandEdges(LayoutUnit(1), LayoutUnit(8),
|
| + LayoutUnit(0), LayoutUnit(0));
|
| + EXPECT_EQ(expected_self_visual_overflow, table->SelfVisualOverflowRect());
|
| +
|
| + // The table's visual overflow covers self visual overflow and visual
|
| + // overflows rows.
|
| + LayoutRect expected_visual_overflow = table->BorderBoxRect();
|
| + expected_visual_overflow.ExpandEdges(LayoutUnit(3), LayoutUnit(8),
|
| + LayoutUnit(8), LayoutUnit(8));
|
| + EXPECT_EQ(expected_visual_overflow, table->VisualOverflowRect());
|
| +}
|
| +
|
| +TEST_F(LayoutTableTest, CollapsedBorders) {
|
| + SetBodyInnerHTML(
|
| + "<style>table { border-collapse: collapse }</style>"
|
| + "<table id='table1'"
|
| + " style='border-top: hidden; border-bottom: 8px solid;"
|
| + " border-left: hidden; border-right: 10px solid'>"
|
| + " <tr><td>A</td><td>B</td></tr>"
|
| + "</table>"
|
| + "<table id='table2' style='border: 10px solid'>"
|
| + " <tr>"
|
| + " <td style='border: hidden'>C</td>"
|
| + " <td style='border: hidden'>D</td>"
|
| + " </tr>"
|
| + "</table>"
|
| + "<table id='table3' style='border: 10px solid'>"
|
| + " <tr>"
|
| + " <td style='border-top: 15px solid;"
|
| + " border-left: 21px solid'>E</td>"
|
| + " <td style='border-bottom: 19px solid;"
|
| + " border-right: 25px solid'>F</td>"
|
| + " </tr>"
|
| + "</table>");
|
| +
|
| + auto* table1 = GetTableByElementId("table1");
|
| + EXPECT_EQ(0, table1->BorderBefore());
|
| + EXPECT_EQ(4, table1->BorderAfter());
|
| + EXPECT_EQ(0, table1->BorderStart());
|
| + EXPECT_EQ(5, table1->BorderEnd());
|
| +
|
| + // All cells have hidden border.
|
| + auto* table2 = GetTableByElementId("table2");
|
| + EXPECT_EQ(0, table2->BorderBefore());
|
| + EXPECT_EQ(0, table2->BorderAfter());
|
| + EXPECT_EQ(0, table2->BorderStart());
|
| + EXPECT_EQ(0, table2->BorderEnd());
|
| +
|
| + // Cells have wider borders.
|
| + auto* table3 = GetTableByElementId("table3");
|
| + // Cell E's border-top won.
|
| + EXPECT_EQ(7, table3->BorderBefore());
|
| + // Cell F's border-bottom won.
|
| + EXPECT_EQ(10, table3->BorderAfter());
|
| + // Cell E's border-left won.
|
| + EXPECT_EQ(10, table3->BorderStart());
|
| + // Cell F's border-bottom won.
|
| + EXPECT_EQ(13, table3->BorderEnd());
|
| +}
|
| +
|
| +TEST_F(LayoutTableTest, CollapsedBordersWithCol) {
|
| + SetBodyInnerHTML(
|
| + "<style>table { border-collapse: collapse }</style>"
|
| + "<table id='table1' style='border: hidden'>"
|
| + " <colgroup>"
|
| + " <col colspan='2000' style='border: 10px solid'>"
|
| + " <col colspan='2000' style='border: 20px solid'>"
|
| + " </colgroup>"
|
| + " <tr>"
|
| + " <td colspan='2000'>A</td>"
|
| + " <td colspan='2000'>B</td>"
|
| + " </tr>"
|
| + "</table>"
|
| + "<table id='table2' style='border: 10px solid'>"
|
| + " <colgroup>"
|
| + " <col colspan='2000' style='border: 10px solid'>"
|
| + " <col colspan='2000' style='border: 20px solid'>"
|
| + " </colgroup>"
|
| + " <tr>"
|
| + " <td colspan='2000' style='border: hidden'>C</td>"
|
| + " <td colspan='2000' style='border: hidden'>D</td>"
|
| + " </tr>"
|
| + "</table>"
|
| + "<table id='table3'>"
|
| + " <colgroup>"
|
| + " <col colspan='2000' style='border: 10px solid'>"
|
| + " <col colspan='2000' style='border: 20px solid'>"
|
| + " </colgroup>"
|
| + " <tr>"
|
| + " <td colspan='2000' style='border: 12px solid'>E</td>"
|
| + " <td colspan='2000' style='border: 16px solid'>F</td>"
|
| + " </tr>"
|
| + "</table>");
|
| +
|
| + // Table has hidden border.
|
| + auto* table1 = GetTableByElementId("table1");
|
| + EXPECT_EQ(0, table1->BorderBefore());
|
| + EXPECT_EQ(0, table1->BorderAfter());
|
| + EXPECT_EQ(0, table1->BorderStart());
|
| + EXPECT_EQ(0, table1->BorderEnd());
|
| +
|
| + // All cells have hidden border.
|
| + auto* table2 = GetTableByElementId("table2");
|
| + EXPECT_EQ(0, table2->BorderBefore());
|
| + EXPECT_EQ(0, table2->BorderAfter());
|
| + EXPECT_EQ(0, table2->BorderStart());
|
| + EXPECT_EQ(0, table2->BorderEnd());
|
| +
|
| + // Combined cell and col borders.
|
| + auto* table3 = GetTableByElementId("table3");
|
| + // Col 2's border-top won.
|
| + EXPECT_EQ(10, table3->BorderBefore());
|
| + // Col 2's border-bottom won.
|
| + EXPECT_EQ(10, table3->BorderAfter());
|
| + // Cell E's border-left won.
|
| + EXPECT_EQ(6, table3->BorderStart());
|
| + // Col 2's border-right won.
|
| + EXPECT_EQ(10, table3->BorderEnd());
|
| +}
|
| +
|
| +} // anonymous namespace
|
| +
|
| +} // namespace blink
|
|
|