OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 #endif | 72 #endif |
73 | 73 |
74 class LayoutTableCellTest : public RenderingTest { | 74 class LayoutTableCellTest : public RenderingTest { |
75 protected: | 75 protected: |
76 bool HasStartBorderAdjoiningTable(const LayoutTableCell* cell) { | 76 bool HasStartBorderAdjoiningTable(const LayoutTableCell* cell) { |
77 return cell->HasStartBorderAdjoiningTable(); | 77 return cell->HasStartBorderAdjoiningTable(); |
78 } | 78 } |
79 bool HasEndBorderAdjoiningTable(const LayoutTableCell* cell) { | 79 bool HasEndBorderAdjoiningTable(const LayoutTableCell* cell) { |
80 return cell->HasEndBorderAdjoiningTable(); | 80 return cell->HasEndBorderAdjoiningTable(); |
81 } | 81 } |
| 82 LayoutRect LocalVisualRect(const LayoutTableCell* cell) { |
| 83 return cell->LocalVisualRect(); |
| 84 } |
82 | 85 |
83 LayoutTableCell* GetCellByElementId(const char* id) { | 86 LayoutTableCell* GetCellByElementId(const char* id) { |
84 return ToLayoutTableCell(GetLayoutObjectByElementId(id)); | 87 return ToLayoutTableCell(GetLayoutObjectByElementId(id)); |
85 } | 88 } |
86 }; | 89 }; |
87 | 90 |
88 TEST_F(LayoutTableCellTest, AbsoluteColumnIndex) { | 91 TEST_F(LayoutTableCellTest, AbsoluteColumnIndex) { |
89 auto* cell = LayoutTableCell::CreateAnonymous(&GetDocument()); | 92 auto* cell = LayoutTableCell::CreateAnonymous(&GetDocument()); |
90 EXPECT_FALSE(cell->HasSetAbsoluteColumnIndex()); | 93 EXPECT_FALSE(cell->HasSetAbsoluteColumnIndex()); |
91 cell->SetAbsoluteColumnIndex(kMaxColumnIndex); | 94 cell->SetAbsoluteColumnIndex(kMaxColumnIndex); |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 EXPECT_FALSE(HasEndBorderAdjoiningTable(cell22)); | 247 EXPECT_FALSE(HasEndBorderAdjoiningTable(cell22)); |
245 EXPECT_TRUE(HasStartBorderAdjoiningTable(cell23)); | 248 EXPECT_TRUE(HasStartBorderAdjoiningTable(cell23)); |
246 EXPECT_FALSE(HasEndBorderAdjoiningTable(cell23)); | 249 EXPECT_FALSE(HasEndBorderAdjoiningTable(cell23)); |
247 | 250 |
248 EXPECT_FALSE(HasStartBorderAdjoiningTable(cell31)); | 251 EXPECT_FALSE(HasStartBorderAdjoiningTable(cell31)); |
249 EXPECT_FALSE(HasEndBorderAdjoiningTable(cell31)); | 252 EXPECT_FALSE(HasEndBorderAdjoiningTable(cell31)); |
250 EXPECT_FALSE(HasStartBorderAdjoiningTable(cell32)); | 253 EXPECT_FALSE(HasStartBorderAdjoiningTable(cell32)); |
251 EXPECT_FALSE(HasEndBorderAdjoiningTable(cell32)); | 254 EXPECT_FALSE(HasEndBorderAdjoiningTable(cell32)); |
252 } | 255 } |
253 | 256 |
| 257 TEST_F(LayoutTableCellTest, LocalVisualRectWithCollapsedBorders) { |
| 258 SetBodyInnerHTML( |
| 259 "<style>" |
| 260 " table { border-collapse: collapse }" |
| 261 " td { border: 0px solid blue; padding: 0 }" |
| 262 " div { width: 100px; height: 100px }" |
| 263 "</style>" |
| 264 "<table>" |
| 265 " <tr>" |
| 266 " <td id='cell1' style='border-bottom-width: 10px;" |
| 267 " outline: 3px solid blue'><div></div></td>" |
| 268 " <td id='cell2' style='border-width: 3px 15px'><div></div></td>" |
| 269 " </tr>" |
| 270 "</table>"); |
| 271 |
| 272 auto* cell1 = GetCellByElementId("cell1"); |
| 273 auto* cell2 = GetCellByElementId("cell2"); |
| 274 EXPECT_TRUE(cell1->Table()->ShouldCollapseBorders()); |
| 275 |
| 276 EXPECT_EQ(0, cell1->BorderLeft()); |
| 277 EXPECT_EQ(7, cell1->BorderRight()); |
| 278 EXPECT_EQ(0, cell1->BorderTop()); |
| 279 EXPECT_EQ(5, cell1->BorderBottom()); |
| 280 EXPECT_EQ(8, cell2->BorderLeft()); |
| 281 EXPECT_EQ(7, cell2->BorderRight()); |
| 282 EXPECT_EQ(2, cell2->BorderTop()); |
| 283 EXPECT_EQ(1, cell2->BorderBottom()); |
| 284 |
| 285 LayoutRect expected_visual_rect1 = cell1->BorderBoxRect(); |
| 286 // Expand top, left for outline, right and bottom for collapsed border. |
| 287 expected_visual_rect1.ExpandEdges(LayoutUnit(3), LayoutUnit(8), LayoutUnit(5), |
| 288 LayoutUnit(3)); |
| 289 EXPECT_EQ(expected_visual_rect1, LocalVisualRect(cell1)); |
| 290 |
| 291 LayoutRect expected_visual_rect2 = cell2->BorderBoxRect(); |
| 292 // Expand outer half border width at each side. For the bottom side, expand |
| 293 // more because the left border is lengthened to cover the joint with the |
| 294 // bottom border of the cell to the left. |
| 295 expected_visual_rect2.ExpandEdges(LayoutUnit(1), LayoutUnit(8), LayoutUnit(5), |
| 296 LayoutUnit(7)); |
| 297 EXPECT_EQ(expected_visual_rect2, LocalVisualRect(cell2)); |
| 298 } |
| 299 |
254 } // namespace blink | 300 } // namespace blink |
OLD | NEW |