| 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
|
|
|