1 // Copyright 2017 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 "cc/test/paint_op_helper.h"
6 #include "cc/paint/paint_canvas.h"
7 #include "cc/paint/paint_op_buffer.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 
10 namespace cc {
11 namespace {
12 
TEST(PaintOpHelper,AnnotateToString)13 TEST(PaintOpHelper, AnnotateToString) {
14   AnnotateOp op(PaintCanvas::AnnotationType::URL, SkRect::MakeXYWH(1, 2, 3, 4),
15                 nullptr);
16   std::string str = PaintOpHelper::ToString(&op);
17   EXPECT_EQ(str,
18             "AnnotateOp(type=URL, rect=[1.000,2.000 3.000x4.000], data=(nil))");
19 }
20 
TEST(PaintOpHelper,ClipPathToString)21 TEST(PaintOpHelper, ClipPathToString) {
22   ClipPathOp op(SkPath(), SkClipOp::kDifference, true);
23   std::string str = PaintOpHelper::ToString(&op);
24   EXPECT_EQ(str, "ClipPathOp(path=<SkPath>, op=kDifference, antialias=true)");
25 }
26 
TEST(PaintOpHelper,ClipRectToString)27 TEST(PaintOpHelper, ClipRectToString) {
28   ClipRectOp op(SkRect::MakeXYWH(10.1f, 20.2f, 30.3f, 40.4f),
29                 SkClipOp::kIntersect, false);
30   std::string str = PaintOpHelper::ToString(&op);
31   EXPECT_EQ(str,
32             "ClipRectOp(rect=[10.100,20.200 30.300x40.400], op=kIntersect, "
33             "antialias=false)");
34 }
35 
TEST(PaintOpHelper,ClipRRectToString)36 TEST(PaintOpHelper, ClipRRectToString) {
37   ClipRRectOp op(SkRRect::MakeRect(SkRect::MakeXYWH(1, 2, 3, 4)),
38                  SkClipOp::kDifference, false);
39   std::string str = PaintOpHelper::ToString(&op);
40   EXPECT_EQ(str,
41             "ClipRRectOp(rrect=[bounded by 1.000,2.000 3.000x4.000], "
42             "op=kDifference, antialias=false)");
43 }
44 
TEST(PaintOpHelper,ConcatToString)45 TEST(PaintOpHelper, ConcatToString) {
46   ConcatOp op(SkMatrix::MakeAll(1, 2, 3, 4, 5, 6, 7, 8, 9));
47   std::string str = PaintOpHelper::ToString(&op);
48   EXPECT_EQ(str,
49             "ConcatOp(matrix=[  1.0000   2.0000   3.0000][  4.0000   5.0000   "
50             "6.0000][  7.0000   8.0000   9.0000])");
51 }
52 
TEST(PaintOpHelper,DrawColorToString)53 TEST(PaintOpHelper, DrawColorToString) {
54   DrawColorOp op(SkColorSetARGB(11, 22, 33, 44), SkBlendMode::kSrc);
55   std::string str = PaintOpHelper::ToString(&op);
56   EXPECT_EQ(str, "DrawColorOp(color=rgba(22, 33, 44, 11), mode=kSrc)");
57 }
58 
TEST(PaintOpHelper,DrawDRRectToString)59 TEST(PaintOpHelper, DrawDRRectToString) {
60   DrawDRRectOp op(SkRRect::MakeRect(SkRect::MakeXYWH(1, 2, 3, 4)),
61                   SkRRect::MakeRect(SkRect::MakeXYWH(5, 6, 7, 8)),
62                   PaintFlags());
63   std::string str = PaintOpHelper::ToString(&op);
64   EXPECT_EQ(
65       str,
66       "DrawDRRectOp(outer=[bounded by 1.000,2.000 3.000x4.000], inner=[bounded "
67       "by 5.000,6.000 7.000x8.000], flags=[color=rgba(0, 0, 0, 255), "
68       "blendMode=kSrcOver, isAntiAlias=false, isDither=false, "
69       "filterQuality=kNone_SkFilterQuality, "
70       "strokeWidth=0.000, strokeMiter=4.000, strokeCap=kButt_Cap, "
71       "strokeJoin=kMiter_Join, colorFilter=(nil), "
72       "maskFilter=(nil), shader=(nil), hasShader=false, shaderIsOpaque=false, "
73       "pathEffect=(nil), imageFilter=(nil), drawLooper=(nil), "
74       "isSimpleOpacity=true, supportsFoldingAlpha=true, isValid=true, "
75       "hasDiscardableImages=false])");
76 }
77 
TEST(PaintOpHelper,DrawImageToString)78 TEST(PaintOpHelper, DrawImageToString) {
79   DrawImageOp op(PaintImage(), 10.5f, 20.3f, nullptr);
80   std::string str = PaintOpHelper::ToString(&op);
81   EXPECT_EQ(
82       str,
83       "DrawImageOp(image=<paint image>, left=10.500, top=20.300, "
84       "flags=[color=rgba(0, 0, 0, 255), blendMode=kSrcOver, isAntiAlias=false, "
85       "isDither=false, filterQuality=kNone_SkFilterQuality, strokeWidth=0.000, "
86       "strokeMiter=4.000, strokeCap=kButt_Cap, strokeJoin=kMiter_Join, "
87       "colorFilter=(nil), maskFilter=(nil), shader=(nil), "
88       "hasShader=false, shaderIsOpaque=false, pathEffect=(nil), "
89       "imageFilter=(nil), drawLooper=(nil), isSimpleOpacity=true, "
90       "supportsFoldingAlpha=true, isValid=true, hasDiscardableImages=false])");
91 }
92 
TEST(PaintOpHelper,DrawImageRectToString)93 TEST(PaintOpHelper, DrawImageRectToString) {
94   DrawImageRectOp op(PaintImage(), SkRect::MakeXYWH(1, 2, 3, 4),
95                      SkRect::MakeXYWH(5, 6, 7, 8), nullptr,
96                      PaintCanvas::kStrict_SrcRectConstraint);
97   std::string str = PaintOpHelper::ToString(&op);
98   EXPECT_EQ(
99       str,
100       "DrawImageRectOp(image=<paint image>, src=[1.000,2.000 3.000x4.000], "
101       "dst=[5.000,6.000 7.000x8.000], constraint=kStrict_SrcRectConstraint, "
102       "flags=[color=rgba(0, 0, 0, 255), blendMode=kSrcOver, isAntiAlias=false, "
103       "isDither=false, filterQuality=kNone_SkFilterQuality, strokeWidth=0.000, "
104       "strokeMiter=4.000, strokeCap=kButt_Cap, strokeJoin=kMiter_Join, "
105       "colorFilter=(nil), maskFilter=(nil), shader=(nil), "
106       "hasShader=false, shaderIsOpaque=false, pathEffect=(nil), "
107       "imageFilter=(nil), drawLooper=(nil), isSimpleOpacity=true, "
108       "supportsFoldingAlpha=true, isValid=true, hasDiscardableImages=false])");
109 }
110 
TEST(PaintOpHelper,DrawIRectToString)111 TEST(PaintOpHelper, DrawIRectToString) {
112   DrawIRectOp op(SkIRect::MakeXYWH(1, 2, 3, 4), PaintFlags());
113   std::string str = PaintOpHelper::ToString(&op);
114   EXPECT_EQ(str,
115             "DrawIRectOp(rect=[1,2 3x4], flags=[color=rgba(0, 0, 0, 255), "
116             "blendMode=kSrcOver, isAntiAlias=false, isDither=false, "
117             "filterQuality=kNone_SkFilterQuality, strokeWidth=0.000, "
118             "strokeMiter=4.000, strokeCap=kButt_Cap, strokeJoin=kMiter_Join, "
119             "colorFilter=(nil), maskFilter=(nil), "
120             "shader=(nil), hasShader=false, shaderIsOpaque=false, "
121             "pathEffect=(nil), imageFilter=(nil), drawLooper=(nil), "
122             "isSimpleOpacity=true, supportsFoldingAlpha=true, isValid=true, "
123             "hasDiscardableImages=false])");
124 }
125 
TEST(PaintOpHelper,DrawLineToString)126 TEST(PaintOpHelper, DrawLineToString) {
127   DrawLineOp op(1.1f, 2.2f, 3.3f, 4.4f, PaintFlags());
128   std::string str = PaintOpHelper::ToString(&op);
129   EXPECT_EQ(
130       str,
131       "DrawLineOp(x0=1.100, y0=2.200, x1=3.300, y1=4.400, flags=[color=rgba(0, "
132       "0, 0, 255), blendMode=kSrcOver, isAntiAlias=false, isDither=false, "
133       "filterQuality=kNone_SkFilterQuality, strokeWidth=0.000, "
134       "strokeMiter=4.000, strokeCap=kButt_Cap, strokeJoin=kMiter_Join, "
135       "colorFilter=(nil), maskFilter=(nil), shader=(nil), "
136       "hasShader=false, shaderIsOpaque=false, pathEffect=(nil), "
137       "imageFilter=(nil), drawLooper=(nil), isSimpleOpacity=true, "
138       "supportsFoldingAlpha=true, isValid=true, hasDiscardableImages=false])");
139 }
140 
TEST(PaintOpHelper,DrawOvalToString)141 TEST(PaintOpHelper, DrawOvalToString) {
142   DrawOvalOp op(SkRect::MakeXYWH(100, 200, 300, 400), PaintFlags());
143   std::string str = PaintOpHelper::ToString(&op);
144   EXPECT_EQ(
145       str,
146       "DrawOvalOp(oval=[100.000,200.000 300.000x400.000], flags=[color=rgba(0, "
147       "0, 0, 255), blendMode=kSrcOver, isAntiAlias=false, isDither=false, "
148       "filterQuality=kNone_SkFilterQuality, strokeWidth=0.000, "
149       "strokeMiter=4.000, strokeCap=kButt_Cap, strokeJoin=kMiter_Join, "
150       "colorFilter=(nil), maskFilter=(nil), shader=(nil), "
151       "hasShader=false, shaderIsOpaque=false, pathEffect=(nil), "
152       "imageFilter=(nil), drawLooper=(nil), isSimpleOpacity=true, "
153       "supportsFoldingAlpha=true, isValid=true, hasDiscardableImages=false])");
154 }
155 
TEST(PaintOpHelper,DrawPathToString)156 TEST(PaintOpHelper, DrawPathToString) {
157   SkPath path;
158   DrawPathOp op(path, PaintFlags());
159   std::string str = PaintOpHelper::ToString(&op);
160   EXPECT_EQ(str,
161             "DrawPathOp(path=<SkPath>, flags=[color=rgba(0, 0, 0, 255), "
162             "blendMode=kSrcOver, isAntiAlias=false, isDither=false, "
163             "filterQuality=kNone_SkFilterQuality, strokeWidth=0.000, "
164             "strokeMiter=4.000, strokeCap=kButt_Cap, strokeJoin=kMiter_Join, "
165             "colorFilter=(nil), maskFilter=(nil), "
166             "shader=(nil), hasShader=false, shaderIsOpaque=false, "
167             "pathEffect=(nil), imageFilter=(nil), drawLooper=(nil), "
168             "isSimpleOpacity=true, supportsFoldingAlpha=true, isValid=true, "
169             "hasDiscardableImages=false])");
170 }
171 
TEST(PaintOpHelper,DrawRecordToString)172 TEST(PaintOpHelper, DrawRecordToString) {
173   DrawRecordOp op(nullptr);
174   std::string str = PaintOpHelper::ToString(&op);
175   EXPECT_EQ(str, "DrawRecordOp(record=(nil))");
176 }
177 
TEST(PaintOpHelper,DrawRectToString)178 TEST(PaintOpHelper, DrawRectToString) {
179   DrawRectOp op(SkRect::MakeXYWH(-1, -2, -3, -4), PaintFlags());
180   std::string str = PaintOpHelper::ToString(&op);
181   EXPECT_EQ(
182       str,
183       "DrawRectOp(rect=[-1.000,-2.000 -3.000x-4.000], flags=[color=rgba(0, 0, "
184       "0, 255), blendMode=kSrcOver, isAntiAlias=false, "
185       "isDither=false, filterQuality=kNone_SkFilterQuality, "
186       "strokeWidth=0.000, strokeMiter=4.000, strokeCap=kButt_Cap, "
187       "strokeJoin=kMiter_Join, colorFilter=(nil), "
188       "maskFilter=(nil), shader=(nil), hasShader=false, shaderIsOpaque=false, "
189       "pathEffect=(nil), imageFilter=(nil), drawLooper=(nil), "
190       "isSimpleOpacity=true, supportsFoldingAlpha=true, isValid=true, "
191       "hasDiscardableImages=false])");
192 }
193 
TEST(PaintOpHelper,DrawRRectToString)194 TEST(PaintOpHelper, DrawRRectToString) {
195   DrawRRectOp op(SkRRect::MakeRect(SkRect::MakeXYWH(-1, -2, 3, 4)),
196                  PaintFlags());
197   std::string str = PaintOpHelper::ToString(&op);
198   EXPECT_EQ(
199       str,
200       "DrawRRectOp(rrect=[bounded by -1.000,-2.000 3.000x4.000], "
201       "flags=[color=rgba(0, 0, 0, 255), blendMode=kSrcOver, isAntiAlias=false, "
202       "isDither=false, filterQuality=kNone_SkFilterQuality, strokeWidth=0.000, "
203       "strokeMiter=4.000, strokeCap=kButt_Cap, strokeJoin=kMiter_Join, "
204       "colorFilter=(nil), maskFilter=(nil), shader=(nil), "
205       "hasShader=false, shaderIsOpaque=false, pathEffect=(nil), "
206       "imageFilter=(nil), drawLooper=(nil), isSimpleOpacity=true, "
207       "supportsFoldingAlpha=true, isValid=true, hasDiscardableImages=false])");
208 }
209 
TEST(PaintOpHelper,DrawTextBlobToString)210 TEST(PaintOpHelper, DrawTextBlobToString) {
211   DrawTextBlobOp op(nullptr, 100, -222, PaintFlags());
212   std::string str = PaintOpHelper::ToString(&op);
213   EXPECT_EQ(
214       str,
215       "DrawTextBlobOp(blob=(nil), x=100.000, y=-222.000, flags=[color=rgba(0, "
216       "0, 0, 255), blendMode=kSrcOver, isAntiAlias=false, isDither=false, "
217       "filterQuality=kNone_SkFilterQuality, strokeWidth=0.000, "
218       "strokeMiter=4.000, strokeCap=kButt_Cap, strokeJoin=kMiter_Join, "
219       "colorFilter=(nil), maskFilter=(nil), shader=(nil), "
220       "hasShader=false, shaderIsOpaque=false, pathEffect=(nil), "
221       "imageFilter=(nil), drawLooper=(nil), isSimpleOpacity=true, "
222       "supportsFoldingAlpha=true, isValid=true, hasDiscardableImages=false])");
223 }
224 
TEST(PaintOpHelper,NoopToString)225 TEST(PaintOpHelper, NoopToString) {
226   NoopOp op;
227   std::string str = PaintOpHelper::ToString(&op);
228   EXPECT_EQ(str, "NoopOp()");
229 }
230 
TEST(PaintOpHelper,RestoreToString)231 TEST(PaintOpHelper, RestoreToString) {
232   RestoreOp op;
233   std::string str = PaintOpHelper::ToString(&op);
234   EXPECT_EQ(str, "RestoreOp()");
235 }
236 
TEST(PaintOpHelper,RotateToString)237 TEST(PaintOpHelper, RotateToString) {
238   RotateOp op(360);
239   std::string str = PaintOpHelper::ToString(&op);
240   EXPECT_EQ(str, "RotateOp(degrees=360.000)");
241 }
242 
TEST(PaintOpHelper,SaveToString)243 TEST(PaintOpHelper, SaveToString) {
244   SaveOp op;
245   std::string str = PaintOpHelper::ToString(&op);
246   EXPECT_EQ(str, "SaveOp()");
247 }
248 
TEST(PaintOpHelper,SaveLayerToString)249 TEST(PaintOpHelper, SaveLayerToString) {
250   SkRect bounds = SkRect::MakeXYWH(1, 2, 3, 4);
251   SaveLayerOp op(&bounds, nullptr);
252   std::string str = PaintOpHelper::ToString(&op);
253   EXPECT_EQ(
254       str,
255       "SaveLayerOp(bounds=[1.000,2.000 3.000x4.000], flags=[color=rgba(0, 0, "
256       "0, 255), blendMode=kSrcOver, isAntiAlias=false, isDither=false, "
257       "filterQuality=kNone_SkFilterQuality, "
258       "strokeWidth=0.000, strokeMiter=4.000, strokeCap=kButt_Cap, "
259       "strokeJoin=kMiter_Join, colorFilter=(nil), "
260       "maskFilter=(nil), shader=(nil), hasShader=false, shaderIsOpaque=false, "
261       "pathEffect=(nil), imageFilter=(nil), drawLooper=(nil), "
262       "isSimpleOpacity=true, supportsFoldingAlpha=true, isValid=true, "
263       "hasDiscardableImages=false])");
264 }
265 
TEST(PaintOpHelper,SaveLayerAlphaToString)266 TEST(PaintOpHelper, SaveLayerAlphaToString) {
267   SkRect bounds = SkRect::MakeXYWH(1, 2, 3, 4);
268   SaveLayerAlphaOp op(&bounds, 255);
269   std::string str = PaintOpHelper::ToString(&op);
270   EXPECT_EQ(str,
271             "SaveLayerAlphaOp(bounds=[1.000,2.000 3.000x4.000], alpha=255)");
272 }
273 
TEST(PaintOpHelper,ScaleToString)274 TEST(PaintOpHelper, ScaleToString) {
275   ScaleOp op(12, 13.9f);
276   std::string str = PaintOpHelper::ToString(&op);
277   EXPECT_EQ(str, "ScaleOp(sx=12.000, sy=13.900)");
278 }
279 
TEST(PaintOpHelper,SetMatrixToString)280 TEST(PaintOpHelper, SetMatrixToString) {
281   SetMatrixOp op(SkMatrix::MakeAll(-1, 2, -3, 4, -5, 6, -7, 8, -9));
282   std::string str = PaintOpHelper::ToString(&op);
283   EXPECT_EQ(str,
284             "SetMatrixOp(matrix=[ -1.0000   2.0000  -3.0000][  4.0000  -5.0000 "
285             "  6.0000][ -7.0000   8.0000  -9.0000])");
286 }
287 
TEST(PaintOpHelper,TranslateToString)288 TEST(PaintOpHelper, TranslateToString) {
289   TranslateOp op(0, 0);
290   std::string str = PaintOpHelper::ToString(&op);
291   EXPECT_EQ(str, "TranslateOp(dx=0.000, dy=0.000)");
292 }
293 
294 }  // namespace
295 }  // namespace cc
296