OLD | NEW |
---|---|
(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.
| |
OLD | NEW |