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

Unified Diff: trunk/src/chrome/browser/chromeos/events/event_rewriter_unittest.cc

Issue 341923006: Revert 278342 "Convert sticky keys to a chromeos::EventRewriter ..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « trunk/src/chrome/browser/chromeos/events/event_rewriter.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: trunk/src/chrome/browser/chromeos/events/event_rewriter_unittest.cc
===================================================================
--- trunk/src/chrome/browser/chromeos/events/event_rewriter_unittest.cc (revision 278418)
+++ trunk/src/chrome/browser/chromeos/events/event_rewriter_unittest.cc (working copy)
@@ -4,11 +4,15 @@
#include "chrome/browser/chromeos/events/event_rewriter.h"
+#include <X11/keysym.h>
+#include <X11/XF86keysym.h>
+#include <X11/Xlib.h>
+#undef Bool
+#undef None
+#undef RootWindow
+
#include <vector>
-#include "ash/shell.h"
-#include "ash/sticky_keys/sticky_keys_controller.h"
-#include "ash/sticky_keys/sticky_keys_overlay.h"
#include "ash/test/ash_test_base.h"
#include "ash/wm/window_state.h"
#include "base/basictypes.h"
@@ -26,24 +30,14 @@
#include "chromeos/ime/fake_ime_keyboard.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/aura/window.h"
-#include "ui/aura/window_tree_host.h"
#include "ui/events/event.h"
#include "ui/events/event_rewriter.h"
-#include "ui/events/test/test_event_processor.h"
-
-#if defined(USE_X11)
-#include <X11/keysym.h>
-
#include "ui/events/test/events_test_utils_x11.h"
#include "ui/events/x/touch_factory_x11.h"
#include "ui/gfx/x/x11_types.h"
-#endif
namespace {
-// The device id of the test touchpad device.
-const unsigned int kTouchPadDeviceId = 1;
-
std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode,
int ui_flags,
ui::EventType ui_type) {
@@ -198,7 +192,8 @@
class EventRewriterTest : public ash::test::AshTestBase {
public:
EventRewriterTest()
- : mock_user_manager_(new chromeos::MockUserManager),
+ : display_(gfx::GetXDisplay()),
+ mock_user_manager_(new chromeos::MockUserManager),
user_manager_enabler_(mock_user_manager_),
input_method_manager_mock_(NULL) {}
virtual ~EventRewriterTest() {}
@@ -232,6 +227,7 @@
return flags;
}
+ Display* display_;
chromeos::MockUserManager* mock_user_manager_; // Not owned.
chromeos::ScopedUserManagerEnabler user_manager_enabler_;
chromeos::input_method::MockInputMethodManager* input_method_manager_mock_;
@@ -240,7 +236,7 @@
TEST_F(EventRewriterTest, TestRewriteCommandToControl) {
// First, test with a PC keyboard.
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.DeviceAddedForTesting(0, "PC Keyboard");
rewriter.set_last_device_id_for_testing(0);
rewriter.set_pref_service_for_testing(&prefs);
@@ -321,7 +317,7 @@
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kAltKey);
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
rewriter.DeviceAddedForTesting(0, "PC Keyboard");
rewriter.set_last_device_id_for_testing(0);
@@ -361,7 +357,7 @@
void EventRewriterTest::TestRewriteNumPadKeys() {
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -503,7 +499,7 @@
// Tests if the rewriter can handle a Command + Num Pad event.
void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() {
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.DeviceAddedForTesting(0, "Apple Keyboard");
rewriter.set_last_device_id_for_testing(0);
rewriter.set_pref_service_for_testing(&prefs);
@@ -545,7 +541,7 @@
TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) {
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -588,7 +584,7 @@
TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) {
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -631,7 +627,7 @@
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kVoidKey);
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase disabled_modifier_tests[] = {
@@ -706,7 +702,7 @@
search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
search.SetValue(chromeos::input_method::kControlKey);
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase s_tests[] = {
@@ -770,7 +766,7 @@
search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
search.SetValue(chromeos::input_method::kEscapeKey);
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {// Press Search. Confirm the event is now VKEY_ESCAPE.
@@ -792,7 +788,7 @@
search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
search.SetValue(chromeos::input_method::kAltKey);
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase s2a_tests[] = {
@@ -869,7 +865,7 @@
search.SetValue(chromeos::input_method::kCapsLockKey);
chromeos::input_method::FakeImeKeyboard ime_keyboard;
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
@@ -939,7 +935,7 @@
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
chromeos::input_method::FakeImeKeyboard ime_keyboard;
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
@@ -958,7 +954,7 @@
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
chromeos::input_method::FakeImeKeyboard ime_keyboard;
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
@@ -991,7 +987,7 @@
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
chromeos::input_method::FakeImeKeyboard ime_keyboard;
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
@@ -1043,7 +1039,7 @@
control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs);
control.SetValue(chromeos::input_method::kControlKey);
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -1079,7 +1075,7 @@
control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs);
control.SetValue(chromeos::input_method::kControlKey);
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
input_method_manager_mock_->set_mod3_used(true);
@@ -1096,7 +1092,7 @@
TEST_F(EventRewriterTest, TestRewriteExtendedKeys) {
TestingPrefServiceSyncable prefs;
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.DeviceAddedForTesting(0, "PC Keyboard");
rewriter.set_last_device_id_for_testing(0);
rewriter.set_pref_service_for_testing(&prefs);
@@ -1205,7 +1201,7 @@
TEST_F(EventRewriterTest, TestRewriteFunctionKeys) {
TestingPrefServiceSyncable prefs;
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
FunctionKeyTestCase tests[] = {
@@ -1533,7 +1529,7 @@
search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
search.SetValue(chromeos::input_method::kControlKey);
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
CommandLine::ForCurrentProcess()->AppendSwitchASCII(
@@ -1560,8 +1556,6 @@
}
TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) {
-#if defined(USE_X11)
- // TODO(kpschoedel): pending alternative to xevent.xany.send_event
// Remap Control to Alt.
TestingPrefServiceSyncable prefs;
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
@@ -1569,7 +1563,7 @@
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kAltKey);
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
// Send left control press.
@@ -1588,7 +1582,6 @@
rewriter.RewriteEvent(keyevent, &new_event));
EXPECT_FALSE(new_event);
}
-#endif
}
TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) {
@@ -1599,7 +1592,7 @@
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kAltKey);
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
const int kTouchId = 2;
@@ -1616,60 +1609,11 @@
new_event->flags() & (ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN));
}
-// Keeps a buffer of handled events.
-class EventBuffer : public ui::test::TestEventProcessor {
- public:
- EventBuffer() {}
- virtual ~EventBuffer() {}
-
- void PopEvents(ScopedVector<ui::Event>* events) {
- events->clear();
- events->swap(events_);
- }
-
- private:
- // ui::EventProcessor overrides:
- virtual ui::EventDispatchDetails OnEventFromSource(
- ui::Event* event) OVERRIDE {
- if (event->IsKeyEvent()) {
- events_.push_back(new ui::KeyEvent(*static_cast<ui::KeyEvent*>(event)));
- } else if (event->IsMouseWheelEvent()) {
- events_.push_back(
- new ui::MouseWheelEvent(*static_cast<ui::MouseWheelEvent*>(event)));
- } else if (event->IsMouseEvent()) {
- events_.push_back(
- new ui::MouseEvent(*static_cast<ui::MouseEvent*>(event)));
- }
- return ui::EventDispatchDetails();
- }
-
- ScopedVector<ui::Event> events_;
-
- DISALLOW_COPY_AND_ASSIGN(EventBuffer);
-};
-
-// Trivial EventSource that does nothing but send events.
-class TestEventSource : public ui::EventSource {
- public:
- explicit TestEventSource(ui::EventProcessor* processor)
- : processor_(processor) {}
- virtual ui::EventProcessor* GetEventProcessor() OVERRIDE {
- return processor_;
- }
- ui::EventDispatchDetails Send(ui::Event* event) {
- return SendEventToProcessor(event);
- }
-
- private:
- ui::EventProcessor* processor_;
-};
-
// Tests of event rewriting that depend on the Ash window manager.
class EventRewriterAshTest : public ash::test::AshTestBase {
public:
EventRewriterAshTest()
- : source_(&buffer_),
- mock_user_manager_(new chromeos::MockUserManager),
+ : mock_user_manager_(new chromeos::MockUserManager),
user_manager_enabler_(mock_user_manager_) {}
virtual ~EventRewriterAshTest() {}
@@ -1678,40 +1622,12 @@
return rewriter_->RewriteEvent(event, rewritten_event);
}
- ui::EventDispatchDetails Send(ui::Event* event) {
- return source_.Send(event);
- }
-
- void SendKeyEvent(ui::EventType type, ui::KeyboardCode key_code) {
- ui::KeyEvent press(type, key_code, ui::EF_NONE, false);
- ui::EventDispatchDetails details = Send(&press);
- CHECK(!details.dispatcher_destroyed);
- }
-
- void SendActivateStickyKeyPattern(ui::KeyboardCode key_code) {
- SendKeyEvent(ui::ET_KEY_PRESSED, key_code);
- SendKeyEvent(ui::ET_KEY_RELEASED, key_code);
- }
-
protected:
- TestingPrefServiceSyncable* prefs() { return &prefs_; }
-
- void PopEvents(ScopedVector<ui::Event>* events) {
- buffer_.PopEvents(events);
- }
-
virtual void SetUp() OVERRIDE {
AshTestBase::SetUp();
- sticky_keys_controller_ =
- ash::Shell::GetInstance()->sticky_keys_controller();
- rewriter_.reset(new EventRewriter(sticky_keys_controller_));
+ rewriter_.reset(new EventRewriter());
chromeos::Preferences::RegisterProfilePrefs(prefs_.registry());
rewriter_->set_pref_service_for_testing(&prefs_);
-#if defined(USE_X11)
- ui::SetUpTouchPadForTest(kTouchPadDeviceId);
-#endif
- source_.AddEventRewriter(rewriter_.get());
- sticky_keys_controller_->Enable(true);
}
virtual void TearDown() OVERRIDE {
@@ -1719,18 +1635,13 @@
AshTestBase::TearDown();
}
- protected:
- ash::StickyKeysController* sticky_keys_controller_;
+ TestingPrefServiceSyncable prefs_;
private:
scoped_ptr<EventRewriter> rewriter_;
- EventBuffer buffer_;
- TestEventSource source_;
-
chromeos::MockUserManager* mock_user_manager_; // Not owned.
chromeos::ScopedUserManagerEnabler user_manager_enabler_;
- TestingPrefServiceSyncable prefs_;
DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest);
};
@@ -1739,7 +1650,6 @@
scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1));
ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get());
window_state->Activate();
- ScopedVector<ui::Event> events;
// Create a simulated keypress of F1 targetted at the window.
ui::KeyEvent press_f1(ui::ET_KEY_PRESSED, ui::VKEY_F1, 0, false);
@@ -1747,38 +1657,34 @@
// Simulate an apps v2 window that has requested top row keys as function
// keys. The event should not be rewritten.
window_state->set_top_row_keys_are_function_keys(true);
- ui::EventDispatchDetails details = Send(&press_f1);
- ASSERT_FALSE(details.dispatcher_destroyed);
- PopEvents(&events);
- EXPECT_EQ(1u, events.size());
+ scoped_ptr<ui::Event> rewritten_event;
+ ASSERT_FALSE(RewriteFunctionKeys(press_f1, &rewritten_event));
+ ASSERT_FALSE(rewritten_event);
EXPECT_EQ(
GetExpectedResultAsString(ui::VKEY_F1, ui::EF_NONE, ui::ET_KEY_PRESSED),
- GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0])));
+ GetKeyEventAsString(press_f1));
// The event should also not be rewritten if the send-function-keys pref is
// additionally set, for both apps v2 and regular windows.
BooleanPrefMember send_function_keys_pref;
- send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, prefs());
+ send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, &prefs_);
send_function_keys_pref.SetValue(true);
window_state->set_top_row_keys_are_function_keys(false);
- details = Send(&press_f1);
- ASSERT_FALSE(details.dispatcher_destroyed);
- PopEvents(&events);
- EXPECT_EQ(1u, events.size());
+ ASSERT_FALSE(RewriteFunctionKeys(press_f1, &rewritten_event));
+ ASSERT_FALSE(rewritten_event);
EXPECT_EQ(
GetExpectedResultAsString(ui::VKEY_F1, ui::EF_NONE, ui::ET_KEY_PRESSED),
- GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0])));
+ GetKeyEventAsString(press_f1));
// If the pref isn't set when an event is sent to a regular window, F1 is
// rewritten to the back key.
send_function_keys_pref.SetValue(false);
- details = Send(&press_f1);
- ASSERT_FALSE(details.dispatcher_destroyed);
- PopEvents(&events);
- EXPECT_EQ(1u, events.size());
+ ASSERT_TRUE(RewriteFunctionKeys(press_f1, &rewritten_event));
+ ASSERT_TRUE(rewritten_event);
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_BROWSER_BACK, ui::EF_NONE, ui::ET_KEY_PRESSED),
- GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0])));
+ GetKeyEventAsString(
+ *static_cast<const ui::KeyEvent*>(rewritten_event.get())));
}
TEST_F(EventRewriterTest, TestRewrittenModifierClick) {
@@ -1793,7 +1699,7 @@
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kAltKey);
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
// Check that Control + Left Button is converted (via Alt + Left Button)
@@ -1815,15 +1721,12 @@
TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) {
-#if defined(USE_X11)
- // TODO(kpschoedel): pending changes for crbug.com/360377
- // to |chromeos::EventRewriter::RewriteLocatedEvent()
std::vector<unsigned int> device_list;
device_list.push_back(10);
device_list.push_back(11);
ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list);
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter(NULL);
+ EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
const int kLeftAndAltFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN;
{
@@ -1889,299 +1792,6 @@
int flags = RewriteMouseEvent(&rewriter, release);
EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags);
}
-#endif
}
-TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) {
- // Test the actual key event dispatch implementation.
- ScopedVector<ui::Event> events;
-
- SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
- PopEvents(&events);
- EXPECT_EQ(1u, events.size());
- EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type());
- EXPECT_EQ(ui::VKEY_CONTROL,
- static_cast<ui::KeyEvent*>(events[0])->key_code());
-
- // Test key press event is correctly modified and modifier release
- // event is sent.
- ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::EF_NONE, false);
- ui::EventDispatchDetails details = Send(&press);
- PopEvents(&events);
- EXPECT_EQ(2u, events.size());
- EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type());
- EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code());
- EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
- EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type());
- EXPECT_EQ(ui::VKEY_CONTROL,
- static_cast<ui::KeyEvent*>(events[1])->key_code());
-
- // Test key release event is not modified.
- ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::EF_NONE, false);
- details = Send(&release);
- ASSERT_FALSE(details.dispatcher_destroyed);
- PopEvents(&events);
- EXPECT_EQ(1u, events.size());
- EXPECT_EQ(ui::ET_KEY_RELEASED, events[0]->type());
- EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code());
- EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN);
-}
-
-TEST_F(EventRewriterAshTest, MouseEventDispatchImpl) {
- ScopedVector<ui::Event> events;
-
- SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
- PopEvents(&events);
-
- // Test mouse press event is correctly modified.
- gfx::Point location(0, 0);
- ui::MouseEvent press(ui::ET_MOUSE_PRESSED,
- location,
- location,
- ui::EF_LEFT_MOUSE_BUTTON,
- ui::EF_LEFT_MOUSE_BUTTON);
- ui::EventDispatchDetails details = Send(&press);
- ASSERT_FALSE(details.dispatcher_destroyed);
- PopEvents(&events);
- EXPECT_EQ(1u, events.size());
- EXPECT_EQ(ui::ET_MOUSE_PRESSED, events[0]->type());
- EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
-
- // Test mouse release event is correctly modified and modifier release
- // event is sent. The mouse event should have the correct DIP location.
- ui::MouseEvent release(ui::ET_MOUSE_RELEASED,
- location,
- location,
- ui::EF_LEFT_MOUSE_BUTTON,
- ui::EF_LEFT_MOUSE_BUTTON);
- details = Send(&release);
- ASSERT_FALSE(details.dispatcher_destroyed);
- PopEvents(&events);
- EXPECT_EQ(2u, events.size());
- EXPECT_EQ(ui::ET_MOUSE_RELEASED, events[0]->type());
- EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
- EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type());
- EXPECT_EQ(ui::VKEY_CONTROL,
- static_cast<ui::KeyEvent*>(events[1])->key_code());
-}
-
-TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) {
- ScopedVector<ui::Event> events;
-
- // Test positive mouse wheel event is correctly modified and modifier release
- // event is sent.
- SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
- PopEvents(&events);
- gfx::Point location(0, 0);
- ui::MouseEvent mev(ui::ET_MOUSEWHEEL,
- location,
- location,
- ui::EF_LEFT_MOUSE_BUTTON,
- ui::EF_LEFT_MOUSE_BUTTON);
- ui::MouseWheelEvent positive(mev, 0, ui::MouseWheelEvent::kWheelDelta);
- ui::EventDispatchDetails details = Send(&positive);
- ASSERT_FALSE(details.dispatcher_destroyed);
- PopEvents(&events);
- EXPECT_EQ(2u, events.size());
- EXPECT_TRUE(events[0]->IsMouseWheelEvent());
- EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
- EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type());
- EXPECT_EQ(ui::VKEY_CONTROL,
- static_cast<ui::KeyEvent*>(events[1])->key_code());
-
- // Test negative mouse wheel event is correctly modified and modifier release
- // event is sent.
- SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
- PopEvents(&events);
- ui::MouseWheelEvent negative(mev, 0, -ui::MouseWheelEvent::kWheelDelta);
- details = Send(&negative);
- ASSERT_FALSE(details.dispatcher_destroyed);
- PopEvents(&events);
- EXPECT_EQ(2u, events.size());
- EXPECT_TRUE(events[0]->IsMouseWheelEvent());
- EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
- EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type());
- EXPECT_EQ(ui::VKEY_CONTROL,
- static_cast<ui::KeyEvent*>(events[1])->key_code());
-}
-
-class StickyKeysOverlayTest : public EventRewriterAshTest {
- public:
- StickyKeysOverlayTest() : overlay_(NULL) {}
-
- virtual ~StickyKeysOverlayTest() {}
-
- virtual void SetUp() OVERRIDE {
- EventRewriterAshTest::SetUp();
- overlay_ = sticky_keys_controller_->GetOverlayForTest();
- ASSERT_TRUE(overlay_);
- }
-
- ash::StickyKeysOverlay* overlay_;
-};
-
-TEST_F(StickyKeysOverlayTest, OneModifierEnabled) {
- EXPECT_FALSE(overlay_->is_visible());
- EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
- overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
-
- // Pressing modifier key should show overlay.
- SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
- EXPECT_TRUE(overlay_->is_visible());
- EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
- overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
-
- // Pressing a normal key should hide overlay.
- SendActivateStickyKeyPattern(ui::VKEY_T);
- EXPECT_FALSE(overlay_->is_visible());
- EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
- overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
-}
-
-TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) {
- EXPECT_FALSE(overlay_->is_visible());
- EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
- overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
- EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
- overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
-
- // Pressing two modifiers should show overlay.
- SendActivateStickyKeyPattern(ui::VKEY_SHIFT);
- SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
- EXPECT_TRUE(overlay_->is_visible());
- EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
- overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
- EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
- overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
-
- // Pressing a normal key should hide overlay.
- SendActivateStickyKeyPattern(ui::VKEY_N);
- EXPECT_FALSE(overlay_->is_visible());
- EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
- overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
- EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
- overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
-}
-
-TEST_F(StickyKeysOverlayTest, LockedModifier) {
- EXPECT_FALSE(overlay_->is_visible());
- EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
- overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
-
- // Pressing a modifier key twice should lock modifier and show overlay.
- SendActivateStickyKeyPattern(ui::VKEY_LMENU);
- SendActivateStickyKeyPattern(ui::VKEY_LMENU);
- EXPECT_TRUE(overlay_->is_visible());
- EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
- overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
-
- // Pressing a normal key should not hide overlay.
- SendActivateStickyKeyPattern(ui::VKEY_D);
- EXPECT_TRUE(overlay_->is_visible());
- EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
- overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
-}
-
-TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) {
- EXPECT_FALSE(overlay_->is_visible());
- EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
- overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
- EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
- overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
-
- // Pressing a modifier key twice should lock modifier and show overlay.
- SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
- SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
- EXPECT_TRUE(overlay_->is_visible());
- EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
- overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
-
- // Pressing another modifier key should still show overlay.
- SendActivateStickyKeyPattern(ui::VKEY_SHIFT);
- EXPECT_TRUE(overlay_->is_visible());
- EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
- overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
- EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
- overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
-
- // Pressing a normal key should not hide overlay but disable normal modifier.
- SendActivateStickyKeyPattern(ui::VKEY_D);
- EXPECT_TRUE(overlay_->is_visible());
- EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
- overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
- EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
- overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
-}
-
-TEST_F(StickyKeysOverlayTest, ModifiersDisabled) {
- EXPECT_FALSE(overlay_->is_visible());
- EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
- overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
- EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
- overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
- EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
- overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
-
- // Enable modifiers.
- SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
- SendActivateStickyKeyPattern(ui::VKEY_SHIFT);
- SendActivateStickyKeyPattern(ui::VKEY_SHIFT);
- SendActivateStickyKeyPattern(ui::VKEY_LMENU);
-
- EXPECT_TRUE(overlay_->is_visible());
- EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
- overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
- EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
- overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
- EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
- overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
-
- // Disable modifiers and overlay should be hidden.
- SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
- SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
- SendActivateStickyKeyPattern(ui::VKEY_SHIFT);
- SendActivateStickyKeyPattern(ui::VKEY_LMENU);
- SendActivateStickyKeyPattern(ui::VKEY_LMENU);
-
- EXPECT_FALSE(overlay_->is_visible());
- EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
- overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
- EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
- overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
- EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
- overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
-}
-
-TEST_F(StickyKeysOverlayTest, ModifierVisibility) {
- // All but AltGr and Mod3 should initially be visible.
- EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_CONTROL_DOWN));
- EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_SHIFT_DOWN));
- EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_ALT_DOWN));
- EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN));
- EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN));
-
- // Turn all modifiers on.
- sticky_keys_controller_->SetModifiersEnabled(true, true);
- EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_CONTROL_DOWN));
- EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_SHIFT_DOWN));
- EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_ALT_DOWN));
- EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN));
- EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN));
-
- // Turn off Mod3.
- sticky_keys_controller_->SetModifiersEnabled(false, true);
- EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN));
- EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN));
-
- // Turn off AltGr.
- sticky_keys_controller_->SetModifiersEnabled(true, false);
- EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN));
- EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN));
-
- // Turn off AltGr and Mod3.
- sticky_keys_controller_->SetModifiersEnabled(false, false);
- EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN));
- EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN));
-}
-
} // namespace chromeos
« no previous file with comments | « trunk/src/chrome/browser/chromeos/events/event_rewriter.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698