1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "third_party/blink/renderer/platform/graphics/dark_mode_color_classifier.h"
6 
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "third_party/blink/renderer/platform/graphics/color.h"
9 #include "third_party/blink/renderer/platform/graphics/dark_mode_settings.h"
10 #include "third_party/blink/renderer/platform/graphics/graphics_types.h"
11 #include "third_party/skia/include/core/SkColor.h"
12 
13 namespace blink {
14 namespace {
15 
GetColorWithBrightness(int target_brightness)16 Color GetColorWithBrightness(int target_brightness) {
17   CHECK_GE(target_brightness, 0);
18   CHECK_LE(target_brightness, 256);
19 
20   return Color(target_brightness, target_brightness, target_brightness);
21 }
22 
TEST(DarkModeColorClassifierTest,ApplyFilterToDarkTextOnly)23 TEST(DarkModeColorClassifierTest, ApplyFilterToDarkTextOnly) {
24   DarkModeSettings settings;
25   settings.mode = DarkModeInversionAlgorithm::kSimpleInvertForTesting;
26   settings.text_brightness_threshold = 200;
27   auto classifier = DarkModeColorClassifier::MakeTextColorClassifier(settings);
28 
29   // Verify that the following are inverted:
30   //   * black text
31   //   * text darker than the text brightness threshold
32   // and the following are not inverted:
33   //   * white text
34   //   * text brighter than the text brightness threshold
35   //   * text at the brightness threshold
36   EXPECT_EQ(DarkModeClassification::kApplyFilter,
37             classifier->ShouldInvertColor(GetColorWithBrightness(
38                 settings.text_brightness_threshold - 5)));
39   EXPECT_EQ(DarkModeClassification::kApplyFilter,
40             classifier->ShouldInvertColor(Color::kBlack));
41 
42   EXPECT_EQ(DarkModeClassification::kDoNotApplyFilter,
43             classifier->ShouldInvertColor(Color::kWhite));
44   EXPECT_EQ(DarkModeClassification::kDoNotApplyFilter,
45             classifier->ShouldInvertColor(GetColorWithBrightness(
46                 settings.text_brightness_threshold + 5)));
47   EXPECT_EQ(DarkModeClassification::kDoNotApplyFilter,
48             classifier->ShouldInvertColor(
49                 GetColorWithBrightness(settings.text_brightness_threshold)));
50 }
51 
TEST(DarkModeColorClassifierTest,ApplyFilterToLightBackgroundElementsOnly)52 TEST(DarkModeColorClassifierTest, ApplyFilterToLightBackgroundElementsOnly) {
53   DarkModeSettings settings;
54   settings.mode = DarkModeInversionAlgorithm::kSimpleInvertForTesting;
55   settings.background_brightness_threshold = 200;
56   auto classifier =
57       DarkModeColorClassifier::MakeBackgroundColorClassifier(settings);
58 
59   EXPECT_EQ(DarkModeClassification::kApplyFilter,
60             classifier->ShouldInvertColor(Color::kWhite));
61   EXPECT_EQ(DarkModeClassification::kDoNotApplyFilter,
62             classifier->ShouldInvertColor(Color::kBlack));
63 
64   EXPECT_EQ(DarkModeClassification::kApplyFilter,
65             classifier->ShouldInvertColor(GetColorWithBrightness(
66                 settings.background_brightness_threshold + 5)));
67   EXPECT_EQ(DarkModeClassification::kDoNotApplyFilter,
68             classifier->ShouldInvertColor(GetColorWithBrightness(
69                 settings.background_brightness_threshold)));
70   EXPECT_EQ(DarkModeClassification::kDoNotApplyFilter,
71             classifier->ShouldInvertColor(GetColorWithBrightness(
72                 settings.background_brightness_threshold - 5)));
73 }
74 
75 }  // namespace
76 }  // namespace blink
77