Move render_view_context_menu.* and related files out of tab_contents.
[chromium-blink-merge.git] / ash / sticky_keys / sticky_keys_overlay_unittest.cc
blob55a6ed183a01c360f8ceaf3e5bba5b45e048d8d9
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.
5 #include "ash/sticky_keys/sticky_keys_overlay.h"
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/window_event_dispatcher.h"
12 #include "ui/aura/window_tree_host_delegate.h"
13 #include "ui/events/event.h"
15 namespace ash {
17 class StickyKeysOverlayTest : public test::AshTestBase {
18 public:
19 StickyKeysOverlayTest() :
20 controller_(NULL),
21 overlay_(NULL) {}
23 virtual ~StickyKeysOverlayTest() {}
25 virtual void SetUp() OVERRIDE {
26 test::AshTestBase::SetUp();
28 controller_ = Shell::GetInstance()->sticky_keys_controller();
29 controller_->Enable(true);
30 overlay_ = controller_->GetOverlayForTest();
31 ASSERT_TRUE(overlay_);
34 void PressAndReleaseKey(ui::KeyboardCode code) {
35 SendKeyEvent(ui::ET_KEY_PRESSED, code);
36 SendKeyEvent(ui::ET_KEY_RELEASED, code);
39 void SendKeyEvent(ui::EventType type, ui::KeyboardCode code) {
40 ui::KeyEvent event(type, code, 0, false);
41 ui::Event::DispatcherApi dispatcher(&event);
42 dispatcher.set_target(Shell::GetInstance()->GetPrimaryRootWindow());
44 ui::EventDispatchDetails details = Shell::GetPrimaryRootWindow()->
45 GetDispatcher()->OnEventFromSource(&event);
46 CHECK(!details.dispatcher_destroyed);
49 StickyKeysController* controller_;
50 StickyKeysOverlay* overlay_;
53 TEST_F(StickyKeysOverlayTest, OverlayVisibility) {
54 StickyKeysOverlay overlay;
55 EXPECT_FALSE(overlay.is_visible());
56 overlay.Show(true);
57 EXPECT_TRUE(overlay.is_visible());
60 TEST_F(StickyKeysOverlayTest, ModifierKeyState) {
61 StickyKeysOverlay overlay;
62 overlay.SetModifierKeyState(ui::EF_SHIFT_DOWN, STICKY_KEY_STATE_DISABLED);
63 overlay.SetModifierKeyState(ui::EF_ALT_DOWN, STICKY_KEY_STATE_LOCKED);
64 overlay.SetModifierKeyState(ui::EF_CONTROL_DOWN, STICKY_KEY_STATE_ENABLED);
66 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
67 overlay.GetModifierKeyState(ui::EF_SHIFT_DOWN));
68 EXPECT_EQ(STICKY_KEY_STATE_LOCKED,
69 overlay.GetModifierKeyState(ui::EF_ALT_DOWN));
70 EXPECT_EQ(STICKY_KEY_STATE_ENABLED,
71 overlay.GetModifierKeyState(ui::EF_CONTROL_DOWN));
74 TEST_F(StickyKeysOverlayTest, OneModifierEnabled) {
75 EXPECT_FALSE(overlay_->is_visible());
76 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
77 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
79 // Pressing modifier key should show overlay.
80 PressAndReleaseKey(ui::VKEY_CONTROL);
81 EXPECT_TRUE(overlay_->is_visible());
82 EXPECT_EQ(STICKY_KEY_STATE_ENABLED,
83 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
85 // Pressing a normal key should hide overlay.
86 PressAndReleaseKey(ui::VKEY_T);
87 EXPECT_FALSE(overlay_->is_visible());
88 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
89 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
92 TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) {
93 EXPECT_FALSE(overlay_->is_visible());
94 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
95 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
96 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
97 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
99 // Pressing two modifiers should show overlay.
100 PressAndReleaseKey(ui::VKEY_SHIFT);
101 PressAndReleaseKey(ui::VKEY_CONTROL);
102 EXPECT_TRUE(overlay_->is_visible());
103 EXPECT_EQ(STICKY_KEY_STATE_ENABLED,
104 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
105 EXPECT_EQ(STICKY_KEY_STATE_ENABLED,
106 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
108 // Pressing a normal key should hide overlay.
109 PressAndReleaseKey(ui::VKEY_N);
110 EXPECT_FALSE(overlay_->is_visible());
111 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
112 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
113 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
114 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
117 TEST_F(StickyKeysOverlayTest, LockedModifier) {
118 EXPECT_FALSE(overlay_->is_visible());
119 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
120 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
122 // Pressing a modifier key twice should lock modifier and show overlay.
123 PressAndReleaseKey(ui::VKEY_LMENU);
124 PressAndReleaseKey(ui::VKEY_LMENU);
125 EXPECT_TRUE(overlay_->is_visible());
126 EXPECT_EQ(STICKY_KEY_STATE_LOCKED,
127 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
129 // Pressing a normal key should not hide overlay.
130 PressAndReleaseKey(ui::VKEY_D);
131 EXPECT_TRUE(overlay_->is_visible());
132 EXPECT_EQ(STICKY_KEY_STATE_LOCKED,
133 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
136 TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) {
137 EXPECT_FALSE(overlay_->is_visible());
138 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
139 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
140 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
141 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
143 // Pressing a modifier key twice should lock modifier and show overlay.
144 PressAndReleaseKey(ui::VKEY_CONTROL);
145 PressAndReleaseKey(ui::VKEY_CONTROL);
146 EXPECT_TRUE(overlay_->is_visible());
147 EXPECT_EQ(STICKY_KEY_STATE_LOCKED,
148 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
150 // Pressing another modifier key should still show overlay.
151 PressAndReleaseKey(ui::VKEY_SHIFT);
152 EXPECT_TRUE(overlay_->is_visible());
153 EXPECT_EQ(STICKY_KEY_STATE_LOCKED,
154 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
155 EXPECT_EQ(STICKY_KEY_STATE_ENABLED,
156 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
158 // Pressing a normal key should not hide overlay but disable normal modifier.
159 PressAndReleaseKey(ui::VKEY_D);
160 EXPECT_TRUE(overlay_->is_visible());
161 EXPECT_EQ(STICKY_KEY_STATE_LOCKED,
162 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
163 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
164 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
167 TEST_F(StickyKeysOverlayTest, ModifiersDisabled) {
168 EXPECT_FALSE(overlay_->is_visible());
169 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
170 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
171 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
172 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
173 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
174 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
176 // Enable modifiers.
177 PressAndReleaseKey(ui::VKEY_CONTROL);
178 PressAndReleaseKey(ui::VKEY_SHIFT);
179 PressAndReleaseKey(ui::VKEY_SHIFT);
180 PressAndReleaseKey(ui::VKEY_LMENU);
182 EXPECT_TRUE(overlay_->is_visible());
183 EXPECT_EQ(STICKY_KEY_STATE_ENABLED,
184 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
185 EXPECT_EQ(STICKY_KEY_STATE_LOCKED,
186 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
187 EXPECT_EQ(STICKY_KEY_STATE_ENABLED,
188 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
190 // Disable modifiers and overlay should be hidden.
191 PressAndReleaseKey(ui::VKEY_CONTROL);
192 PressAndReleaseKey(ui::VKEY_CONTROL);
193 PressAndReleaseKey(ui::VKEY_SHIFT);
194 PressAndReleaseKey(ui::VKEY_LMENU);
195 PressAndReleaseKey(ui::VKEY_LMENU);
197 EXPECT_FALSE(overlay_->is_visible());
198 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
199 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
200 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
201 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
202 EXPECT_EQ(STICKY_KEY_STATE_DISABLED,
203 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
206 } // namespace ash