| Index: ui/views/controls/button/label_button_label_unittest.cc
|
| diff --git a/ui/views/controls/button/label_button_label_unittest.cc b/ui/views/controls/button/label_button_label_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..863623f8383e168683aa3ec045919dee188c6f67
|
| --- /dev/null
|
| +++ b/ui/views/controls/button/label_button_label_unittest.cc
|
| @@ -0,0 +1,146 @@
|
| +// Copyright 2017 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/views/controls/button/label_button_label.h"
|
| +
|
| +#include <memory>
|
| +
|
| +#include "third_party/skia/include/core/SkColor.h"
|
| +#include "ui/native_theme/native_theme_base.h"
|
| +#include "ui/views/test/views_test_base.h"
|
| +
|
| +namespace views {
|
| +namespace {
|
| +
|
| +// Basic NativeTheme that can customize colors.
|
| +class TestNativeTheme : public ui::NativeThemeBase {
|
| + public:
|
| + TestNativeTheme() {}
|
| +
|
| + void Set(ColorId id, SkColor color) { colors_[id] = color; }
|
| +
|
| + // NativeThemeBase:
|
| + SkColor GetSystemColor(ColorId color_id) const override {
|
| + return colors_.count(color_id) ? colors_.find(color_id)->second
|
| + : SK_ColorMAGENTA;
|
| + }
|
| +
|
| + private:
|
| + std::map<ColorId, SkColor> colors_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestNativeTheme);
|
| +};
|
| +
|
| +// LabelButtonLabel subclass that reports its text color whenever a paint is
|
| +// scheduled.
|
| +class TestLabel : public LabelButtonLabel {
|
| + public:
|
| + explicit TestLabel(SkColor* last_color)
|
| + : LabelButtonLabel(base::string16(), views::style::CONTEXT_BUTTON),
|
| + last_color_(last_color) {}
|
| +
|
| + // LabelButtonLabel:
|
| + void SchedulePaintInRect(const gfx::Rect& r) override {
|
| + LabelButtonLabel::SchedulePaintInRect(r);
|
| + *last_color_ = enabled_color();
|
| + }
|
| +
|
| + private:
|
| + SkColor* last_color_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestLabel);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +class LabelButtonLabelTest : public ViewsTestBase {
|
| + public:
|
| + LabelButtonLabelTest() {}
|
| +
|
| + void SetUp() override {
|
| + ViewsTestBase::SetUp();
|
| + label_ = base::MakeUnique<TestLabel>(&last_color_);
|
| + }
|
| +
|
| + protected:
|
| + SkColor last_color_ = SK_ColorCYAN;
|
| + std::unique_ptr<TestLabel> label_;
|
| + TestNativeTheme theme1_;
|
| + TestNativeTheme theme2_;
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(LabelButtonLabelTest);
|
| +};
|
| +
|
| +// Test that LabelButtonLabel reacts properly to themed and overridden colors.
|
| +TEST_F(LabelButtonLabelTest, Colors) {
|
| + // The SchedulePaintInRect override won't be called while the base class is
|
| + // initialized. Not much we can do about that, so give it the first for free.
|
| + EXPECT_EQ(SK_ColorCYAN, last_color_); // Sanity check.
|
| +
|
| + // At the same time we can check that changing the auto color readability
|
| + // schedules a paint. Currently it does. Although it technically doesn't need
|
| + // to since the color isn't actually changing.
|
| + label_->SetAutoColorReadabilityEnabled(false);
|
| +
|
| + // First one comes from the default theme. This check ensures the SK_ColorRED
|
| + // placeholder initializers were replaced.
|
| + SkColor default_theme_enabled_color =
|
| + label_->GetNativeTheme()->GetSystemColor(
|
| + ui::NativeTheme::kColorId_LabelEnabledColor);
|
| + EXPECT_EQ(default_theme_enabled_color, last_color_);
|
| +
|
| + // Note these are not kColorId_Button{Enabled,Disabled}Color because "Button
|
| + // colors are used only for STYLE_BUTTON, otherwise we use label colors." See
|
| + // LabelButton::ResetColorsFromNativeTheme().
|
| + theme1_.Set(ui::NativeTheme::kColorId_LabelEnabledColor, SK_ColorGREEN);
|
| + theme1_.Set(ui::NativeTheme::kColorId_LabelDisabledColor, SK_ColorYELLOW);
|
| + label_->SetNativeTheme(&theme1_);
|
| +
|
| + // Setting the theme should paint.
|
| + EXPECT_EQ(SK_ColorGREEN, last_color_);
|
| +
|
| + label_->SetEnabled(false);
|
| + EXPECT_EQ(SK_ColorYELLOW, last_color_);
|
| +
|
| + // Set up a second theme. View::SetNativeTheme() makes the reasonable
|
| + // assumption that NativeTheme doesn't change its mind about things unless a
|
| + // Widget triggers it (which it can do as a friend of RootView).
|
| + theme2_.Set(ui::NativeTheme::kColorId_LabelEnabledColor, SK_ColorBLUE);
|
| + theme2_.Set(ui::NativeTheme::kColorId_LabelDisabledColor, SK_ColorGRAY);
|
| + label_->SetNativeTheme(&theme2_);
|
| +
|
| + EXPECT_EQ(SK_ColorGRAY, last_color_);
|
| +
|
| + label_->SetEnabled(true);
|
| + EXPECT_EQ(SK_ColorBLUE, last_color_);
|
| +
|
| + // Override the theme for the disabled color.
|
| + label_->SetDisabledColor(SK_ColorRED);
|
| +
|
| + // Still enabled, so not RED yet.
|
| + EXPECT_EQ(SK_ColorBLUE, last_color_);
|
| +
|
| + label_->SetEnabled(false);
|
| + EXPECT_EQ(SK_ColorRED, last_color_);
|
| +
|
| + label_->SetDisabledColor(SK_ColorMAGENTA);
|
| + EXPECT_EQ(SK_ColorMAGENTA, last_color_);
|
| +
|
| + // Disabled still overridden after a theme change.
|
| + label_->SetNativeTheme(&theme1_);
|
| + EXPECT_EQ(SK_ColorMAGENTA, last_color_);
|
| +
|
| + // The enabled color still gets its value from the theme.
|
| + label_->SetEnabled(true);
|
| + EXPECT_EQ(SK_ColorGREEN, last_color_);
|
| +
|
| + label_->SetEnabledColor(SK_ColorYELLOW);
|
| + label_->SetDisabledColor(SK_ColorCYAN);
|
| + EXPECT_EQ(SK_ColorYELLOW, last_color_);
|
| + label_->SetEnabled(false);
|
| + EXPECT_EQ(SK_ColorCYAN, last_color_);
|
| +}
|
| +
|
| +} // namespace views
|
|
|