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

Side by Side Diff: chrome/browser/ui/ash/event_rewriter_unittest.cc

Issue 11314020: Allow Caps Lock to be remapped [part 1 of 2] (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review Created 8 years, 1 month 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/ash/event_rewriter.h" 5 #include "chrome/browser/ui/ash/event_rewriter.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/stringprintf.h" 8 #include "base/stringprintf.h"
9 #include "chrome/browser/api/prefs/pref_member.h" 9 #include "chrome/browser/api/prefs/pref_member.h"
10 #include "chrome/common/pref_names.h" 10 #include "chrome/common/pref_names.h"
11 #include "chrome/test/base/testing_pref_service.h" 11 #include "chrome/test/base/testing_pref_service.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "ui/base/events/event.h" 13 #include "ui/base/events/event.h"
14 14
15 #if defined(OS_CHROMEOS) 15 #if defined(OS_CHROMEOS)
16 #include <X11/keysym.h> 16 #include <X11/keysym.h>
17 #include <X11/XF86keysym.h>
17 #include <X11/Xlib.h> 18 #include <X11/Xlib.h>
18 19
19 #include "chrome/browser/chromeos/input_method/mock_input_method_manager.h" 20 #include "chrome/browser/chromeos/input_method/mock_input_method_manager.h"
20 #include "chrome/browser/chromeos/input_method/mock_xkeyboard.h" 21 #include "chrome/browser/chromeos/input_method/mock_xkeyboard.h"
21 #include "chrome/browser/chromeos/login/mock_user_manager.h" 22 #include "chrome/browser/chromeos/login/mock_user_manager.h"
22 #include "chrome/browser/chromeos/preferences.h" 23 #include "chrome/browser/chromeos/preferences.h"
23 #include "ui/base/x/x11_util.h" 24 #include "ui/base/x/x11_util.h"
24 25
25 namespace { 26 namespace {
26 27
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 keycode_super_r_(XKeysymToKeycode(display_, XK_Super_R)), 105 keycode_super_r_(XKeysymToKeycode(display_, XK_Super_R)),
105 keycode_void_symbol_(XKeysymToKeycode(display_, XK_VoidSymbol)), 106 keycode_void_symbol_(XKeysymToKeycode(display_, XK_VoidSymbol)),
106 keycode_delete_(XKeysymToKeycode(display_, XK_Delete)), 107 keycode_delete_(XKeysymToKeycode(display_, XK_Delete)),
107 keycode_backspace_(XKeysymToKeycode(display_, XK_BackSpace)), 108 keycode_backspace_(XKeysymToKeycode(display_, XK_BackSpace)),
108 keycode_up_(XKeysymToKeycode(display_, XK_Up)), 109 keycode_up_(XKeysymToKeycode(display_, XK_Up)),
109 keycode_down_(XKeysymToKeycode(display_, XK_Down)), 110 keycode_down_(XKeysymToKeycode(display_, XK_Down)),
110 keycode_prior_(XKeysymToKeycode(display_, XK_Prior)), 111 keycode_prior_(XKeysymToKeycode(display_, XK_Prior)),
111 keycode_next_(XKeysymToKeycode(display_, XK_Next)), 112 keycode_next_(XKeysymToKeycode(display_, XK_Next)),
112 keycode_home_(XKeysymToKeycode(display_, XK_Home)), 113 keycode_home_(XKeysymToKeycode(display_, XK_Home)),
113 keycode_end_(XKeysymToKeycode(display_, XK_End)), 114 keycode_end_(XKeysymToKeycode(display_, XK_End)),
115 keycode_launch7_(XKeysymToKeycode(display_, XF86XK_Launch7)),
114 input_method_manager_mock_(NULL) { 116 input_method_manager_mock_(NULL) {
115 } 117 }
116 virtual ~EventRewriterTest() {} 118 virtual ~EventRewriterTest() {}
117 119
118 virtual void SetUp() { 120 virtual void SetUp() {
119 // Mocking user manager because the real one needs to be called on UI thread 121 // Mocking user manager because the real one needs to be called on UI thread
120 EXPECT_CALL(*user_manager_mock_.user_manager(), IsLoggedInAsGuest()) 122 EXPECT_CALL(*user_manager_mock_.user_manager(), IsLoggedInAsGuest())
121 .WillRepeatedly(testing::Return(false)); 123 .WillRepeatedly(testing::Return(false));
122 input_method_manager_mock_ = 124 input_method_manager_mock_ =
123 new chromeos::input_method::MockInputMethodManager; 125 new chromeos::input_method::MockInputMethodManager;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 const KeyCode keycode_super_r_; 169 const KeyCode keycode_super_r_;
168 const KeyCode keycode_void_symbol_; 170 const KeyCode keycode_void_symbol_;
169 const KeyCode keycode_delete_; 171 const KeyCode keycode_delete_;
170 const KeyCode keycode_backspace_; 172 const KeyCode keycode_backspace_;
171 const KeyCode keycode_up_; 173 const KeyCode keycode_up_;
172 const KeyCode keycode_down_; 174 const KeyCode keycode_down_;
173 const KeyCode keycode_prior_; 175 const KeyCode keycode_prior_;
174 const KeyCode keycode_next_; 176 const KeyCode keycode_next_;
175 const KeyCode keycode_home_; 177 const KeyCode keycode_home_;
176 const KeyCode keycode_end_; 178 const KeyCode keycode_end_;
179 const KeyCode keycode_launch7_; // F16
177 chromeos::ScopedMockUserManagerEnabler user_manager_mock_; 180 chromeos::ScopedMockUserManagerEnabler user_manager_mock_;
178 chromeos::input_method::MockInputMethodManager* input_method_manager_mock_; 181 chromeos::input_method::MockInputMethodManager* input_method_manager_mock_;
179 }; 182 };
180 183
181 } // namespace 184 } // namespace
182 #else 185 #else
183 class EventRewriterTest : public testing::Test { 186 class EventRewriterTest : public testing::Test {
184 public: 187 public:
185 EventRewriterTest() {} 188 EventRewriterTest() {}
186 virtual ~EventRewriterTest() {} 189 virtual ~EventRewriterTest() {}
(...skipping 1284 matching lines...) Expand 10 before | Expand all | Expand 10 after
1471 KeyRelease), 1474 KeyRelease),
1472 GetRewrittenEventAsString(&rewriter, 1475 GetRewrittenEventAsString(&rewriter,
1473 ui::VKEY_CAPITAL, 1476 ui::VKEY_CAPITAL,
1474 ui::EF_CAPS_LOCK_DOWN, 1477 ui::EF_CAPS_LOCK_DOWN,
1475 ui::ET_KEY_RELEASED, 1478 ui::ET_KEY_RELEASED,
1476 keycode_caps_lock_, 1479 keycode_caps_lock_,
1477 LockMask)); 1480 LockMask));
1478 EXPECT_FALSE(xkeyboard.caps_lock_is_enabled_); 1481 EXPECT_FALSE(xkeyboard.caps_lock_is_enabled_);
1479 } 1482 }
1480 1483
1481 TEST_F(EventRewriterTest, TestRewriteFn) { 1484 TEST_F(EventRewriterTest, DISABLED_TestRewriteCapsLock) {
1485 // It seems that the X server running on build servers is too old and does not
1486 // support F16 (i.e. 'XKeysymToKeycode(display_, XF86XK_Launch7)' call).
1487 // TODO(yusukes): Reenable the test once build servers are upgraded.
Daniel Erat 2012/10/30 18:16:34 nit: mind filing a bug to track this, if you haven
Yusuke Sato 2012/10/30 19:11:33 Done: http://code.google.com/p/chromium/issues/det
1488
1482 TestingPrefService prefs; 1489 TestingPrefService prefs;
1490 chromeos::Preferences::RegisterUserPrefs(&prefs);
1491
1492 chromeos::input_method::MockXKeyboard xkeyboard;
1493 EventRewriter rewriter;
1494 rewriter.set_pref_service_for_testing(&prefs);
1495 rewriter.set_xkeyboard_for_testing(&xkeyboard);
1496 EXPECT_FALSE(xkeyboard.caps_lock_is_enabled_);
1497
1498 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask.
1499 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL,
1500 ui::EF_CAPS_LOCK_DOWN,
1501 ui::ET_KEY_PRESSED,
1502 keycode_caps_lock_,
1503 0U,
1504 KeyPress),
1505 GetRewrittenEventAsString(&rewriter,
1506 ui::VKEY_F16,
1507 0,
1508 ui::ET_KEY_PRESSED,
1509 keycode_launch7_,
1510 0U));
1511
1512 EXPECT_TRUE(xkeyboard.caps_lock_is_enabled_);
1513 }
1514
1515 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) {
1516 TestingPrefService prefs;
1517 chromeos::Preferences::RegisterUserPrefs(&prefs);
1518 IntegerPrefMember control;
1519 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs, NULL);
1520 control.SetValue(chromeos::input_method::kControlKey);
1521
1483 EventRewriter rewriter; 1522 EventRewriter rewriter;
1484 rewriter.set_pref_service_for_testing(&prefs); 1523 rewriter.set_pref_service_for_testing(&prefs);
1485 1524
1486 // Press F15+a. Confirm that Mod3Mask is rewritten to ControlMask. 1525 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask.
1487 // On Chrome OS, F15 works as a modifier (Mod3). http://crosbug/p/14339 1526 // On Chrome OS, CapsLock works as a Mod3 modifier.
1488 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 1527 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A,
1489 ui::EF_CONTROL_DOWN, 1528 ui::EF_CONTROL_DOWN,
1490 ui::ET_KEY_PRESSED, 1529 ui::ET_KEY_PRESSED,
1491 keycode_a_, 1530 keycode_a_,
1492 ControlMask, 1531 ControlMask,
1493 KeyPress), 1532 KeyPress),
1494 GetRewrittenEventAsString(&rewriter, 1533 GetRewrittenEventAsString(&rewriter,
1495 ui::VKEY_A, 1534 ui::VKEY_A,
1496 0, 1535 0,
1497 ui::ET_KEY_PRESSED, 1536 ui::ET_KEY_PRESSED,
1498 keycode_a_, 1537 keycode_a_,
1499 Mod3Mask)); 1538 Mod3Mask));
1500 1539
1501 // Press Control+F15+a. Confirm that Mod3Mask is rewritten to ControlMask. 1540 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask
1502 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 1541 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A,
1503 ui::EF_CONTROL_DOWN, 1542 ui::EF_CONTROL_DOWN,
1504 ui::ET_KEY_PRESSED, 1543 ui::ET_KEY_PRESSED,
1505 keycode_a_, 1544 keycode_a_,
1506 ControlMask, 1545 ControlMask,
1507 KeyPress), 1546 KeyPress),
1508 GetRewrittenEventAsString(&rewriter, 1547 GetRewrittenEventAsString(&rewriter,
1509 ui::VKEY_A, 1548 ui::VKEY_A,
1510 ui::EF_CONTROL_DOWN, 1549 ui::EF_CONTROL_DOWN,
1511 ui::ET_KEY_PRESSED, 1550 ui::ET_KEY_PRESSED,
1512 keycode_a_, 1551 keycode_a_,
1513 Mod3Mask | ControlMask)); 1552 Mod3Mask | ControlMask));
1514 1553
1515 // Press Alt+F15+a. Confirm that Mod3Mask is rewritten to ControlMask. 1554 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask.
1516 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 1555 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A,
1517 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, 1556 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
1518 ui::ET_KEY_PRESSED, 1557 ui::ET_KEY_PRESSED,
1519 keycode_a_, 1558 keycode_a_,
1520 Mod1Mask | ControlMask, 1559 Mod1Mask | ControlMask,
1521 KeyPress), 1560 KeyPress),
1522 GetRewrittenEventAsString(&rewriter, 1561 GetRewrittenEventAsString(&rewriter,
1523 ui::VKEY_A, 1562 ui::VKEY_A,
1524 ui::EF_ALT_DOWN, 1563 ui::EF_ALT_DOWN,
1525 ui::ET_KEY_PRESSED, 1564 ui::ET_KEY_PRESSED,
1526 keycode_a_, 1565 keycode_a_,
1527 Mod1Mask | Mod3Mask)); 1566 Mod1Mask | Mod3Mask));
1528 } 1567 }
1529 1568
1530 TEST_F(EventRewriterTest, TestRewriteFnMod3InUse) { 1569 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) {
1570 // Remap CapsLock to Control.
1531 TestingPrefService prefs; 1571 TestingPrefService prefs;
1572 chromeos::Preferences::RegisterUserPrefs(&prefs);
1573 IntegerPrefMember control;
1574 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs, NULL);
1575 control.SetValue(chromeos::input_method::kControlKey);
1576
1532 EventRewriter rewriter; 1577 EventRewriter rewriter;
1533 rewriter.set_pref_service_for_testing(&prefs); 1578 rewriter.set_pref_service_for_testing(&prefs);
1534 input_method_manager_mock_->SetCurrentInputMethodId("xkb:de:neo:ger"); 1579 input_method_manager_mock_->SetCurrentInputMethodId("xkb:de:neo:ger");
1535 1580
1536 // Press F15+a. Confirm that Mod3Mask is NOT rewritten to ControlMask when 1581 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask
1537 // Mod3Mask is already in use by the current XKB layout. 1582 // when Mod3Mask is already in use by the current XKB layout.
1538 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 1583 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A,
1539 0, 1584 0,
1540 ui::ET_KEY_PRESSED, 1585 ui::ET_KEY_PRESSED,
1541 keycode_a_, 1586 keycode_a_,
1542 Mod3Mask, 1587 Mod3Mask,
1543 KeyPress), 1588 KeyPress),
1544 GetRewrittenEventAsString(&rewriter, 1589 GetRewrittenEventAsString(&rewriter,
1545 ui::VKEY_A, 1590 ui::VKEY_A,
1546 0, 1591 0,
1547 ui::ET_KEY_PRESSED, 1592 ui::ET_KEY_PRESSED,
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
1727 // flag in the event is True. 1772 // flag in the event is True.
1728 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 1773 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL,
1729 ui::EF_CONTROL_DOWN, 1774 ui::EF_CONTROL_DOWN,
1730 ui::ET_KEY_PRESSED, 1775 ui::ET_KEY_PRESSED,
1731 keycode_control_l_, 1776 keycode_control_l_,
1732 0U, 1777 0U,
1733 KeyPress), 1778 KeyPress),
1734 rewritten_event); 1779 rewritten_event);
1735 } 1780 }
1736 #endif // OS_CHROMEOS 1781 #endif // OS_CHROMEOS
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698