Home | History | Annotate | Download | only in tests
      1 /*
      2  * Copyright 2017 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "SkBitmap.h"
      9 #include "SkCanvas.h"
     10 #include "SkHighContrastFilter.h"
     11 #include "Test.h"
     12 
     13 DEF_TEST(HighContrastFilter_FilterImage, reporter) {
     14     SkHighContrastConfig config;
     15     config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertLightness;
     16 
     17     int w = 10, h = 10;
     18     SkBitmap filterResult, paintResult;
     19 
     20     filterResult.allocN32Pixels(w, h);
     21     SkCanvas canvasFilter(filterResult);
     22     canvasFilter.clear(0x00000000);
     23 
     24     paintResult.allocN32Pixels(w, h);
     25     SkCanvas canvasPaint(paintResult);
     26     canvasPaint.clear(0x00000000);
     27 
     28     SkPaint paint;
     29     paint.setColor(SK_ColorBLUE);
     30     SkRect r = SkRect::MakeLTRB(SkIntToScalar(2), SkIntToScalar(2),
     31                                 SkIntToScalar(8), SkIntToScalar(8));
     32     canvasPaint.drawRect(r, paint);
     33 
     34     paint.setColorFilter(SkHighContrastFilter::Make(config));
     35     canvasFilter.drawRect(r, paint);
     36 
     37     for (int y = r.top(); y < r.bottom(); ++y) {
     38         for (int x = r.left(); x < r.right(); ++x) {
     39             SkColor paintColor = paintResult.getColor(x, y);
     40             SkColor filterColor = filterResult.getColor(x, y);
     41             REPORTER_ASSERT(
     42                 reporter, filterColor ==
     43                 paint.getColorFilter()->filterColor(paintColor));
     44         }
     45     }
     46 }
     47 
     48 DEF_TEST(HighContrastFilter_SanityCheck, reporter) {
     49     SkHighContrastConfig config;
     50     config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertLightness;
     51     sk_sp<SkColorFilter> filter = SkHighContrastFilter::Make(config);
     52 
     53     SkColor white_inverted = filter->filterColor(SK_ColorWHITE);
     54     REPORTER_ASSERT(reporter, white_inverted == SK_ColorBLACK);
     55 
     56     SkColor black_inverted = filter->filterColor(SK_ColorBLACK);
     57     REPORTER_ASSERT(reporter, black_inverted == SK_ColorWHITE);
     58 }
     59 
     60 DEF_TEST(HighContrastFilter_InvalidInputs, reporter) {
     61     SkHighContrastConfig config;
     62     REPORTER_ASSERT(reporter, config.isValid());
     63 
     64     // Valid invert style
     65     config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertBrightness;
     66     REPORTER_ASSERT(reporter, config.isValid());
     67     config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertLightness;
     68     REPORTER_ASSERT(reporter, config.isValid());
     69     sk_sp<SkColorFilter> filter = SkHighContrastFilter::Make(config);
     70     REPORTER_ASSERT(reporter, filter);
     71 
     72     // Invalid invert style
     73     config.fInvertStyle = static_cast<SkHighContrastConfig::InvertStyle>(999);
     74     REPORTER_ASSERT(reporter, !config.isValid());
     75     filter = SkHighContrastFilter::Make(config);
     76     REPORTER_ASSERT(reporter, !filter);
     77 
     78     // Valid contrast
     79     config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertBrightness;
     80     config.fContrast = 0.5f;
     81     REPORTER_ASSERT(reporter, config.isValid());
     82     filter = SkHighContrastFilter::Make(config);
     83     REPORTER_ASSERT(reporter, filter);
     84 
     85     // Invalid contrast
     86     config.fContrast = 1.1f;
     87     REPORTER_ASSERT(reporter, !config.isValid());
     88     filter = SkHighContrastFilter::Make(config);
     89     REPORTER_ASSERT(reporter, !filter);
     90 }
     91