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

Side by Side Diff: third_party/WebKit/Source/core/paint/TableCellPainterTest.cpp

Issue 2786463004: Paint backgrounds of a table section/row in one display item (Closed)
Patch Set: - Created 3 years, 8 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 2015 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/paint/PaintControllerPaintTest.h"
6 #include "core/paint/PaintLayerPainter.h"
7
8 namespace blink {
9
10 using TableCellPainterTest = PaintControllerPaintTest;
11
12 TEST_F(TableCellPainterTest, Background) {
13 setBodyInnerHTML(
14 "<style>"
15 " td { width: 200px; height: 200px; border: none; }"
16 " tr { background-color: blue; }"
17 " table { border: none; border-spacing: 0; border-collapse: collapse; }"
18 "</style>"
19 "<table>"
20 " <tr><td id='cell1'></td></tr>"
21 " <tr><td id='cell2'></td></tr>"
22 "</table>");
23
24 LayoutView& layoutView = *document().layoutView();
25 LayoutObject& cell1 = *getLayoutObjectByElementId("cell1");
26 LayoutObject& cell2 = *getLayoutObjectByElementId("cell2");
27
28 rootPaintController().invalidateAll();
29 document().view()->updateAllLifecyclePhasesExceptPaint();
30 IntRect interestRect(0, 0, 200, 200);
31 paint(&interestRect);
32
33 EXPECT_DISPLAY_LIST(
34 rootPaintController().getDisplayItemList(), 2,
35 TestDisplayItem(layoutView, DisplayItem::kDocumentBackground),
36 TestDisplayItem(cell1, DisplayItem::kTableCellBackgroundFromRow));
37
38 document().view()->updateAllLifecyclePhasesExceptPaint();
39 interestRect = IntRect(0, 300, 200, 1000);
40 paint(&interestRect);
41
42 EXPECT_DISPLAY_LIST(
43 rootPaintController().getDisplayItemList(), 2,
44 TestDisplayItem(layoutView, DisplayItem::kDocumentBackground),
45 TestDisplayItem(cell2, DisplayItem::kTableCellBackgroundFromRow));
46 }
47
48 TEST_F(TableCellPainterTest, BackgroundWithCellSpacing) {
49 setBodyInnerHTML(
50 "<style>"
51 " body { margin: 0; }"
52 " td { width: 200px; height: 150px; border: 0; background-color: green; "
53 "}"
54 " tr { background-color: blue; }"
55 " table { border: none; border-spacing: 100px; border-collapse: "
56 "separate; }"
57 "</style>"
58 "<table>"
59 " <tr><td id='cell1'></td></tr>"
60 " <tr><td id='cell2'></td></tr>"
61 "</table>");
62
63 LayoutView& layoutView = *document().layoutView();
64 LayoutObject& cell1 = *getLayoutObjectByElementId("cell1");
65 LayoutObject& cell2 = *getLayoutObjectByElementId("cell2");
66
67 rootPaintController().invalidateAll();
68 document().view()->updateAllLifecyclePhasesExceptPaint();
69 // Intersects cell1 and the spacing between cell1 and cell2.
70 IntRect interestRect(0, 200, 200, 150);
71 paint(&interestRect);
72
73 EXPECT_DISPLAY_LIST(
74 rootPaintController().getDisplayItemList(), 3,
75 TestDisplayItem(layoutView, DisplayItem::kDocumentBackground),
76 TestDisplayItem(cell1, DisplayItem::kTableCellBackgroundFromRow),
77 TestDisplayItem(cell1, DisplayItem::kBoxDecorationBackground));
78
79 document().view()->updateAllLifecyclePhasesExceptPaint();
80 // Intersects the spacing only.
81 interestRect = IntRect(0, 250, 100, 100);
82 paint(&interestRect);
83
84 EXPECT_DISPLAY_LIST(
85 rootPaintController().getDisplayItemList(), 1,
86 TestDisplayItem(layoutView, DisplayItem::kDocumentBackground));
87
88 document().view()->updateAllLifecyclePhasesExceptPaint();
89 // Intersects cell2 only.
90 interestRect = IntRect(0, 350, 200, 150);
91 paint(&interestRect);
92
93 EXPECT_DISPLAY_LIST(
94 rootPaintController().getDisplayItemList(), 3,
95 TestDisplayItem(layoutView, DisplayItem::kDocumentBackground),
96 TestDisplayItem(cell2, DisplayItem::kTableCellBackgroundFromRow),
97 TestDisplayItem(cell2, DisplayItem::kBoxDecorationBackground));
98 }
99
100 TEST_F(TableCellPainterTest, BackgroundInSelfPaintingRow) {
101 setBodyInnerHTML(
102 "<style>"
103 " body { margin: 0 }"
104 " td { width: 200px; height: 200px; border: 0; background-color: green; "
105 "}"
106 " tr { background-color: blue; opacity: 0.5; }"
107 " table { border: none; border-spacing: 100px; border-collapse: "
108 "separate; }"
109 "</style>"
110 "<table>"
111 " <tr id='row'><td id='cell1'><td id='cell2'></td></tr>"
112 "</table>");
113
114 LayoutView& layoutView = *document().layoutView();
115 LayoutObject& cell1 = *getLayoutObjectByElementId("cell1");
116 LayoutObject& cell2 = *getLayoutObjectByElementId("cell2");
117 LayoutObject& row = *getLayoutObjectByElementId("row");
118 PaintLayer& htmlLayer =
119 *toLayoutBoxModelObject(document().documentElement()->layoutObject())
120 ->layer();
121
122 rootPaintController().invalidateAll();
123 document().view()->updateAllLifecyclePhasesExceptPaint();
124 // Intersects cell1 and the spacing between cell1 and cell2.
125 IntRect interestRect(200, 0, 200, 200);
126 paint(&interestRect);
127
128 EXPECT_DISPLAY_LIST(
129 rootPaintController().getDisplayItemList(), 7,
130 TestDisplayItem(layoutView, DisplayItem::kDocumentBackground),
131 TestDisplayItem(htmlLayer, DisplayItem::kSubsequence),
132 TestDisplayItem(row, DisplayItem::kBeginCompositing),
133 TestDisplayItem(cell1, DisplayItem::kTableCellBackgroundFromRow),
134 TestDisplayItem(cell1, DisplayItem::kBoxDecorationBackground),
135 TestDisplayItem(row, DisplayItem::kEndCompositing),
136 TestDisplayItem(htmlLayer, DisplayItem::kEndSubsequence));
137
138 document().view()->updateAllLifecyclePhasesExceptPaint();
139 // Intersects the spacing only.
140 interestRect = IntRect(300, 0, 100, 100);
141 paint(&interestRect);
142
143 EXPECT_DISPLAY_LIST(
144 rootPaintController().getDisplayItemList(), 3,
145 TestDisplayItem(layoutView, DisplayItem::kDocumentBackground),
146 TestDisplayItem(htmlLayer, DisplayItem::kSubsequence),
147 TestDisplayItem(htmlLayer, DisplayItem::kEndSubsequence));
148
149 document().view()->updateAllLifecyclePhasesExceptPaint();
150 // Intersects cell2 only.
151 interestRect = IntRect(450, 0, 200, 200);
152 paint(&interestRect);
153
154 EXPECT_DISPLAY_LIST(
155 rootPaintController().getDisplayItemList(), 7,
156 TestDisplayItem(layoutView, DisplayItem::kDocumentBackground),
157 TestDisplayItem(htmlLayer, DisplayItem::kSubsequence),
158 TestDisplayItem(row, DisplayItem::kBeginCompositing),
159 TestDisplayItem(cell2, DisplayItem::kTableCellBackgroundFromRow),
160 TestDisplayItem(cell2, DisplayItem::kBoxDecorationBackground),
161 TestDisplayItem(row, DisplayItem::kEndCompositing),
162 TestDisplayItem(htmlLayer, DisplayItem::kEndSubsequence));
163 }
164
165 TEST_F(TableCellPainterTest, CollapsedBorderAndOverflow) {
166 setBodyInnerHTML(
167 "<style>"
168 " body { margin: 0 }"
169 " td { width: 100px; height: 100px; border: 100px solid blue; outline: "
170 "100px solid yellow; background: green; }"
171 " table { margin: 100px; border-collapse: collapse; }"
172 "</style>"
173 "<table>"
174 " <tr><td id='cell'></td></tr>"
175 "</table>");
176
177 LayoutView& layoutView = *document().layoutView();
178 LayoutObject& cell = *getLayoutObjectByElementId("cell");
179
180 rootPaintController().invalidateAll();
181 document().view()->updateAllLifecyclePhasesExceptPaint();
182 // Intersects the overflowing part of cell but not border box.
183 IntRect interestRect(0, 0, 100, 100);
184 paint(&interestRect);
185
186 // We should paint all display items of cell.
187 EXPECT_DISPLAY_LIST(
188 rootPaintController().getDisplayItemList(), 4,
189 TestDisplayItem(layoutView, DisplayItem::kDocumentBackground),
190 TestDisplayItem(cell, DisplayItem::kBoxDecorationBackground),
191 TestDisplayItem(cell, DisplayItem::kTableCollapsedBorderLast),
192 TestDisplayItem(cell, DisplayItem::paintPhaseToDrawingType(
193 PaintPhaseSelfOutlineOnly)));
194 }
195
196 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698