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

Side by Side Diff: ui/views/corewm/cursor_manager_unittest.cc

Issue 194843004: Move files from ui/views/corewm to ui/wm/core (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013 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 "ui/views/corewm/cursor_manager.h"
6
7 #include "ui/aura/client/cursor_client_observer.h"
8 #include "ui/aura/test/aura_test_base.h"
9 #include "ui/views/corewm/native_cursor_manager.h"
10
11 namespace {
12
13 class TestingCursorManager : public views::corewm::NativeCursorManager {
14 public:
15 // Overridden from views::corewm::NativeCursorManager:
16 virtual void SetDisplay(
17 const gfx::Display& display,
18 views::corewm::NativeCursorManagerDelegate* delegate) OVERRIDE {}
19
20 virtual void SetCursor(
21 gfx::NativeCursor cursor,
22 views::corewm::NativeCursorManagerDelegate* delegate) OVERRIDE {
23 delegate->CommitCursor(cursor);
24 }
25
26 virtual void SetVisibility(
27 bool visible,
28 views::corewm::NativeCursorManagerDelegate* delegate) OVERRIDE {
29 delegate->CommitVisibility(visible);
30 }
31
32 virtual void SetMouseEventsEnabled(
33 bool enabled,
34 views::corewm::NativeCursorManagerDelegate* delegate) OVERRIDE {
35 delegate->CommitMouseEventsEnabled(enabled);
36 }
37
38 virtual void SetCursorSet(
39 ui::CursorSetType cursor_set,
40 views::corewm::NativeCursorManagerDelegate* delegate) OVERRIDE {
41 delegate->CommitCursorSet(cursor_set);
42 }
43
44 virtual void SetScale(
45 float scale,
46 views::corewm::NativeCursorManagerDelegate* delegate) OVERRIDE {
47 delegate->CommitScale(scale);
48 }
49 };
50
51 } // namespace
52
53 class CursorManagerTest : public aura::test::AuraTestBase {
54 protected:
55 CursorManagerTest()
56 : delegate_(new TestingCursorManager),
57 cursor_manager_(scoped_ptr<views::corewm::NativeCursorManager>(
58 delegate_)) {
59 }
60
61 TestingCursorManager* delegate_;
62 views::corewm::CursorManager cursor_manager_;
63 };
64
65 class TestingCursorClientObserver : public aura::client::CursorClientObserver {
66 public:
67 TestingCursorClientObserver()
68 : cursor_visibility_(false),
69 did_visibility_change_(false) {}
70 void reset() { cursor_visibility_ = did_visibility_change_ = false; }
71 bool is_cursor_visible() const { return cursor_visibility_; }
72 bool did_visibility_change() const { return did_visibility_change_; }
73
74 // Overridden from aura::client::CursorClientObserver:
75 virtual void OnCursorVisibilityChanged(bool is_visible) OVERRIDE {
76 cursor_visibility_ = is_visible;
77 did_visibility_change_ = true;
78 }
79
80 private:
81 bool cursor_visibility_;
82 bool did_visibility_change_;
83
84 DISALLOW_COPY_AND_ASSIGN(TestingCursorClientObserver);
85 };
86
87 TEST_F(CursorManagerTest, ShowHideCursor) {
88 cursor_manager_.SetCursor(ui::kCursorCopy);
89 EXPECT_EQ(ui::kCursorCopy, cursor_manager_.GetCursor().native_type());
90
91 cursor_manager_.ShowCursor();
92 EXPECT_TRUE(cursor_manager_.IsCursorVisible());
93 cursor_manager_.HideCursor();
94 EXPECT_FALSE(cursor_manager_.IsCursorVisible());
95 // The current cursor does not change even when the cursor is not shown.
96 EXPECT_EQ(ui::kCursorCopy, cursor_manager_.GetCursor().native_type());
97
98 // Check if cursor visibility is locked.
99 cursor_manager_.LockCursor();
100 EXPECT_FALSE(cursor_manager_.IsCursorVisible());
101 cursor_manager_.ShowCursor();
102 EXPECT_FALSE(cursor_manager_.IsCursorVisible());
103 cursor_manager_.UnlockCursor();
104 EXPECT_TRUE(cursor_manager_.IsCursorVisible());
105
106 cursor_manager_.LockCursor();
107 EXPECT_TRUE(cursor_manager_.IsCursorVisible());
108 cursor_manager_.HideCursor();
109 EXPECT_TRUE(cursor_manager_.IsCursorVisible());
110 cursor_manager_.UnlockCursor();
111 EXPECT_FALSE(cursor_manager_.IsCursorVisible());
112
113 // Checks setting visiblity while cursor is locked does not affect the
114 // subsequent uses of UnlockCursor.
115 cursor_manager_.LockCursor();
116 cursor_manager_.HideCursor();
117 cursor_manager_.UnlockCursor();
118 EXPECT_FALSE(cursor_manager_.IsCursorVisible());
119
120 cursor_manager_.ShowCursor();
121 cursor_manager_.LockCursor();
122 cursor_manager_.UnlockCursor();
123 EXPECT_TRUE(cursor_manager_.IsCursorVisible());
124
125 cursor_manager_.LockCursor();
126 cursor_manager_.ShowCursor();
127 cursor_manager_.UnlockCursor();
128 EXPECT_TRUE(cursor_manager_.IsCursorVisible());
129
130 cursor_manager_.HideCursor();
131 cursor_manager_.LockCursor();
132 cursor_manager_.UnlockCursor();
133 EXPECT_FALSE(cursor_manager_.IsCursorVisible());
134 }
135
136 // Verifies that LockCursor/UnlockCursor work correctly with
137 // EnableMouseEvents and DisableMouseEvents
138 TEST_F(CursorManagerTest, EnableDisableMouseEvents) {
139 cursor_manager_.SetCursor(ui::kCursorCopy);
140 EXPECT_EQ(ui::kCursorCopy, cursor_manager_.GetCursor().native_type());
141
142 cursor_manager_.EnableMouseEvents();
143 EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
144 cursor_manager_.DisableMouseEvents();
145 EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
146 // The current cursor does not change even when the cursor is not shown.
147 EXPECT_EQ(ui::kCursorCopy, cursor_manager_.GetCursor().native_type());
148
149 // Check if cursor enable state is locked.
150 cursor_manager_.LockCursor();
151 EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
152 cursor_manager_.EnableMouseEvents();
153 EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
154 cursor_manager_.UnlockCursor();
155 EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
156
157 cursor_manager_.LockCursor();
158 EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
159 cursor_manager_.DisableMouseEvents();
160 EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
161 cursor_manager_.UnlockCursor();
162 EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
163
164 // Checks enabling cursor while cursor is locked does not affect the
165 // subsequent uses of UnlockCursor.
166 cursor_manager_.LockCursor();
167 cursor_manager_.DisableMouseEvents();
168 cursor_manager_.UnlockCursor();
169 EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
170
171 cursor_manager_.EnableMouseEvents();
172 cursor_manager_.LockCursor();
173 cursor_manager_.UnlockCursor();
174 EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
175
176 cursor_manager_.LockCursor();
177 cursor_manager_.EnableMouseEvents();
178 cursor_manager_.UnlockCursor();
179 EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
180
181 cursor_manager_.DisableMouseEvents();
182 cursor_manager_.LockCursor();
183 cursor_manager_.UnlockCursor();
184 EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
185 }
186
187 TEST_F(CursorManagerTest, SetCursorSet) {
188 EXPECT_EQ(ui::CURSOR_SET_NORMAL, cursor_manager_.GetCursorSet());
189
190 cursor_manager_.SetCursorSet(ui::CURSOR_SET_NORMAL);
191 EXPECT_EQ(ui::CURSOR_SET_NORMAL, cursor_manager_.GetCursorSet());
192
193 cursor_manager_.SetCursorSet(ui::CURSOR_SET_LARGE);
194 EXPECT_EQ(ui::CURSOR_SET_LARGE, cursor_manager_.GetCursorSet());
195
196 cursor_manager_.SetCursorSet(ui::CURSOR_SET_NORMAL);
197 EXPECT_EQ(ui::CURSOR_SET_NORMAL, cursor_manager_.GetCursorSet());
198 }
199
200 TEST_F(CursorManagerTest, SetScale) {
201 EXPECT_EQ(1.f, cursor_manager_.GetScale());
202 cursor_manager_.SetScale(2.f);
203 EXPECT_EQ(2.f, cursor_manager_.GetScale());
204
205 // Cusror scale does change even while cursor is locked.
206 cursor_manager_.LockCursor();
207 EXPECT_EQ(2.f, cursor_manager_.GetScale());
208 cursor_manager_.SetScale(2.5f);
209 EXPECT_EQ(2.5f, cursor_manager_.GetScale());
210 cursor_manager_.UnlockCursor();
211
212 EXPECT_EQ(2.5f, cursor_manager_.GetScale());
213 cursor_manager_.SetScale(1.f);
214 EXPECT_EQ(1.f, cursor_manager_.GetScale());
215 }
216
217 TEST_F(CursorManagerTest, IsMouseEventsEnabled) {
218 cursor_manager_.EnableMouseEvents();
219 EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
220 cursor_manager_.DisableMouseEvents();
221 EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
222 }
223
224 // Verifies that the mouse events enable state changes correctly when
225 // ShowCursor/HideCursor and EnableMouseEvents/DisableMouseEvents are used
226 // together.
227 TEST_F(CursorManagerTest, ShowAndEnable) {
228 // Changing the visibility of the cursor does not affect the enable state.
229 cursor_manager_.EnableMouseEvents();
230 cursor_manager_.ShowCursor();
231 EXPECT_TRUE(cursor_manager_.IsCursorVisible());
232 EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
233 cursor_manager_.HideCursor();
234 EXPECT_FALSE(cursor_manager_.IsCursorVisible());
235 EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
236 cursor_manager_.ShowCursor();
237 EXPECT_TRUE(cursor_manager_.IsCursorVisible());
238 EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
239
240 // When mouse events are disabled, it also gets invisible.
241 EXPECT_TRUE(cursor_manager_.IsCursorVisible());
242 cursor_manager_.DisableMouseEvents();
243 EXPECT_FALSE(cursor_manager_.IsCursorVisible());
244 EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
245
246 // When mouse events are enabled, it restores the visibility state.
247 cursor_manager_.EnableMouseEvents();
248 EXPECT_TRUE(cursor_manager_.IsCursorVisible());
249 EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
250
251 cursor_manager_.ShowCursor();
252 cursor_manager_.DisableMouseEvents();
253 EXPECT_FALSE(cursor_manager_.IsCursorVisible());
254 EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
255 cursor_manager_.EnableMouseEvents();
256 EXPECT_TRUE(cursor_manager_.IsCursorVisible());
257 EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
258
259 cursor_manager_.HideCursor();
260 cursor_manager_.DisableMouseEvents();
261 EXPECT_FALSE(cursor_manager_.IsCursorVisible());
262 EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
263 cursor_manager_.EnableMouseEvents();
264 EXPECT_FALSE(cursor_manager_.IsCursorVisible());
265 EXPECT_TRUE(cursor_manager_.IsMouseEventsEnabled());
266
267 // When mouse events are disabled, ShowCursor is ignored.
268 cursor_manager_.DisableMouseEvents();
269 EXPECT_FALSE(cursor_manager_.IsCursorVisible());
270 EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
271 cursor_manager_.ShowCursor();
272 EXPECT_FALSE(cursor_manager_.IsCursorVisible());
273 EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
274 cursor_manager_.DisableMouseEvents();
275 EXPECT_FALSE(cursor_manager_.IsCursorVisible());
276 EXPECT_FALSE(cursor_manager_.IsMouseEventsEnabled());
277 }
278
279 // Verifies that calling DisableMouseEvents multiple times in a row makes no
280 // difference compared with calling it once.
281 // This is a regression test for http://crbug.com/169404.
282 TEST_F(CursorManagerTest, MultipleDisableMouseEvents) {
283 cursor_manager_.DisableMouseEvents();
284 cursor_manager_.DisableMouseEvents();
285 cursor_manager_.EnableMouseEvents();
286 cursor_manager_.LockCursor();
287 cursor_manager_.UnlockCursor();
288 EXPECT_TRUE(cursor_manager_.IsCursorVisible());
289 }
290
291 // Verifies that calling EnableMouseEvents multiple times in a row makes no
292 // difference compared with calling it once.
293 TEST_F(CursorManagerTest, MultipleEnableMouseEvents) {
294 cursor_manager_.DisableMouseEvents();
295 cursor_manager_.EnableMouseEvents();
296 cursor_manager_.EnableMouseEvents();
297 cursor_manager_.LockCursor();
298 cursor_manager_.UnlockCursor();
299 EXPECT_TRUE(cursor_manager_.IsCursorVisible());
300 }
301
302 TEST_F(CursorManagerTest, TestCursorClientObserver) {
303 // Add two observers. Both should have OnCursorVisibilityChanged()
304 // invoked when the visibility of the cursor changes.
305 TestingCursorClientObserver observer_a;
306 TestingCursorClientObserver observer_b;
307 cursor_manager_.AddObserver(&observer_a);
308 cursor_manager_.AddObserver(&observer_b);
309
310 // Initial state before any events have been sent.
311 observer_a.reset();
312 observer_b.reset();
313 EXPECT_FALSE(observer_a.did_visibility_change());
314 EXPECT_FALSE(observer_b.did_visibility_change());
315 EXPECT_FALSE(observer_a.is_cursor_visible());
316 EXPECT_FALSE(observer_b.is_cursor_visible());
317
318 // Hide the cursor using HideCursor().
319 cursor_manager_.HideCursor();
320 EXPECT_TRUE(observer_a.did_visibility_change());
321 EXPECT_TRUE(observer_b.did_visibility_change());
322 EXPECT_FALSE(observer_a.is_cursor_visible());
323 EXPECT_FALSE(observer_b.is_cursor_visible());
324
325 // Show the cursor using ShowCursor().
326 observer_a.reset();
327 observer_b.reset();
328 cursor_manager_.ShowCursor();
329 EXPECT_TRUE(observer_a.did_visibility_change());
330 EXPECT_TRUE(observer_b.did_visibility_change());
331 EXPECT_TRUE(observer_a.is_cursor_visible());
332 EXPECT_TRUE(observer_b.is_cursor_visible());
333
334 // Remove observer_b. Its OnCursorVisibilityChanged() should
335 // not be invoked past this point.
336 cursor_manager_.RemoveObserver(&observer_b);
337
338 // Hide the cursor using HideCursor().
339 observer_a.reset();
340 observer_b.reset();
341 cursor_manager_.HideCursor();
342 EXPECT_TRUE(observer_a.did_visibility_change());
343 EXPECT_FALSE(observer_b.did_visibility_change());
344 EXPECT_FALSE(observer_a.is_cursor_visible());
345
346 // Show the cursor using ShowCursor().
347 observer_a.reset();
348 observer_b.reset();
349 cursor_manager_.ShowCursor();
350 EXPECT_TRUE(observer_a.did_visibility_change());
351 EXPECT_FALSE(observer_b.did_visibility_change());
352 EXPECT_TRUE(observer_a.is_cursor_visible());
353 }
OLDNEW
« no previous file with comments | « ui/views/corewm/cursor_manager.cc ('k') | ui/views/corewm/desktop_capture_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698