Chromium Code Reviews| 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 |