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

Side by Side Diff: ash/sticky_keys/sticky_keys_overlay_unittest.cc

Issue 137373003: Show overlay displaying the state of all sticky keys when it is enabled. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Unit tests for overlay Created 6 years, 11 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 2014 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/sticky_keys/sticky_keys_overlay.h"
6
7 #include "ash/shell.h"
8 #include "ash/sticky_keys/sticky_keys_controller.h"
9 #include "ash/test/ash_test_base.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "ui/aura/root_window.h"
12 #include "ui/aura/window_tree_host_delegate.h"
13 #include "ui/events/event.h"
14
15 namespace ash {
16
17 class StickyKeysOverlayTest : public test::AshTestBase {
18 protected:
James Cook 2014/01/15 22:53:53 public is OK here
Tim Song 2014/01/16 00:01:59 Done.
19 StickyKeysOverlayTest() :
20 controller_(NULL),
21 overlay_(NULL) {}
22
23 virtual ~StickyKeysOverlayTest() {}
24
25 virtual void SetUp() OVERRIDE {
26 test::AshTestBase::SetUp();
27
28 controller_ = Shell::GetInstance()->sticky_keys_controller();
29 controller_->Enable(true);
30 overlay_ = controller_->GetOverlayForTest();
31 ASSERT_TRUE(overlay_);
32 }
33
34 void PressAndReleaseModifierKey(StickyKeyModifier modifier) {
35 switch (modifier) {
36 case STICKY_KEY_ALT:
37 PressAndReleaseKey(ui::VKEY_LMENU);
38 break;
39 case STICKY_KEY_SHIFT:
40 PressAndReleaseKey(ui::VKEY_SHIFT);
41 break;
42 case STICKY_KEY_CONTROL:
43 PressAndReleaseKey(ui::VKEY_CONTROL);
44 break;
45 default:
46 NOTREACHED();
47 }
48 }
49
50 void PressAndReleaseKey(ui::KeyboardCode code) {
51 SendKeyEvent(ui::ET_KEY_PRESSED, code);
52 SendKeyEvent(ui::ET_KEY_RELEASED, code);
53 }
54
55 void SendKeyEvent(ui::EventType type, ui::KeyboardCode code) {
56 ui::KeyEvent event(type, code, 0, false);
57 ui::Event::DispatcherApi dispatcher(&event);
58 dispatcher.set_target(Shell::GetInstance()->GetPrimaryRootWindow());
59
60 aura::WindowTreeHostDelegate* delegate = Shell::GetPrimaryRootWindow()
61 ->GetDispatcher()->AsWindowTreeHostDelegate();
62 delegate->OnHostKeyEvent(&event);
63 }
64
65 StickyKeysController* controller_;
66 StickyKeysOverlay* overlay_;
67 };
68
69 TEST_F(StickyKeysOverlayTest, OverlayVisibility) {
70 StickyKeysOverlay overlay;
71 EXPECT_FALSE(overlay.is_showing());
72 overlay.Show(true);
73 EXPECT_TRUE(overlay.is_showing());
74 }
75
76 TEST_F(StickyKeysOverlayTest, ModifierKeyState) {
77 StickyKeysOverlay overlay;
78 overlay.SetModifierKeyState(STICKY_KEY_SHIFT, STICKY_KEY_STATE_DISABLED);
79 overlay.SetModifierKeyState(STICKY_KEY_ALT, STICKY_KEY_STATE_LOCKED);
80 overlay.SetModifierKeyState(STICKY_KEY_CONTROL, STICKY_KEY_STATE_ENABLED);
81
82 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
83 overlay.GetModifierKeyState(STICKY_KEY_SHIFT));
84 EXPECT_EQ(STICKY_KEY_STATE_LOCKED,
85 overlay.GetModifierKeyState(STICKY_KEY_ALT));
86 EXPECT_EQ(STICKY_KEY_STATE_ENABLED,
87 overlay.GetModifierKeyState(STICKY_KEY_CONTROL));
88 }
89
90 TEST_F(StickyKeysOverlayTest, OneModifierEnabled) {
91 EXPECT_FALSE(overlay_->is_showing());
92 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
93 overlay_->GetModifierKeyState(STICKY_KEY_CONTROL));
94
95 // Pressing modifier key should show overlay.
96 PressAndReleaseModifierKey(STICKY_KEY_CONTROL);
97 EXPECT_TRUE(overlay_->is_showing());
98 EXPECT_EQ(STICKY_KEY_STATE_ENABLED,
99 overlay_->GetModifierKeyState(STICKY_KEY_CONTROL));
100
101 // Pressing a normal key should hide overlay.
102 PressAndReleaseKey(ui::VKEY_T);
103 EXPECT_FALSE(overlay_->is_showing());
104 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
105 overlay_->GetModifierKeyState(STICKY_KEY_CONTROL));
106 }
107
108 TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) {
109 EXPECT_FALSE(overlay_->is_showing());
110 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
111 overlay_->GetModifierKeyState(STICKY_KEY_CONTROL));
112 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
113 overlay_->GetModifierKeyState(STICKY_KEY_SHIFT));
114
115 // Pressing two modifiers should show overlay.
116 PressAndReleaseModifierKey(STICKY_KEY_SHIFT);
117 PressAndReleaseModifierKey(STICKY_KEY_CONTROL);
118 EXPECT_TRUE(overlay_->is_showing());
119 EXPECT_EQ(STICKY_KEY_STATE_ENABLED,
120 overlay_->GetModifierKeyState(STICKY_KEY_SHIFT));
121 EXPECT_EQ(STICKY_KEY_STATE_ENABLED,
122 overlay_->GetModifierKeyState(STICKY_KEY_CONTROL));
123
124 // Pressing a normal key should hide overlay.
125 PressAndReleaseKey(ui::VKEY_N);
126 EXPECT_FALSE(overlay_->is_showing());
127 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
128 overlay_->GetModifierKeyState(STICKY_KEY_CONTROL));
129 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
130 overlay_->GetModifierKeyState(STICKY_KEY_SHIFT));
131 }
132
133 TEST_F(StickyKeysOverlayTest, LockedModifier) {
134 EXPECT_FALSE(overlay_->is_showing());
135 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
136 overlay_->GetModifierKeyState(STICKY_KEY_ALT));
137
138 // Pressing a modifier key twice should lock modifier and show overlay.
139 PressAndReleaseModifierKey(STICKY_KEY_ALT);
140 PressAndReleaseModifierKey(STICKY_KEY_ALT);
141 EXPECT_TRUE(overlay_->is_showing());
142 EXPECT_EQ(STICKY_KEY_STATE_LOCKED,
143 overlay_->GetModifierKeyState(STICKY_KEY_ALT));
144
145 // Pressing a normal key should not hide overlay.
146 PressAndReleaseKey(ui::VKEY_D);
147 EXPECT_TRUE(overlay_->is_showing());
148 EXPECT_EQ(STICKY_KEY_STATE_LOCKED,
149 overlay_->GetModifierKeyState(STICKY_KEY_ALT));
150 }
151
152 TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) {
153 EXPECT_FALSE(overlay_->is_showing());
154 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
155 overlay_->GetModifierKeyState(STICKY_KEY_CONTROL));
156 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
157 overlay_->GetModifierKeyState(STICKY_KEY_SHIFT));
158
159 // Pressing a modifier key twice should lock modifier and show overlay.
160 PressAndReleaseModifierKey(STICKY_KEY_CONTROL);
161 PressAndReleaseModifierKey(STICKY_KEY_CONTROL);
162 EXPECT_TRUE(overlay_->is_showing());
163 EXPECT_EQ(STICKY_KEY_STATE_LOCKED,
164 overlay_->GetModifierKeyState(STICKY_KEY_CONTROL));
165
166 // Pressing another modifier key should still show overlay.
167 PressAndReleaseModifierKey(STICKY_KEY_SHIFT);
168 EXPECT_TRUE(overlay_->is_showing());
169 EXPECT_EQ(STICKY_KEY_STATE_LOCKED,
170 overlay_->GetModifierKeyState(STICKY_KEY_CONTROL));
171 EXPECT_EQ(STICKY_KEY_STATE_ENABLED,
172 overlay_->GetModifierKeyState(STICKY_KEY_SHIFT));
173
174 // Pressing a normal key should not hide overlay but disable normal modifier.
175 PressAndReleaseKey(ui::VKEY_D);
176 EXPECT_TRUE(overlay_->is_showing());
177 EXPECT_EQ(STICKY_KEY_STATE_LOCKED,
178 overlay_->GetModifierKeyState(STICKY_KEY_CONTROL));
179 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
180 overlay_->GetModifierKeyState(STICKY_KEY_SHIFT));
181 }
182
183 TEST_F(StickyKeysOverlayTest, ModifiersDisabled) {
184 EXPECT_FALSE(overlay_->is_showing());
185 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
186 overlay_->GetModifierKeyState(STICKY_KEY_CONTROL));
187 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
188 overlay_->GetModifierKeyState(STICKY_KEY_SHIFT));
189 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
190 overlay_->GetModifierKeyState(STICKY_KEY_ALT));
191
192 // Enable modifiers.
193 PressAndReleaseModifierKey(STICKY_KEY_CONTROL);
194 PressAndReleaseModifierKey(STICKY_KEY_SHIFT);
195 PressAndReleaseModifierKey(STICKY_KEY_SHIFT);
196 PressAndReleaseModifierKey(STICKY_KEY_ALT);
197
198 EXPECT_TRUE(overlay_->is_showing());
199 EXPECT_EQ(STICKY_KEY_STATE_ENABLED,
200 overlay_->GetModifierKeyState(STICKY_KEY_CONTROL));
201 EXPECT_EQ(STICKY_KEY_STATE_LOCKED,
202 overlay_->GetModifierKeyState(STICKY_KEY_SHIFT));
203 EXPECT_EQ(STICKY_KEY_STATE_ENABLED,
204 overlay_->GetModifierKeyState(STICKY_KEY_ALT));
205
206 // Disable modifiers and overlay should be hidden.
207 PressAndReleaseModifierKey(STICKY_KEY_CONTROL);
208 PressAndReleaseModifierKey(STICKY_KEY_CONTROL);
209 PressAndReleaseModifierKey(STICKY_KEY_SHIFT);
210 PressAndReleaseModifierKey(STICKY_KEY_ALT);
211 PressAndReleaseModifierKey(STICKY_KEY_ALT);
212
213 EXPECT_FALSE(overlay_->is_showing());
214 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
215 overlay_->GetModifierKeyState(STICKY_KEY_CONTROL));
216 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
217 overlay_->GetModifierKeyState(STICKY_KEY_SHIFT));
218 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
219 overlay_->GetModifierKeyState(STICKY_KEY_ALT));
220 }
James Cook 2014/01/15 22:53:53 Nice test suite! Very thorough.
Tim Song 2014/01/16 00:01:59 Thanks!
221
222 } // ash
James Cook 2014/01/15 22:53:53 namespace ash
Tim Song 2014/01/16 00:01:59 Done.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698