blob: f8086abafda35fc45be6625ae1b5a0e067049133 [file] [log] [blame]
// Copyright 2019 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 "ui/native_theme/native_theme_win.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/color_palette.h"
namespace ui {
using ColorScheme = NativeTheme::ColorScheme;
using PrefScheme = NativeTheme::PreferredColorScheme;
using SystemThemeColor = NativeTheme::SystemThemeColor;
using ColorId = NativeTheme::ColorId;
class TestNativeThemeWin : public NativeThemeWin {
public:
TestNativeThemeWin() {}
~TestNativeThemeWin() override {}
// NativeTheme:
bool UsesHighContrastColors() const override { return high_contrast_; }
bool ShouldUseDarkColors() const override { return dark_mode_; }
void SetDarkMode(bool dark_mode) { dark_mode_ = dark_mode; }
void SetUsesHighContrastColors(bool high_contrast) {
high_contrast_ = high_contrast;
}
void SetSystemColor(SystemThemeColor system_color, SkColor color) {
system_colors_[system_color] = color;
}
private:
bool dark_mode_ = false;
bool high_contrast_ = false;
DISALLOW_COPY_AND_ASSIGN(TestNativeThemeWin);
};
TEST(NativeThemeWinTest, CalculatePreferredColorScheme) {
TestNativeThemeWin theme;
theme.SetUsesHighContrastColors(false);
theme.SetDarkMode(true);
ASSERT_EQ(theme.CalculatePreferredColorScheme(), PrefScheme::kDark);
theme.SetDarkMode(false);
ASSERT_EQ(theme.CalculatePreferredColorScheme(), PrefScheme::kLight);
theme.SetUsesHighContrastColors(true);
theme.SetSystemColor(SystemThemeColor::kWindow, SK_ColorBLACK);
theme.SetSystemColor(SystemThemeColor::kWindowText, SK_ColorWHITE);
ASSERT_EQ(theme.CalculatePreferredColorScheme(), PrefScheme::kDark);
theme.SetSystemColor(SystemThemeColor::kWindow, SK_ColorWHITE);
theme.SetSystemColor(SystemThemeColor::kWindowText, SK_ColorBLACK);
ASSERT_EQ(theme.CalculatePreferredColorScheme(), PrefScheme::kLight);
theme.SetSystemColor(SystemThemeColor::kWindowText, SK_ColorBLUE);
ASSERT_EQ(theme.CalculatePreferredColorScheme(), PrefScheme::kNoPreference);
theme.SetUsesHighContrastColors(false);
ASSERT_EQ(theme.CalculatePreferredColorScheme(), PrefScheme::kLight);
}
TEST(NativeThemeWinTest, GetDefaultSystemColorScheme) {
TestNativeThemeWin theme;
theme.SetUsesHighContrastColors(false);
theme.SetDarkMode(true);
ASSERT_EQ(theme.GetDefaultSystemColorScheme(), ColorScheme::kDark);
theme.SetDarkMode(false);
ASSERT_EQ(theme.GetDefaultSystemColorScheme(), ColorScheme::kLight);
theme.SetUsesHighContrastColors(true);
theme.SetSystemColor(SystemThemeColor::kWindow, SK_ColorBLACK);
theme.SetSystemColor(SystemThemeColor::kWindowText, SK_ColorWHITE);
ASSERT_EQ(theme.GetDefaultSystemColorScheme(),
ColorScheme::kPlatformHighContrast);
theme.SetSystemColor(SystemThemeColor::kWindow, SK_ColorWHITE);
theme.SetSystemColor(SystemThemeColor::kWindowText, SK_ColorBLACK);
ASSERT_EQ(theme.GetDefaultSystemColorScheme(),
ColorScheme::kPlatformHighContrast);
theme.SetSystemColor(SystemThemeColor::kWindowText, SK_ColorBLUE);
ASSERT_EQ(theme.GetDefaultSystemColorScheme(),
ColorScheme::kPlatformHighContrast);
theme.SetUsesHighContrastColors(false);
ASSERT_EQ(theme.GetDefaultSystemColorScheme(), ColorScheme::kLight);
}
TEST(NativeThemeWinTest, GetPlatformHighContrastColor) {
TestNativeThemeWin theme;
// These specific colors don't matter, but should be unique.
constexpr SkColor kWindowTextColor = SK_ColorGREEN;
constexpr SkColor kHighlightColor = SK_ColorYELLOW;
constexpr SkColor kHighlightTextColor = SK_ColorBLUE;
theme.SetSystemColor(SystemThemeColor::kWindowText, kWindowTextColor);
theme.SetSystemColor(SystemThemeColor::kHighlight, kHighlightColor);
theme.SetSystemColor(SystemThemeColor::kHighlightText, kHighlightTextColor);
// Test that we get regular colors when HC is off.
theme.SetUsesHighContrastColors(false);
ASSERT_NE(theme.GetSystemColor(ColorId::kColorId_LabelEnabledColor),
kWindowTextColor);
ASSERT_NE(theme.GetSystemColor(ColorId::kColorId_ProminentButtonColor),
kHighlightColor);
ASSERT_NE(theme.GetSystemColor(ColorId::kColorId_TextOnProminentButtonColor),
kHighlightTextColor);
// Test that we get HC colors when HC is on.
theme.SetUsesHighContrastColors(true);
ASSERT_EQ(theme.GetSystemColor(ColorId::kColorId_LabelEnabledColor),
kWindowTextColor);
ASSERT_EQ(theme.GetSystemColor(ColorId::kColorId_ProminentButtonColor),
kHighlightColor);
ASSERT_EQ(theme.GetSystemColor(ColorId::kColorId_TextOnProminentButtonColor),
kHighlightTextColor);
}
} // namespace ui