OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/views/animation/ink_drop_impl.h" | 5 #include "ui/views/animation/ink_drop_impl.h" |
6 | 6 |
7 #include "base/macros.h" | 7 #include "base/macros.h" |
8 #include "base/test/test_simple_task_runner.h" | 8 #include "base/test/test_simple_task_runner.h" |
9 #include "base/threading/thread_task_runner_handle.h" | 9 #include "base/threading/thread_task_runner_handle.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
11 #include "ui/views/animation/ink_drop_ripple.h" | 11 #include "ui/views/animation/ink_drop_ripple.h" |
12 #include "ui/views/animation/test/ink_drop_impl_test_api.h" | 12 #include "ui/views/animation/test/ink_drop_impl_test_api.h" |
13 #include "ui/views/animation/test/test_ink_drop_host.h" | 13 #include "ui/views/animation/test/test_ink_drop_host.h" |
14 | 14 |
15 namespace views { | 15 namespace views { |
16 | 16 |
17 // NOTE: The InkDropImpl class is also tested by the InkDropFactoryTest tests. | 17 // NOTE: The InkDropImpl class is also tested by the InkDropFactoryTest tests. |
18 class InkDropImplTest : public testing::Test { | 18 class InkDropImplTest : public testing::Test { |
19 public: | 19 public: |
20 InkDropImplTest(); | 20 InkDropImplTest(); |
21 ~InkDropImplTest() override; | 21 ~InkDropImplTest() override; |
22 | 22 |
23 protected: | 23 protected: |
24 TestInkDropHost ink_drop_host_; | 24 TestInkDropHost ink_drop_host_; |
25 | 25 |
26 // The test target. | 26 // The test target. |
27 InkDropImpl ink_drop_; | 27 InkDropImpl ink_drop_; |
28 | 28 |
29 // Allows privileged access to the the |ink_drop_hover_|. | 29 // Allows privileged access to the the |ink_drop_highlight_|. |
30 test::InkDropImplTestApi test_api_; | 30 test::InkDropImplTestApi test_api_; |
31 | 31 |
32 // Used to control the tasks scheduled by the InkDropImpl's Timer. | 32 // Used to control the tasks scheduled by the InkDropImpl's Timer. |
33 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 33 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
34 | 34 |
35 // Required by base::Timer's. | 35 // Required by base::Timer's. |
36 std::unique_ptr<base::ThreadTaskRunnerHandle> thread_task_runner_handle_; | 36 std::unique_ptr<base::ThreadTaskRunnerHandle> thread_task_runner_handle_; |
37 | 37 |
38 private: | 38 private: |
39 DISALLOW_COPY_AND_ASSIGN(InkDropImplTest); | 39 DISALLOW_COPY_AND_ASSIGN(InkDropImplTest); |
40 }; | 40 }; |
41 | 41 |
42 InkDropImplTest::InkDropImplTest() | 42 InkDropImplTest::InkDropImplTest() |
43 : ink_drop_(&ink_drop_host_), | 43 : ink_drop_(&ink_drop_host_), |
44 test_api_(&ink_drop_), | 44 test_api_(&ink_drop_), |
45 task_runner_(new base::TestSimpleTaskRunner), | 45 task_runner_(new base::TestSimpleTaskRunner), |
46 thread_task_runner_handle_( | 46 thread_task_runner_handle_( |
47 new base::ThreadTaskRunnerHandle(task_runner_)) { | 47 new base::ThreadTaskRunnerHandle(task_runner_)) { |
48 ink_drop_host_.set_disable_timers_for_test(true); | 48 ink_drop_host_.set_disable_timers_for_test(true); |
49 } | 49 } |
50 | 50 |
51 InkDropImplTest::~InkDropImplTest() {} | 51 InkDropImplTest::~InkDropImplTest() {} |
52 | 52 |
53 TEST_F(InkDropImplTest, SetHoveredIsFadingInOrVisible) { | 53 TEST_F(InkDropImplTest, SetHoveredHighlightIsFadingInOrVisible) { |
54 ink_drop_host_.set_should_show_hover(true); | 54 ink_drop_host_.set_should_show_highlight(true); |
55 | 55 |
56 ink_drop_.SetHovered(true); | 56 ink_drop_.SetHovered(true); |
57 EXPECT_TRUE(test_api_.IsHoverFadingInOrVisible()); | 57 EXPECT_TRUE(test_api_.IsHighlightFadingInOrVisible()); |
58 | 58 |
59 test_api_.CompleteAnimations(); | 59 test_api_.CompleteAnimations(); |
60 | 60 |
61 ink_drop_.SetHovered(false); | 61 ink_drop_.SetHovered(false); |
62 EXPECT_FALSE(test_api_.IsHoverFadingInOrVisible()); | 62 EXPECT_FALSE(test_api_.IsHighlightFadingInOrVisible()); |
63 } | 63 } |
64 | 64 |
65 TEST_F(InkDropImplTest, FocusAndHoverAtSameTime) { | 65 TEST_F(InkDropImplTest, FocusAndHoverAtSameTime) { |
66 ink_drop_host_.set_should_show_hover(true); | 66 ink_drop_host_.set_should_show_highlight(true); |
67 EXPECT_FALSE(test_api_.IsHoverFadingInOrVisible()); | 67 EXPECT_FALSE(test_api_.IsHighlightFadingInOrVisible()); |
68 | 68 |
69 ink_drop_.SetFocused(true); | 69 ink_drop_.SetFocused(true); |
70 EXPECT_TRUE(test_api_.IsHoverFadingInOrVisible()); | 70 EXPECT_TRUE(test_api_.IsHighlightFadingInOrVisible()); |
71 | 71 |
72 test_api_.CompleteAnimations(); | 72 test_api_.CompleteAnimations(); |
73 ink_drop_.SetHovered(false); | 73 ink_drop_.SetHovered(false); |
74 EXPECT_TRUE(test_api_.IsHoverFadingInOrVisible()); | 74 EXPECT_TRUE(test_api_.IsHighlightFadingInOrVisible()); |
75 | 75 |
76 test_api_.CompleteAnimations(); | 76 test_api_.CompleteAnimations(); |
77 ink_drop_.SetHovered(true); | 77 ink_drop_.SetHovered(true); |
78 EXPECT_TRUE(test_api_.IsHoverFadingInOrVisible()); | 78 EXPECT_TRUE(test_api_.IsHighlightFadingInOrVisible()); |
79 | 79 |
80 test_api_.CompleteAnimations(); | 80 test_api_.CompleteAnimations(); |
81 ink_drop_.SetFocused(false); | 81 ink_drop_.SetFocused(false); |
82 EXPECT_TRUE(test_api_.IsHoverFadingInOrVisible()); | 82 EXPECT_TRUE(test_api_.IsHighlightFadingInOrVisible()); |
83 | 83 |
84 test_api_.CompleteAnimations(); | 84 test_api_.CompleteAnimations(); |
85 ink_drop_.SetHovered(false); | 85 ink_drop_.SetHovered(false); |
86 EXPECT_FALSE(test_api_.IsHoverFadingInOrVisible()); | 86 EXPECT_FALSE(test_api_.IsHighlightFadingInOrVisible()); |
87 } | 87 } |
88 | 88 |
89 TEST_F(InkDropImplTest, HoverDoesntFadeInAfterAnimationIfHoverNotSet) { | 89 TEST_F(InkDropImplTest, HighlightDoesntFadeInAfterAnimationIfHighlightNotSet) { |
90 ink_drop_host_.set_should_show_hover(true); | 90 ink_drop_host_.set_should_show_highlight(true); |
91 ink_drop_.SetHovered(false); | 91 ink_drop_.SetHovered(false); |
92 ink_drop_.AnimateToState(InkDropState::ACTION_TRIGGERED); | 92 ink_drop_.AnimateToState(InkDropState::ACTION_TRIGGERED); |
93 test_api_.CompleteAnimations(); | 93 test_api_.CompleteAnimations(); |
94 | 94 |
95 EXPECT_FALSE(task_runner_->HasPendingTask()); | 95 EXPECT_FALSE(task_runner_->HasPendingTask()); |
96 EXPECT_FALSE(test_api_.IsHoverFadingInOrVisible()); | 96 EXPECT_FALSE(test_api_.IsHighlightFadingInOrVisible()); |
97 } | 97 } |
98 | 98 |
99 TEST_F(InkDropImplTest, HoverFadesInAfterAnimationWhenHostIsHovered) { | 99 TEST_F(InkDropImplTest, HighlightFadesInAfterAnimationWhenHostIsHovered) { |
100 ink_drop_host_.set_should_show_hover(true); | 100 ink_drop_host_.set_should_show_highlight(true); |
101 ink_drop_.SetHovered(true); | 101 ink_drop_.SetHovered(true); |
102 ink_drop_.AnimateToState(InkDropState::ACTION_TRIGGERED); | 102 ink_drop_.AnimateToState(InkDropState::ACTION_TRIGGERED); |
103 test_api_.CompleteAnimations(); | 103 test_api_.CompleteAnimations(); |
104 | 104 |
105 EXPECT_TRUE(task_runner_->HasPendingTask()); | 105 EXPECT_TRUE(task_runner_->HasPendingTask()); |
106 | 106 |
107 task_runner_->RunPendingTasks(); | 107 task_runner_->RunPendingTasks(); |
108 | 108 |
109 EXPECT_TRUE(test_api_.IsHoverFadingInOrVisible()); | 109 EXPECT_TRUE(test_api_.IsHighlightFadingInOrVisible()); |
110 } | 110 } |
111 | 111 |
112 TEST_F(InkDropImplTest, HoverDoesntFadeInAfterAnimationWhenHostIsNotHovered) { | 112 TEST_F(InkDropImplTest, |
113 ink_drop_host_.set_should_show_hover(false); | 113 HighlightDoesntFadeInAfterAnimationWhenHostIsNotHovered) { |
| 114 ink_drop_host_.set_should_show_highlight(false); |
114 ink_drop_.SetHovered(true); | 115 ink_drop_.SetHovered(true); |
115 ink_drop_.AnimateToState(InkDropState::ACTION_TRIGGERED); | 116 ink_drop_.AnimateToState(InkDropState::ACTION_TRIGGERED); |
116 test_api_.CompleteAnimations(); | 117 test_api_.CompleteAnimations(); |
117 | 118 |
118 EXPECT_TRUE(task_runner_->HasPendingTask()); | 119 EXPECT_TRUE(task_runner_->HasPendingTask()); |
119 | 120 |
120 task_runner_->RunPendingTasks(); | 121 task_runner_->RunPendingTasks(); |
121 | 122 |
122 EXPECT_FALSE(test_api_.IsHoverFadingInOrVisible()); | 123 EXPECT_FALSE(test_api_.IsHighlightFadingInOrVisible()); |
123 } | 124 } |
124 | 125 |
125 TEST_F(InkDropImplTest, HoveredStateNotVisibleOrFadingInAfterAnimateToState) { | 126 TEST_F(InkDropImplTest, HoveredStateNotVisibleOrFadingInAfterAnimateToState) { |
126 ink_drop_host_.set_should_show_hover(true); | 127 ink_drop_host_.set_should_show_highlight(true); |
127 | 128 |
128 ink_drop_.SetHovered(true); | 129 ink_drop_.SetHovered(true); |
129 test_api_.CompleteAnimations(); | 130 test_api_.CompleteAnimations(); |
130 EXPECT_TRUE(test_api_.IsHoverFadingInOrVisible()); | 131 EXPECT_TRUE(test_api_.IsHighlightFadingInOrVisible()); |
131 | 132 |
132 ink_drop_.AnimateToState(InkDropState::ACTION_TRIGGERED); | 133 ink_drop_.AnimateToState(InkDropState::ACTION_TRIGGERED); |
133 EXPECT_FALSE(test_api_.IsHoverFadingInOrVisible()); | 134 EXPECT_FALSE(test_api_.IsHighlightFadingInOrVisible()); |
134 } | 135 } |
135 | 136 |
136 // Verifies that there is not a crash when setting hovered state and the host | 137 // Verifies that there is not a crash when setting hovered state and the host |
137 // returns null for the hover. | 138 // returns null for the highlight. |
138 TEST_F(InkDropImplTest, SetHoveredFalseWorksWhenNoInkDropHoverExists) { | 139 TEST_F(InkDropImplTest, SetHoveredFalseWorksWhenNoInkDropHighlightExists) { |
139 ink_drop_host_.set_should_show_hover(false); | 140 ink_drop_host_.set_should_show_highlight(false); |
140 ink_drop_.SetHovered(true); | 141 ink_drop_.SetHovered(true); |
141 EXPECT_FALSE(test_api_.hover()); | 142 EXPECT_FALSE(test_api_.highlight()); |
142 ink_drop_.SetHovered(false); | 143 ink_drop_.SetHovered(false); |
143 EXPECT_FALSE(test_api_.hover()); | 144 EXPECT_FALSE(test_api_.highlight()); |
144 } | 145 } |
145 | 146 |
146 TEST_F(InkDropImplTest, HoverFadesOutOnSnapToActivated) { | 147 TEST_F(InkDropImplTest, HighlightFadesOutOnSnapToActivated) { |
147 ink_drop_host_.set_should_show_hover(true); | 148 ink_drop_host_.set_should_show_highlight(true); |
148 ink_drop_.SetHovered(true); | 149 ink_drop_.SetHovered(true); |
149 test_api_.CompleteAnimations(); | 150 test_api_.CompleteAnimations(); |
150 | 151 |
151 EXPECT_TRUE(test_api_.IsHoverFadingInOrVisible()); | 152 EXPECT_TRUE(test_api_.IsHighlightFadingInOrVisible()); |
152 | 153 |
153 ink_drop_.SnapToActivated(); | 154 ink_drop_.SnapToActivated(); |
154 | 155 |
155 EXPECT_FALSE(test_api_.IsHoverFadingInOrVisible()); | 156 EXPECT_FALSE(test_api_.IsHighlightFadingInOrVisible()); |
156 } | 157 } |
157 | 158 |
158 TEST_F(InkDropImplTest, LayersRemovedFromHostAfterHover) { | 159 TEST_F(InkDropImplTest, LayersRemovedFromHostAfterHighlight) { |
159 ink_drop_host_.set_should_show_hover(true); | 160 ink_drop_host_.set_should_show_highlight(true); |
160 | 161 |
161 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); | 162 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); |
162 | 163 |
163 ink_drop_.SetHovered(true); | 164 ink_drop_.SetHovered(true); |
164 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); | 165 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); |
165 | 166 |
166 test_api_.CompleteAnimations(); | 167 test_api_.CompleteAnimations(); |
167 | 168 |
168 ink_drop_.SetHovered(false); | 169 ink_drop_.SetHovered(false); |
169 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); | 170 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); |
170 | 171 |
171 test_api_.CompleteAnimations(); | 172 test_api_.CompleteAnimations(); |
172 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); | 173 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); |
173 } | 174 } |
174 | 175 |
175 TEST_F(InkDropImplTest, LayersRemovedFromHostAfterInkDrop) { | 176 TEST_F(InkDropImplTest, LayersRemovedFromHostAfterInkDrop) { |
176 ink_drop_host_.set_should_show_hover(true); | 177 ink_drop_host_.set_should_show_highlight(true); |
177 | 178 |
178 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); | 179 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); |
179 | 180 |
180 ink_drop_.AnimateToState(InkDropState::ACTION_PENDING); | 181 ink_drop_.AnimateToState(InkDropState::ACTION_PENDING); |
181 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); | 182 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); |
182 | 183 |
183 ink_drop_.AnimateToState(InkDropState::HIDDEN); | 184 ink_drop_.AnimateToState(InkDropState::HIDDEN); |
184 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); | 185 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); |
185 | 186 |
186 test_api_.CompleteAnimations(); | 187 test_api_.CompleteAnimations(); |
187 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); | 188 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); |
188 } | 189 } |
189 | 190 |
190 TEST_F(InkDropImplTest, LayersAddedToHostWhenHoverOrInkDropVisible) { | 191 TEST_F(InkDropImplTest, LayersAddedToHostWhenHighlightOrInkDropVisible) { |
191 ink_drop_host_.set_should_show_hover(true); | 192 ink_drop_host_.set_should_show_highlight(true); |
192 | 193 |
193 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); | 194 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); |
194 | 195 |
195 ink_drop_.SetHovered(true); | 196 ink_drop_.SetHovered(true); |
196 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); | 197 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); |
197 | 198 |
198 ink_drop_.AnimateToState(InkDropState::ACTION_PENDING); | 199 ink_drop_.AnimateToState(InkDropState::ACTION_PENDING); |
199 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); | 200 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); |
200 | 201 |
201 ink_drop_.AnimateToState(InkDropState::HIDDEN); | 202 ink_drop_.AnimateToState(InkDropState::HIDDEN); |
202 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); | 203 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); |
203 | 204 |
204 test_api_.CompleteAnimations(); | 205 test_api_.CompleteAnimations(); |
205 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); | 206 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); |
206 | 207 |
207 EXPECT_TRUE(task_runner_->HasPendingTask()); | 208 EXPECT_TRUE(task_runner_->HasPendingTask()); |
208 task_runner_->RunPendingTasks(); | 209 task_runner_->RunPendingTasks(); |
209 | 210 |
210 // Hover should be fading back in. | 211 // Highlight should be fading back in. |
211 EXPECT_TRUE(test_api_.HasActiveAnimations()); | 212 EXPECT_TRUE(test_api_.HasActiveAnimations()); |
212 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); | 213 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); |
213 } | 214 } |
214 | 215 |
215 TEST_F(InkDropImplTest, LayersNotAddedToHostWhenHoverTimeFires) { | 216 TEST_F(InkDropImplTest, LayersNotAddedToHostWhenHighlightTimeFires) { |
216 ink_drop_host_.set_should_show_hover(true); | 217 ink_drop_host_.set_should_show_highlight(true); |
217 | 218 |
218 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); | 219 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); |
219 | 220 |
220 ink_drop_.SetHovered(true); | 221 ink_drop_.SetHovered(true); |
221 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); | 222 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); |
222 | 223 |
223 ink_drop_.AnimateToState(InkDropState::ACTION_PENDING); | 224 ink_drop_.AnimateToState(InkDropState::ACTION_PENDING); |
224 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); | 225 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); |
225 | 226 |
226 ink_drop_.AnimateToState(InkDropState::HIDDEN); | 227 ink_drop_.AnimateToState(InkDropState::HIDDEN); |
227 test_api_.CompleteAnimations(); | 228 test_api_.CompleteAnimations(); |
228 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); | 229 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); |
229 | 230 |
230 ink_drop_host_.set_should_show_hover(false); | 231 ink_drop_host_.set_should_show_highlight(false); |
231 | 232 |
232 EXPECT_TRUE(task_runner_->HasPendingTask()); | 233 EXPECT_TRUE(task_runner_->HasPendingTask()); |
233 task_runner_->RunPendingTasks(); | 234 task_runner_->RunPendingTasks(); |
234 | 235 |
235 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); | 236 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); |
236 } | 237 } |
237 | 238 |
238 TEST_F(InkDropImplTest, LayersArentRemovedWhenPreemptingFadeOut) { | 239 TEST_F(InkDropImplTest, LayersArentRemovedWhenPreemptingFadeOut) { |
239 ink_drop_host_.set_should_show_hover(true); | 240 ink_drop_host_.set_should_show_highlight(true); |
240 | 241 |
241 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); | 242 EXPECT_EQ(0, ink_drop_host_.num_ink_drop_layers()); |
242 | 243 |
243 ink_drop_.SetHovered(true); | 244 ink_drop_.SetHovered(true); |
244 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); | 245 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); |
245 | 246 |
246 test_api_.CompleteAnimations(); | 247 test_api_.CompleteAnimations(); |
247 | 248 |
248 ink_drop_.SetHovered(false); | 249 ink_drop_.SetHovered(false); |
249 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); | 250 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); |
250 | 251 |
251 ink_drop_.SetHovered(true); | 252 ink_drop_.SetHovered(true); |
252 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); | 253 EXPECT_EQ(1, ink_drop_host_.num_ink_drop_layers()); |
253 } | 254 } |
254 | 255 |
255 } // namespace views | 256 } // namespace views |
OLD | NEW |