Index: skia/ext/analysis_canvas_unittest.cc |
diff --git a/skia/ext/analysis_canvas_unittest.cc b/skia/ext/analysis_canvas_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..17cfcb55c8b4558987cde3cc57323f48b00d052c |
--- /dev/null |
+++ b/skia/ext/analysis_canvas_unittest.cc |
@@ -0,0 +1,313 @@ |
+// Copyright 2013 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 "base/compiler_specific.h" |
+#include "skia/ext/analysis_canvas.h" |
+ |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace { |
+ |
+void solidColorFill(skia::AnalysisCanvas& canvas) { |
+ canvas.clear(SkColorSetARGB(255, 255, 255, 255)); |
+} |
+ |
+void transparentFill(skia::AnalysisCanvas& canvas) { |
+ canvas.clear(SkColorSetARGB(0, 0, 0, 0)); |
+} |
+ |
+} // namespace |
+namespace skia { |
+ |
+TEST(AnalysisCanvasTest, EmptyCanvas) { |
+ SkBitmap emptyBitmap; |
+ emptyBitmap.setConfig(SkBitmap::kNo_Config, 255, 255); |
+ skia::AnalysisDevice device(emptyBitmap); |
+ skia::AnalysisCanvas canvas(&device); |
+ |
+ SkColor color; |
+ EXPECT_FALSE(canvas.getColorIfSolid(&color)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+} |
+ |
+TEST(AnalysisCanvasTest, ClearCanvas) { |
+ SkBitmap emptyBitmap; |
+ emptyBitmap.setConfig(SkBitmap::kNo_Config, 255, 255); |
+ skia::AnalysisDevice device(emptyBitmap); |
+ skia::AnalysisCanvas canvas(&device); |
+ |
+ // Transparent color |
+ SkColor color = SkColorSetARGB(0, 12, 34, 56); |
+ canvas.clear(color); |
+ |
+ SkColor outputColor; |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_TRUE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+ |
+ // Solid color |
+ color = SkColorSetARGB(255, 65, 43, 21); |
+ canvas.clear(color); |
+ |
+ EXPECT_TRUE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+ EXPECT_EQ(outputColor, color); |
+ |
+ // Translucent color |
+ color = SkColorSetARGB(128, 11, 22, 33); |
+ canvas.clear(color); |
+ |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+ |
+ // Test helper methods |
+ solidColorFill(canvas); |
+ EXPECT_TRUE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ |
+ transparentFill(canvas); |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_TRUE(canvas.isTransparent()); |
+} |
+ |
+TEST(AnalysisCanvasTest, ComplexActions) { |
+ SkBitmap emptyBitmap; |
+ emptyBitmap.setConfig(SkBitmap::kNo_Config, 255, 255); |
+ skia::AnalysisDevice device(emptyBitmap); |
+ skia::AnalysisCanvas canvas(&device); |
+ |
+ // Draw paint test. |
+ SkColor color = SkColorSetARGB(255, 11, 22, 33); |
+ SkPaint paint; |
+ paint.setColor(color); |
+ |
+ canvas.drawPaint(paint); |
+ |
+ SkColor outputColor; |
+ //TODO(vmpstr): This should return true. (crbug.com/180597) |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+ |
+ // Draw points test. |
+ SkPoint points[4] = { |
+ SkPoint::Make(0, 0), |
+ SkPoint::Make(255, 0), |
+ SkPoint::Make(255, 255), |
+ SkPoint::Make(0, 255) |
+ }; |
+ |
+ solidColorFill(canvas); |
+ canvas.drawPoints(SkCanvas::kLines_PointMode, 4, points, paint); |
+ |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+ |
+ // Draw oval test. |
+ solidColorFill(canvas); |
+ canvas.drawOval(SkRect::MakeWH(255, 255), paint); |
+ |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+ |
+ // Draw bitmap test. |
+ solidColorFill(canvas); |
+ SkBitmap secondBitmap; |
+ secondBitmap.setConfig(SkBitmap::kNo_Config, 255, 255); |
+ canvas.drawBitmap(secondBitmap, 0, 0); |
+ |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+} |
+ |
+TEST(AnalysisCanvasTest, SimpleDrawRect) { |
+ SkBitmap emptyBitmap; |
+ emptyBitmap.setConfig(SkBitmap::kNo_Config, 255, 255); |
+ skia::AnalysisDevice device(emptyBitmap); |
+ skia::AnalysisCanvas canvas(&device); |
+ |
+ SkColor color = SkColorSetARGB(255, 11, 22, 33); |
+ SkPaint paint; |
+ paint.setColor(color); |
+ canvas.clipRect(SkRect::MakeWH(255, 255)); |
+ canvas.drawRect(SkRect::MakeWH(255, 255), paint); |
+ |
+ SkColor outputColor; |
+ EXPECT_TRUE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+ EXPECT_EQ(color, outputColor); |
+ |
+ color = SkColorSetARGB(255, 22, 33, 44); |
+ paint.setColor(color); |
+ canvas.translate(-128, -128); |
+ canvas.drawRect(SkRect::MakeWH(382, 382), paint); |
+ |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+ |
+ color = SkColorSetARGB(255, 33, 44, 55); |
+ paint.setColor(color); |
+ canvas.drawRect(SkRect::MakeWH(383, 383), paint); |
+ |
+ EXPECT_TRUE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+ EXPECT_EQ(color, outputColor); |
+ |
+ color = SkColorSetARGB(0, 0, 0, 0); |
+ paint.setColor(color); |
+ canvas.drawRect(SkRect::MakeWH(383, 383), paint); |
+ |
+ EXPECT_TRUE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+ EXPECT_EQ(outputColor, SkColorSetARGB(255, 33, 44, 55)); |
+ |
+ color = SkColorSetARGB(128, 128, 128, 128); |
+ paint.setColor(color); |
+ canvas.drawRect(SkRect::MakeWH(383, 383), paint); |
+ |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+ |
+ paint.setXfermodeMode(SkXfermode::kClear_Mode); |
+ canvas.drawRect(SkRect::MakeWH(382, 382), paint); |
+ |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+ |
+ canvas.drawRect(SkRect::MakeWH(383, 383), paint); |
+ |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_TRUE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+ |
+ canvas.translate(128, 128); |
+ color = SkColorSetARGB(255, 11, 22, 33); |
+ paint.setColor(color); |
+ paint.setXfermodeMode(SkXfermode::kSrcOver_Mode); |
+ canvas.drawRect(SkRect::MakeWH(255, 255), paint); |
+ |
+ EXPECT_TRUE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+ EXPECT_EQ(color, outputColor); |
+ |
+ canvas.rotate(50); |
+ canvas.drawRect(SkRect::MakeWH(255, 255), paint); |
+ |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ EXPECT_TRUE(canvas.isCheap()); |
+} |
+ |
+TEST(AnalysisCanvasTest, ClipPath) { |
+ SkBitmap emptyBitmap; |
+ emptyBitmap.setConfig(SkBitmap::kNo_Config, 255, 255); |
+ skia::AnalysisDevice device(emptyBitmap); |
+ skia::AnalysisCanvas canvas(&device); |
+ |
+ SkPath path; |
+ path.moveTo(0, 0); |
+ path.lineTo(255, 0); |
+ path.lineTo(255, 255); |
+ path.lineTo(0, 255); |
+ |
+ SkColor outputColor; |
+ solidColorFill(canvas); |
+ canvas.clipPath(path); |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ |
+ canvas.save(); |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ |
+ canvas.clipPath(path); |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ |
+ canvas.restore(); |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ |
+ solidColorFill(canvas); |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+} |
+ |
+TEST(AnalysisCanvasTest, SaveLayerRestore) { |
+ SkBitmap emptyBitmap; |
+ emptyBitmap.setConfig(SkBitmap::kNo_Config, 255, 255); |
+ skia::AnalysisDevice device(emptyBitmap); |
+ skia::AnalysisCanvas canvas(&device); |
+ |
+ SkColor outputColor; |
+ solidColorFill(canvas); |
+ EXPECT_TRUE(canvas.getColorIfSolid(&outputColor)); |
+ |
+ SkRect bounds = SkRect::MakeWH(255, 255); |
+ SkPaint paint; |
+ paint.setColor(SkColorSetARGB(255, 255, 255, 255)); |
+ paint.setXfermodeMode(SkXfermode::kSrcOver_Mode); |
+ |
+ // This should force non-transparency |
+ canvas.saveLayer(&bounds, &paint, SkCanvas::kMatrix_SaveFlag); |
+ EXPECT_TRUE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ |
+ transparentFill(canvas); |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ |
+ solidColorFill(canvas); |
+ EXPECT_TRUE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ |
+ paint.setXfermodeMode(SkXfermode::kDst_Mode); |
+ |
+ // This should force non-solid color |
+ canvas.saveLayer(&bounds, &paint, SkCanvas::kMatrix_SaveFlag); |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ |
+ transparentFill(canvas); |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ |
+ solidColorFill(canvas); |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ |
+ canvas.restore(); |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ |
+ transparentFill(canvas); |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ |
+ solidColorFill(canvas); |
+ EXPECT_TRUE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ |
+ canvas.restore(); |
+ EXPECT_TRUE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+ |
+ transparentFill(canvas); |
+ EXPECT_FALSE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_TRUE(canvas.isTransparent()); |
+ |
+ solidColorFill(canvas); |
+ EXPECT_TRUE(canvas.getColorIfSolid(&outputColor)); |
+ EXPECT_FALSE(canvas.isTransparent()); |
+} |
+ |
+} // namespace skia |