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

Unified Diff: skia/ext/analysis_canvas_unittest.cc

Issue 12316084: cc: Consolidate the analysis_canvas operations (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: win warning fix Created 7 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « skia/ext/analysis_canvas.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « skia/ext/analysis_canvas.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698