| Index: skia/ext/analysis_canvas_unittest.cc
|
| diff --git a/skia/ext/analysis_canvas_unittest.cc b/skia/ext/analysis_canvas_unittest.cc
|
| index 46c96451b2fd314dfd53c5db16c54ad1a99359f8..a8a9d0dd611f478aec6b295f2d51f266db8263b2 100644
|
| --- a/skia/ext/analysis_canvas_unittest.cc
|
| +++ b/skia/ext/analysis_canvas_unittest.cc
|
| @@ -454,4 +454,129 @@ TEST(AnalysisCanvasTest, PixelRefsFromPaint) {
|
| }
|
| }
|
|
|
| +TEST(AnalysisCanvasTest, HasText) {
|
| + int width = 200;
|
| + int height = 100;
|
| +
|
| + SkBitmap bitmap;
|
| + bitmap.setConfig(SkBitmap::kNo_Config, width, height);
|
| +
|
| + const char* text = "A";
|
| + size_t byteLength = 1;
|
| +
|
| + SkPoint point = SkPoint::Make(SkIntToScalar(25), SkIntToScalar(25));
|
| + SkPath path;
|
| + path.moveTo(point);
|
| + path.lineTo(SkIntToScalar(75), SkIntToScalar(75));
|
| +
|
| + SkPaint paint;
|
| + paint.setColor(SK_ColorGRAY);
|
| + paint.setTextSize(SkIntToScalar(10));
|
| +
|
| + {
|
| + skia::AnalysisDevice device(bitmap);
|
| + skia::AnalysisCanvas canvas(&device);
|
| + // Test after initialization.
|
| + EXPECT_FALSE(canvas.hasText());
|
| + // Test drawing anything other than text.
|
| + canvas.drawRect(SkRect::MakeWH(width/2, height), paint);
|
| + EXPECT_FALSE(canvas.hasText());
|
| + }
|
| + {
|
| + // Test SkCanvas::drawText.
|
| + skia::AnalysisDevice device(bitmap);
|
| + skia::AnalysisCanvas canvas(&device);
|
| + canvas.drawText(text, byteLength, point.fX, point.fY, paint);
|
| + EXPECT_TRUE(canvas.hasText());
|
| + }
|
| + {
|
| + // Test SkCanvas::drawPosText.
|
| + skia::AnalysisDevice device(bitmap);
|
| + skia::AnalysisCanvas canvas(&device);
|
| + canvas.drawPosText(text, byteLength, &point, paint);
|
| + EXPECT_TRUE(canvas.hasText());
|
| + }
|
| + {
|
| + // Test SkCanvas::drawPosTextH.
|
| + skia::AnalysisDevice device(bitmap);
|
| + skia::AnalysisCanvas canvas(&device);
|
| + canvas.drawPosTextH(text, byteLength, &point.fX, point.fY, paint);
|
| + EXPECT_TRUE(canvas.hasText());
|
| + }
|
| + {
|
| + // Test SkCanvas::drawTextOnPathHV.
|
| + skia::AnalysisDevice device(bitmap);
|
| + skia::AnalysisCanvas canvas(&device);
|
| + canvas.drawTextOnPathHV(text, byteLength, path, point.fX, point.fY, paint);
|
| + EXPECT_TRUE(canvas.hasText());
|
| + }
|
| + {
|
| + // Test SkCanvas::drawTextOnPath.
|
| + skia::AnalysisDevice device(bitmap);
|
| + skia::AnalysisCanvas canvas(&device);
|
| + canvas.drawTextOnPath(text, byteLength, path, NULL, paint);
|
| + EXPECT_TRUE(canvas.hasText());
|
| + }
|
| + {
|
| + // Text under opaque rect.
|
| + skia::AnalysisDevice device(bitmap);
|
| + skia::AnalysisCanvas canvas(&device);
|
| + canvas.drawText(text, byteLength, point.fX, point.fY, paint);
|
| + EXPECT_TRUE(canvas.hasText());
|
| + canvas.drawRect(SkRect::MakeWH(width, height), paint);
|
| + EXPECT_FALSE(canvas.hasText());
|
| + }
|
| + {
|
| + // Text under translucent rect.
|
| + skia::AnalysisDevice device(bitmap);
|
| + skia::AnalysisCanvas canvas(&device);
|
| + canvas.drawText(text, byteLength, point.fX, point.fY, paint);
|
| + EXPECT_TRUE(canvas.hasText());
|
| + SkPaint translucentPaint;
|
| + translucentPaint.setColor(0x88FFFFFF);
|
| + canvas.drawRect(SkRect::MakeWH(width, height), translucentPaint);
|
| + EXPECT_TRUE(canvas.hasText());
|
| + }
|
| + {
|
| + // Text under rect in clear mode.
|
| + skia::AnalysisDevice device(bitmap);
|
| + skia::AnalysisCanvas canvas(&device);
|
| + canvas.drawText(text, byteLength, point.fX, point.fY, paint);
|
| + EXPECT_TRUE(canvas.hasText());
|
| + SkPaint clearModePaint;
|
| + clearModePaint.setXfermodeMode(SkXfermode::kClear_Mode);
|
| + canvas.drawRect(SkRect::MakeWH(width, height), clearModePaint);
|
| + EXPECT_FALSE(canvas.hasText());
|
| + }
|
| + {
|
| + // Clear.
|
| + skia::AnalysisDevice device(bitmap);
|
| + skia::AnalysisCanvas canvas(&device);
|
| + canvas.drawText(text, byteLength, point.fX, point.fY, paint);
|
| + EXPECT_TRUE(canvas.hasText());
|
| + canvas.clear(SK_ColorGRAY);
|
| + EXPECT_FALSE(canvas.hasText());
|
| + }
|
| + {
|
| + // Text inside clip region.
|
| + skia::AnalysisDevice device(bitmap);
|
| + skia::AnalysisCanvas canvas(&device);
|
| + canvas.clipRect(SkRect::MakeWH(100, 100));
|
| + canvas.drawText(text, byteLength, point.fX, point.fY, paint);
|
| + EXPECT_TRUE(canvas.hasText());
|
| + }
|
| + {
|
| + // Text outside clip region.
|
| + skia::AnalysisDevice device(bitmap);
|
| + skia::AnalysisCanvas canvas(&device);
|
| + canvas.clipRect(SkRect::MakeXYWH(100, 0, 100, 100));
|
| + canvas.drawText(text, byteLength, point.fX, point.fY, paint);
|
| + // Analysis device does not do any clipping.
|
| + // So even when text is outside the clip region,
|
| + // it is marked as having the text.
|
| + // TODO(alokp): We may be able to do some trivial rejection.
|
| + EXPECT_TRUE(canvas.hasText());
|
| + }
|
| +}
|
| +
|
| } // namespace skia
|
|
|