Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(376)

Side by Side Diff: components/wallpaper/wallpaper_color_calculator_unittest.cc

Issue 2679133003: [ash-md] Wired in the Shelf color to be derived from the Wallpaper. (Closed)
Patch Set: Addressed nits. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 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 "components/wallpaper/wallpaper_color_calculator.h"
6
7 #include <memory>
8
9 #include "base/macros.h"
10 #include "base/memory/ptr_util.h"
11 #include "base/test/null_task_runner.h"
12 #include "base/test/test_mock_time_task_runner.h"
13 #include "base/threading/sequenced_task_runner_handle.h"
14 #include "components/wallpaper/wallpaper_color_calculator_observer.h"
15 #include "skia/ext/platform_canvas.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "third_party/skia/include/core/SkBitmap.h"
18 #include "third_party/skia/include/core/SkColor.h"
19 #include "ui/gfx/canvas.h"
20 #include "ui/gfx/color_analysis.h"
21 #include "ui/gfx/geometry/rect.h"
22 #include "ui/gfx/geometry/size.h"
23 #include "ui/gfx/image/image_skia.h"
24
25 namespace wallpaper {
26 namespace {
27
28 const SkColor kDefaultColor = SK_ColorTRANSPARENT;
29
30 class TestWallpaperColorCalculatorObserver
31 : public WallpaperColorCalculatorObserver {
32 public:
33 TestWallpaperColorCalculatorObserver() {}
34
35 ~TestWallpaperColorCalculatorObserver() override {}
36
37 bool WasNotified() const { return notified_; }
38
39 // WallpaperColorCalculatorObserver:
40 void OnColorCalculationComplete() override { notified_ = true; }
41
42 private:
43 bool notified_ = false;
44
45 DISALLOW_COPY_AND_ASSIGN(TestWallpaperColorCalculatorObserver);
46 };
47
48 } // namespace
49
50 class WallPaperColorCalculatorTest : public testing::Test {
51 public:
52 WallPaperColorCalculatorTest();
53 ~WallPaperColorCalculatorTest() override;
54
55 protected:
56 void InstallTaskRunner(scoped_refptr<base::SequencedTaskRunner> task_runner);
57
58 gfx::ImageSkia image_;
59
60 std::unique_ptr<WallpaperColorCalculator> calculator_;
61
62 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
63
64 TestWallpaperColorCalculatorObserver observer_;
65
66 private:
67 // Required by PostTaskAndReplyImpl.
68 std::unique_ptr<base::SequencedTaskRunnerHandle> task_runner_handle_;
69
70 DISALLOW_COPY_AND_ASSIGN(WallPaperColorCalculatorTest);
71 };
72
73 WallPaperColorCalculatorTest::WallPaperColorCalculatorTest()
74 : task_runner_(new base::TestMockTimeTaskRunner()) {
75 // Creates an |image_| that will yield a non-default prominent color.
76 const gfx::Size kImageSize(300, 200);
77 const SkColor kGray = SkColorSetRGB(10, 10, 10);
78 const SkColor kVibrantGreen = SkColorSetRGB(25, 200, 25);
79
80 gfx::Canvas canvas(kImageSize, 1.0f, true);
81 canvas.FillRect(gfx::Rect(kImageSize), kGray);
82 canvas.FillRect(gfx::Rect(0, 1, 300, 1), kVibrantGreen);
83
84 SkBitmap bitmap = skia::ReadPixels(canvas.sk_canvas());
85 image_ = gfx::ImageSkia::CreateFrom1xBitmap(bitmap);
86
87 calculator_ = base::MakeUnique<WallpaperColorCalculator>(
88 image_, color_utils::LumaRange::NORMAL,
89 color_utils::SaturationRange::VIBRANT, nullptr);
90 calculator_->AddObserver(&observer_);
91
92 InstallTaskRunner(task_runner_);
93 }
94
95 WallPaperColorCalculatorTest::~WallPaperColorCalculatorTest() {}
96
97 void WallPaperColorCalculatorTest::InstallTaskRunner(
98 scoped_refptr<base::SequencedTaskRunner> task_runner) {
99 task_runner_handle_.reset();
100 task_runner_handle_ =
101 base::MakeUnique<base::SequencedTaskRunnerHandle>(task_runner);
102 calculator_->SetTaskRunnerForTest(task_runner);
103 }
104
105 TEST_F(WallPaperColorCalculatorTest,
106 StartCalculationReturnsFalseWhenPostingTaskFails) {
107 scoped_refptr<base::NullTaskRunner> task_runner = new base::NullTaskRunner();
108 InstallTaskRunner(task_runner);
109 calculator_->set_prominent_color_for_test(SK_ColorBLACK);
110
111 EXPECT_FALSE(calculator_->StartCalculation());
112 EXPECT_EQ(kDefaultColor, calculator_->prominent_color());
113 }
114
115 TEST_F(WallPaperColorCalculatorTest, ObserverNotifiedOnSuccessfulCalculation) {
116 EXPECT_FALSE(observer_.WasNotified());
117
118 EXPECT_TRUE(calculator_->StartCalculation());
119 EXPECT_FALSE(observer_.WasNotified());
120
121 task_runner_->RunUntilIdle();
122 EXPECT_TRUE(observer_.WasNotified());
123 }
124
125 TEST_F(WallPaperColorCalculatorTest, ColorUpdatedOnSuccessfulCalculation) {
126 calculator_->set_prominent_color_for_test(kDefaultColor);
127
128 EXPECT_TRUE(calculator_->StartCalculation());
129 EXPECT_EQ(kDefaultColor, calculator_->prominent_color());
130
131 task_runner_->RunUntilIdle();
132 EXPECT_NE(kDefaultColor, calculator_->prominent_color());
133 }
134
135 TEST_F(WallPaperColorCalculatorTest,
136 NoCrashWhenCalculatorDestroyedBeforeTaskProcessing) {
137 EXPECT_TRUE(calculator_->StartCalculation());
138 calculator_.reset();
139
140 EXPECT_TRUE(task_runner_->HasPendingTask());
141
142 task_runner_->RunUntilIdle();
143 EXPECT_FALSE(observer_.WasNotified());
144 EXPECT_FALSE(task_runner_->HasPendingTask());
145 }
146
147 } // namespace wallpaper
OLDNEW
« no previous file with comments | « components/wallpaper/wallpaper_color_calculator_observer.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698