aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/GradientTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/GradientTest.cpp')
-rw-r--r--tests/GradientTest.cpp63
1 files changed, 61 insertions, 2 deletions
diff --git a/tests/GradientTest.cpp b/tests/GradientTest.cpp
index 50643f1fe2..dc8a2bd6a5 100644
--- a/tests/GradientTest.cpp
+++ b/tests/GradientTest.cpp
@@ -9,9 +9,11 @@
#include "SkColorPriv.h"
#include "SkColorShader.h"
#include "SkGradientShader.h"
+#include "SkLinearGradient.h"
#include "SkShader.h"
#include "SkSurface.h"
#include "SkTemplates.h"
+#include "SkTLazy.h"
#include "Test.h"
// https://code.google.com/p/chromium/issues/detail?id=448299
@@ -350,7 +352,7 @@ static void test_clamping_overflow(skiatest::Reporter*) {
}
// http://crbug.com/636194
-static void text_degenerate_linear(skiatest::Reporter*) {
+static void test_degenerate_linear(skiatest::Reporter*) {
SkPaint p;
const SkColor colors[] = { SK_ColorRED, SK_ColorGREEN };
const SkPoint pts[] = {
@@ -365,6 +367,62 @@ static void text_degenerate_linear(skiatest::Reporter*) {
// Passes if we don't trigger asserts.
}
+// "Interesting" fuzzer values.
+static void test_linear_fuzzer(skiatest::Reporter*) {
+ static const SkColor gColors0[] = { 0x30303030, 0x30303030 };
+ static const SkScalar gMatrix0[9] =
+ { 6.40969056e-10f, 0, 6.40969056e-10f, 0, 4.42539023e-39f, 6.40969056e-10f, 0, 0, 1 };
+
+ static const struct {
+ SkPoint fPts[2];
+ const SkColor* fColors;
+ const SkScalar* fPos;
+ int fCount;
+ SkShader::TileMode fTileMode;
+ uint32_t fFlags;
+ const SkScalar* fLocalMatrix;
+ const SkScalar* fGlobalMatrix;
+ } gConfigs[] = {
+ {
+ {{0, -2.752941f}, {0, 0}},
+ gColors0,
+ nullptr,
+ SK_ARRAY_COUNT(gColors0),
+ SkShader::kClamp_TileMode,
+ 0,
+ gMatrix0,
+ nullptr
+ },
+ };
+
+ static const uint32_t gForceFlags[] = { 0, SkLinearGradient::kForce4fContext_PrivateFlag };
+
+ sk_sp<SkSurface> surface = SkSurface::MakeRasterN32Premul(100, 100);
+ SkCanvas* canvas = surface->getCanvas();
+ SkPaint paint;
+
+ for (auto forceFlags : gForceFlags) {
+ for (const auto& config : gConfigs) {
+ SkAutoCanvasRestore acr(canvas, false);
+ SkTLazy<SkMatrix> localMatrix;
+ if (config.fLocalMatrix) {
+ localMatrix.init();
+ localMatrix.get()->set9(config.fLocalMatrix);
+ }
+
+ paint.setShader(SkGradientShader::MakeLinear(config.fPts,
+ config.fColors,
+ config.fPos,
+ config.fCount,
+ config.fTileMode,
+ config.fFlags | forceFlags,
+ localMatrix.getMaybeNull()));
+ canvas->drawPaint(paint);
+ }
+ }
+}
+
+
DEF_TEST(Gradient, reporter) {
TestGradientShaders(reporter);
TestGradientOptimization(reporter);
@@ -375,5 +433,6 @@ DEF_TEST(Gradient, reporter) {
test_linear_fuzz(reporter);
test_two_point_conical_zero_radius(reporter);
test_clamping_overflow(reporter);
- text_degenerate_linear(reporter);
+ test_degenerate_linear(reporter);
+ test_linear_fuzzer(reporter);
}