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

Side by Side Diff: ash/common/shelf/shelf_background_animator_unittest.cc

Issue 2053113002: Replaced BackgroundAnimator with ShelfBackgroundAnimator. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added PaletteTray to the Shelf background animations. Created 4 years, 4 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 2016 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 "ash/common/shelf/shelf_background_animator.h"
6
7 #include <memory>
8
9 #include "ash/common/shelf/shelf_background_animator_observer.h"
10 #include "ash/common/shelf/shelf_constants.h"
11 #include "ash/common/test/material_design_controller_test_api.h"
12 #include "base/bind.h"
13 #include "base/macros.h"
14 #include "base/test/test_mock_time_task_runner.h"
15 #include "base/threading/thread_task_runner_handle.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17
18 namespace ash {
19 namespace test {
James Cook 2016/07/27 00:30:39 nit: tests themselves don't go in the test namespa
bruthig 2016/07/27 17:05:45 Is it ok to scope the ShelfBackgroundAnimatorTestA
20
21 using test::MaterialDesignControllerTestAPI;
22
23 namespace {
24
25 const int kMaxAlpha = 255;
26
27 const int kInvalidAlpha = 9999;
28
29 // Observer that caches alpha values for the last observation.
30 class TestShelfBackgroundObserver : public ShelfBackgroundAnimatorObserver {
31 public:
32 TestShelfBackgroundObserver() {}
33 ~TestShelfBackgroundObserver() override {}
34
35 int opaque_background_alpha() const { return opaque_background_alpha_; }
36
37 int item_background_alpha() const { return item_background_alpha_; }
38
39 int asset_background_alpha() const { return asset_background_alpha_; }
40
41 // ShelfBackgroundObserver:
42 void UpdateShelfOpaqueBackground(int alpha) override;
43 void UpdateShelfAssetBackground(int alpha) override;
44 void UpdateShelfItemBackground(int alpha) override;
45
46 private:
47 int opaque_background_alpha_ = 0;
48 int item_background_alpha_ = 0;
49 int asset_background_alpha_ = 0;
50
51 DISALLOW_COPY_AND_ASSIGN(TestShelfBackgroundObserver);
52 };
53
54 void TestShelfBackgroundObserver::UpdateShelfOpaqueBackground(int alpha) {
55 opaque_background_alpha_ = alpha;
56 }
57
58 void TestShelfBackgroundObserver::UpdateShelfAssetBackground(int alpha) {
59 asset_background_alpha_ = alpha;
60 }
61
62 void TestShelfBackgroundObserver::UpdateShelfItemBackground(int alpha) {
63 item_background_alpha_ = alpha;
64 }
65
66 } // namespace
67
68 // Provides internal access to a ShelfBackgroundAnimator instance.
69 class ShelfBackgroundAnimatorTestApi {
70 public:
71 explicit ShelfBackgroundAnimatorTestApi(ShelfBackgroundAnimator* animator)
72 : animator_(animator) {}
73
74 ~ShelfBackgroundAnimatorTestApi() {}
75
76 ShelfBackgroundType previous_background_type() const {
77 return animator_->previous_background_type_;
78 }
79
80 BackgroundAnimator* opaque_background_animator() const {
81 return animator_->opaque_background_animator_.get();
82 }
83
84 BackgroundAnimator* asset_background_animator() const {
85 return animator_->asset_background_animator_.get();
86 }
87
88 BackgroundAnimator* item_background_animator() const {
89 return animator_->item_background_animator_.get();
90 }
91
92 bool can_reuse_animators() const { return animator_->can_reuse_animators_; }
93
94 private:
95 // The instance to provide internal access to.
96 ShelfBackgroundAnimator* animator_;
97
98 DISALLOW_COPY_AND_ASSIGN(ShelfBackgroundAnimatorTestApi);
99 };
100
101 class ShelfBackgroundAnimatorTestBase : public testing::Test {
James Cook 2016/07/27 00:30:38 nit: You might comment that this isn't a parameter
bruthig 2016/07/27 17:05:44 Done.
102 public:
103 ShelfBackgroundAnimatorTestBase() {}
104 ~ShelfBackgroundAnimatorTestBase() override {}
105
106 virtual MaterialDesignController::Mode GetMaterialDesignMode() = 0;
107
108 int expected_translucent_alpha() const { return expected_translucent_alpha_; }
109
110 // testing::Test:
111 void SetUp() override;
112
113 protected:
114 // Convenience wrapper for |animator_|'s PaintBackground() that always uses
115 // BACKGROUND_CHANGE_IMMEDIATE.
116 void PaintBackground(ShelfBackgroundType background_type);
117
118 // Set all of the alpha values for the |observer_|.
119 void SetAlphaValuesOnObserver(int alpha);
120
121 // Completes all the animations.
122 void CompleteAnimations();
123
124 TestShelfBackgroundObserver observer_;
125
126 // Test target.
127 std::unique_ptr<ShelfBackgroundAnimator> animator_;
128
129 // Provides internal access to |animator_|.
130 std::unique_ptr<ShelfBackgroundAnimatorTestApi> test_api_;
131
132 // Used to control the animations.
133 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
134
135 private:
136 std::unique_ptr<base::ThreadTaskRunnerHandle> task_runner_handle_;
137
138 std::unique_ptr<MaterialDesignControllerTestAPI> material_mode_test_api_;
139
140 // The expected alpha value for translucent items. Cannot be a constant
141 // because it is different for material design and non-material.
142 int expected_translucent_alpha_ = 0;
143
144 DISALLOW_COPY_AND_ASSIGN(ShelfBackgroundAnimatorTestBase);
145 };
146
147 void ShelfBackgroundAnimatorTestBase::SetUp() {
148 task_runner_ = new base::TestMockTimeTaskRunner();
149 task_runner_handle_.reset(new base::ThreadTaskRunnerHandle(task_runner_));
150
151 material_mode_test_api_.reset(
152 new MaterialDesignControllerTestAPI(GetMaterialDesignMode()));
153 animator_.reset(new ShelfBackgroundAnimator(SHELF_BACKGROUND_DEFAULT));
154 animator_->AddObserver(&observer_);
155
156 test_api_.reset(new ShelfBackgroundAnimatorTestApi(animator_.get()));
157
158 // Initialized after the Material Design mode because GetShelfConstant()
159 // depends on the mode.
160 expected_translucent_alpha_ = GetShelfConstant(SHELF_BACKGROUND_ALPHA);
161 }
162
163 void ShelfBackgroundAnimatorTestBase::PaintBackground(
164 ShelfBackgroundType background_type) {
165 animator_->PaintBackground(background_type, BACKGROUND_CHANGE_IMMEDIATE);
166 }
167
168 void ShelfBackgroundAnimatorTestBase::SetAlphaValuesOnObserver(int alpha) {
169 observer_.UpdateShelfOpaqueBackground(alpha);
170 observer_.UpdateShelfAssetBackground(alpha);
171 observer_.UpdateShelfItemBackground(alpha);
172 }
173
174 void ShelfBackgroundAnimatorTestBase::CompleteAnimations() {
175 task_runner_->FastForwardUntilNoTasksRemain();
176 }
177
178 class ShelfBackgroundAnimatorNonMDTest
179 : public ShelfBackgroundAnimatorTestBase {
180 public:
181 ShelfBackgroundAnimatorNonMDTest() {}
182 ~ShelfBackgroundAnimatorNonMDTest() override {}
183
184 MaterialDesignController::Mode GetMaterialDesignMode() override {
185 return MaterialDesignController::NON_MATERIAL;
186 }
187
188 private:
189 DISALLOW_COPY_AND_ASSIGN(ShelfBackgroundAnimatorNonMDTest);
190 };
191
192 // Verify the alpha values for the SHELF_BACKGROUND_DEFAULT state.
193 TEST_F(ShelfBackgroundAnimatorNonMDTest, DefaultBackground) {
194 PaintBackground(SHELF_BACKGROUND_DEFAULT);
195
196 EXPECT_EQ(SHELF_BACKGROUND_DEFAULT, animator_->target_background_type());
197 EXPECT_EQ(0, observer_.opaque_background_alpha());
198 EXPECT_EQ(0, observer_.asset_background_alpha());
199 EXPECT_EQ(expected_translucent_alpha(), observer_.item_background_alpha());
200 }
201
202 // Verify the alpha values for the SHELF_BACKGROUND_OVERLAP state.
203 TEST_F(ShelfBackgroundAnimatorNonMDTest, OverlapBackground) {
204 PaintBackground(SHELF_BACKGROUND_OVERLAP);
205
206 EXPECT_EQ(SHELF_BACKGROUND_OVERLAP, animator_->target_background_type());
207 EXPECT_EQ(0, observer_.opaque_background_alpha());
208 EXPECT_EQ(expected_translucent_alpha(), observer_.asset_background_alpha());
209 EXPECT_EQ(expected_translucent_alpha(), observer_.item_background_alpha());
210 }
211
212 // Verify the alpha values for the SHELF_BACKGROUND_MAXIMIZED state.
213 TEST_F(ShelfBackgroundAnimatorNonMDTest, MaximizedBackground) {
214 PaintBackground(SHELF_BACKGROUND_MAXIMIZED);
215
216 EXPECT_EQ(SHELF_BACKGROUND_MAXIMIZED, animator_->target_background_type());
217 EXPECT_EQ(kMaxAlpha, observer_.opaque_background_alpha());
218 EXPECT_EQ(expected_translucent_alpha(), observer_.asset_background_alpha());
219 EXPECT_EQ(kMaxAlpha, observer_.item_background_alpha());
220 }
221
222 class ShelfBackgroundAnimatorMDTest : public ShelfBackgroundAnimatorTestBase {
223 public:
224 ShelfBackgroundAnimatorMDTest() {}
225 ~ShelfBackgroundAnimatorMDTest() override {}
226
227 MaterialDesignController::Mode GetMaterialDesignMode() override {
228 return MaterialDesignController::MATERIAL_EXPERIMENTAL;
229 }
230
231 private:
232 DISALLOW_COPY_AND_ASSIGN(ShelfBackgroundAnimatorMDTest);
233 };
234
235 // Verify the |previous_background_type_| and |target_background_type_| values
236 // when animating to the same target type multiple times.
237 TEST_F(ShelfBackgroundAnimatorMDTest,
238 BackgroundTypesWhenAnimatingToSameTarget) {
239 PaintBackground(SHELF_BACKGROUND_MAXIMIZED);
240 EXPECT_EQ(SHELF_BACKGROUND_MAXIMIZED, animator_->target_background_type());
241
242 PaintBackground(SHELF_BACKGROUND_DEFAULT);
243 EXPECT_EQ(SHELF_BACKGROUND_DEFAULT, animator_->target_background_type());
244 EXPECT_EQ(SHELF_BACKGROUND_MAXIMIZED, test_api_->previous_background_type());
245
246 PaintBackground(SHELF_BACKGROUND_DEFAULT);
247 EXPECT_EQ(SHELF_BACKGROUND_DEFAULT, animator_->target_background_type());
248 EXPECT_EQ(SHELF_BACKGROUND_MAXIMIZED, test_api_->previous_background_type());
249 }
250
251 // Verify subsequent calls to PaintBackground() using the
252 // BACKGROUND_CHANGE_ANIMATE change type are ignored.
253 TEST_F(ShelfBackgroundAnimatorMDTest,
254 MultipleAnimateCallsToSameTargetAreIgnored) {
255 PaintBackground(SHELF_BACKGROUND_MAXIMIZED);
256 SetAlphaValuesOnObserver(kInvalidAlpha);
257
258 animator_->PaintBackground(SHELF_BACKGROUND_DEFAULT,
259 BACKGROUND_CHANGE_ANIMATE);
260
James Cook 2016/07/27 00:30:39 optional nit: I think you could remove some of the
bruthig 2016/07/27 17:05:44 Done.
261 CompleteAnimations();
262
263 EXPECT_NE(observer_.opaque_background_alpha(), kInvalidAlpha);
264 EXPECT_NE(observer_.item_background_alpha(), kInvalidAlpha);
265
266 SetAlphaValuesOnObserver(kInvalidAlpha);
267
268 animator_->PaintBackground(SHELF_BACKGROUND_DEFAULT,
269 BACKGROUND_CHANGE_ANIMATE);
270
271 CompleteAnimations();
272
273 EXPECT_EQ(observer_.opaque_background_alpha(), kInvalidAlpha);
274 EXPECT_EQ(observer_.item_background_alpha(), kInvalidAlpha);
275 }
276
277 // Verify observers are updated with the current values when they are added.
278 TEST_F(ShelfBackgroundAnimatorMDTest, ObserversUpdatedWhenAdded) {
279 animator_->RemoveObserver(&observer_);
280 SetAlphaValuesOnObserver(kInvalidAlpha);
James Cook 2016/07/27 00:30:39 nit: it's kind of weird to use an invalid alpha he
bruthig 2016/07/27 17:05:44 Done, renamed kInvalidAlpha to kDummyAlpha and use
281
282 animator_->AddObserver(&observer_);
283
284 EXPECT_NE(observer_.opaque_background_alpha(), kInvalidAlpha);
285 EXPECT_NE(observer_.asset_background_alpha(), kInvalidAlpha);
286 EXPECT_NE(observer_.item_background_alpha(), kInvalidAlpha);
287 }
288
289 // Verify the alpha values for the SHELF_BACKGROUND_DEFAULT state.
290 TEST_F(ShelfBackgroundAnimatorMDTest, DefaultBackground) {
291 PaintBackground(SHELF_BACKGROUND_DEFAULT);
292
293 EXPECT_EQ(SHELF_BACKGROUND_DEFAULT, animator_->target_background_type());
294 EXPECT_EQ(0, observer_.opaque_background_alpha());
295 EXPECT_EQ(0, observer_.asset_background_alpha());
296 EXPECT_EQ(expected_translucent_alpha(), observer_.item_background_alpha());
297 }
298
299 // Verify the alpha values for the SHELF_BACKGROUND_OVERLAP state.
300 TEST_F(ShelfBackgroundAnimatorMDTest, OverlapBackground) {
301 PaintBackground(SHELF_BACKGROUND_OVERLAP);
302
303 EXPECT_EQ(SHELF_BACKGROUND_OVERLAP, animator_->target_background_type());
304 EXPECT_EQ(expected_translucent_alpha(), observer_.opaque_background_alpha());
305 EXPECT_EQ(0, observer_.asset_background_alpha());
306 EXPECT_EQ(0, observer_.item_background_alpha());
307 }
308
309 // Verify the alpha values for the SHELF_BACKGROUND_MAXIMIZED state.
310 TEST_F(ShelfBackgroundAnimatorMDTest, MaximizedBackground) {
311 PaintBackground(SHELF_BACKGROUND_MAXIMIZED);
312
313 EXPECT_EQ(SHELF_BACKGROUND_MAXIMIZED, animator_->target_background_type());
314 EXPECT_EQ(kMaxAlpha, observer_.opaque_background_alpha());
315 EXPECT_EQ(0, observer_.asset_background_alpha());
316 EXPECT_EQ(0, observer_.item_background_alpha());
317 }
318
319 // Verify that existing animators are used when animating to the previous state.
320 TEST_F(ShelfBackgroundAnimatorMDTest, ExistingAnimatorsAreReused) {
321 PaintBackground(SHELF_BACKGROUND_DEFAULT);
322 PaintBackground(SHELF_BACKGROUND_MAXIMIZED);
323 EXPECT_TRUE(test_api_->can_reuse_animators());
324
325 const BackgroundAnimator* opaque_animator =
326 test_api_->opaque_background_animator();
327 const BackgroundAnimator* asset_animator =
328 test_api_->asset_background_animator();
329 const BackgroundAnimator* item_animator =
330 test_api_->item_background_animator();
331
332 PaintBackground(SHELF_BACKGROUND_DEFAULT);
333
334 EXPECT_EQ(opaque_animator, test_api_->opaque_background_animator());
335 EXPECT_EQ(asset_animator, test_api_->asset_background_animator());
336 EXPECT_EQ(item_animator, test_api_->item_background_animator());
337 }
338
339 // Verify that existing animators are not re-used when the previous animation
340 // didn't complete.
341 TEST_F(ShelfBackgroundAnimatorMDTest,
342 ExistingAnimatorsNotReusedWhenPreviousAnimationsDontComplete) {
343 EXPECT_NE(SHELF_BACKGROUND_OVERLAP, test_api_->previous_background_type());
344 animator_->PaintBackground(SHELF_BACKGROUND_OVERLAP,
345 BACKGROUND_CHANGE_ANIMATE);
346 animator_->PaintBackground(SHELF_BACKGROUND_MAXIMIZED,
347 BACKGROUND_CHANGE_ANIMATE);
348 EXPECT_FALSE(test_api_->can_reuse_animators());
349
350 const BackgroundAnimator* opaque_animator =
351 test_api_->opaque_background_animator();
352 const BackgroundAnimator* asset_animator =
353 test_api_->asset_background_animator();
354 const BackgroundAnimator* item_animator =
355 test_api_->item_background_animator();
356
357 EXPECT_EQ(SHELF_BACKGROUND_OVERLAP, test_api_->previous_background_type());
358 animator_->PaintBackground(SHELF_BACKGROUND_OVERLAP,
359 BACKGROUND_CHANGE_ANIMATE);
360
361 EXPECT_NE(opaque_animator, test_api_->opaque_background_animator());
362 EXPECT_NE(asset_animator, test_api_->asset_background_animator());
363 EXPECT_NE(item_animator, test_api_->item_background_animator());
364 }
365
366 // Verify that existing animators are not re-used when the target background
367 // isn't the same as the previous background.
368 TEST_F(ShelfBackgroundAnimatorMDTest,
369 ExistingAnimatorsNotReusedWhenTargetBackgroundNotPreviousBackground) {
370 PaintBackground(SHELF_BACKGROUND_DEFAULT);
371 PaintBackground(SHELF_BACKGROUND_MAXIMIZED);
372 EXPECT_TRUE(test_api_->can_reuse_animators());
373
374 const BackgroundAnimator* opaque_animator =
375 test_api_->opaque_background_animator();
376 const BackgroundAnimator* asset_animator =
377 test_api_->asset_background_animator();
378 const BackgroundAnimator* item_animator =
379 test_api_->item_background_animator();
380
381 EXPECT_NE(SHELF_BACKGROUND_OVERLAP, test_api_->previous_background_type());
382 PaintBackground(SHELF_BACKGROUND_OVERLAP);
383
384 EXPECT_NE(opaque_animator, test_api_->opaque_background_animator());
385 EXPECT_NE(asset_animator, test_api_->asset_background_animator());
386 EXPECT_NE(item_animator, test_api_->item_background_animator());
387 }
388
389 // Verify animators are not re-used after snapping to the same background type.
390 TEST_F(ShelfBackgroundAnimatorMDTest,
391 ExistingAnimatorsNotUsedWhenSnappingToSameTargetBackground) {
392 PaintBackground(SHELF_BACKGROUND_DEFAULT);
393 PaintBackground(SHELF_BACKGROUND_DEFAULT);
394
395 EXPECT_FALSE(test_api_->can_reuse_animators());
396 }
397
398 // Verify observers are always notified, even when alpha values don't change.
399 TEST_F(ShelfBackgroundAnimatorMDTest,
400 ObserversAreNotifiedWhenSnappingToSameTargetBackground) {
401 PaintBackground(SHELF_BACKGROUND_DEFAULT);
402 SetAlphaValuesOnObserver(kInvalidAlpha);
403 PaintBackground(SHELF_BACKGROUND_DEFAULT);
404
405 EXPECT_NE(observer_.opaque_background_alpha(), kInvalidAlpha);
406 EXPECT_NE(observer_.asset_background_alpha(), kInvalidAlpha);
407 EXPECT_NE(observer_.item_background_alpha(), kInvalidAlpha);
408 }
James Cook 2016/07/27 00:30:38 Nice test suite.
bruthig 2016/07/27 17:05:44 :)
409
410 } // namespace test
411 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698