| Index: chrome/browser/chromeos/input_method/xkeyboard_unittest.cc
|
| diff --git a/chrome/browser/chromeos/input_method/xkeyboard_unittest.cc b/chrome/browser/chromeos/input_method/xkeyboard_unittest.cc
|
| index 810bfcb4300e1bfefe105f00dac61a4c86698883..901c27b83c661bc1cc42c69fd9ee4cc3a903ac51 100644
|
| --- a/chrome/browser/chromeos/input_method/xkeyboard_unittest.cc
|
| +++ b/chrome/browser/chromeos/input_method/xkeyboard_unittest.cc
|
| @@ -49,16 +49,20 @@ class XKeyboardTest : public testing::Test {
|
| XKeyboardTest()
|
| : controller_(IBusController::Create()),
|
| util_(controller_->GetSupportedInputMethods()),
|
| - xkey_(util_),
|
| ui_thread_(BrowserThread::UI, &message_loop_) {
|
| }
|
|
|
| - static void SetUpTestCase() {
|
| + virtual void SetUp() {
|
| + xkey_.reset(new TestableXKeyboard(util_));
|
| + }
|
| +
|
| + virtual void TearDown() {
|
| + xkey_.reset();
|
| }
|
|
|
| scoped_ptr<IBusController> controller_;
|
| InputMethodUtil util_;
|
| - TestableXKeyboard xkey_;
|
| + scoped_ptr<TestableXKeyboard> xkey_;
|
|
|
| MessageLoopForUI message_loop_;
|
| content::TestBrowserThread ui_thread_;
|
| @@ -104,127 +108,127 @@ bool DisplayAvailable() {
|
| // Tests CreateFullXkbLayoutName() function.
|
| TEST_F(XKeyboardTest, TestCreateFullXkbLayoutNameBasic) {
|
| // CreateFullXkbLayoutName should not accept an empty |layout_name|.
|
| - EXPECT_STREQ("", xkey_.CreateFullXkbLayoutName(
|
| + EXPECT_STREQ("", xkey_->CreateFullXkbLayoutName(
|
| "", GetMap(kVoidKey, kVoidKey, kVoidKey)).c_str());
|
|
|
| // CreateFullXkbLayoutName should not accept an empty ModifierMap.
|
| - EXPECT_STREQ("", xkey_.CreateFullXkbLayoutName(
|
| + EXPECT_STREQ("", xkey_->CreateFullXkbLayoutName(
|
| "us", ModifierMap()).c_str());
|
|
|
| // CreateFullXkbLayoutName should not accept an incomplete ModifierMap.
|
| ModifierMap tmp_map = GetMap(kVoidKey, kVoidKey, kVoidKey);
|
| tmp_map.pop_back();
|
| - EXPECT_STREQ("", xkey_.CreateFullXkbLayoutName("us", tmp_map).c_str());
|
| + EXPECT_STREQ("", xkey_->CreateFullXkbLayoutName("us", tmp_map).c_str());
|
|
|
| // CreateFullXkbLayoutName should not accept redundant ModifierMaps.
|
| tmp_map = GetMap(kVoidKey, kVoidKey, kVoidKey);
|
| tmp_map.push_back(ModifierKeyPair(kSearchKey, kVoidKey)); // two search maps
|
| - EXPECT_STREQ("", xkey_.CreateFullXkbLayoutName("us", tmp_map).c_str());
|
| + EXPECT_STREQ("", xkey_->CreateFullXkbLayoutName("us", tmp_map).c_str());
|
| tmp_map = GetMap(kVoidKey, kVoidKey, kVoidKey);
|
| tmp_map.push_back(ModifierKeyPair(kLeftControlKey, kVoidKey)); // two ctrls
|
| - EXPECT_STREQ("", xkey_.CreateFullXkbLayoutName("us", tmp_map).c_str());
|
| + EXPECT_STREQ("", xkey_->CreateFullXkbLayoutName("us", tmp_map).c_str());
|
| tmp_map = GetMap(kVoidKey, kVoidKey, kVoidKey);
|
| tmp_map.push_back(ModifierKeyPair(kLeftAltKey, kVoidKey)); // two alts.
|
| - EXPECT_STREQ("", xkey_.CreateFullXkbLayoutName("us", tmp_map).c_str());
|
| + EXPECT_STREQ("", xkey_->CreateFullXkbLayoutName("us", tmp_map).c_str());
|
|
|
| // CreateFullXkbLayoutName should not accept invalid ModifierMaps.
|
| tmp_map = GetMap(kVoidKey, kVoidKey, kVoidKey);
|
| tmp_map.push_back(ModifierKeyPair(kVoidKey, kSearchKey)); // can't remap void
|
| - EXPECT_STREQ("", xkey_.CreateFullXkbLayoutName("us", tmp_map).c_str());
|
| + EXPECT_STREQ("", xkey_->CreateFullXkbLayoutName("us", tmp_map).c_str());
|
| tmp_map = GetMap(kVoidKey, kVoidKey, kVoidKey);
|
| tmp_map.push_back(ModifierKeyPair(kCapsLockKey, kSearchKey)); // ditto
|
| - EXPECT_STREQ("", xkey_.CreateFullXkbLayoutName("us", tmp_map).c_str());
|
| + EXPECT_STREQ("", xkey_->CreateFullXkbLayoutName("us", tmp_map).c_str());
|
|
|
| // CreateFullXkbLayoutName can remap Search/Ctrl/Alt to CapsLock.
|
| EXPECT_STREQ("us+chromeos(capslock_disabled_disabled)",
|
| - xkey_.CreateFullXkbLayoutName(
|
| + xkey_->CreateFullXkbLayoutName(
|
| "us",
|
| GetMap(kCapsLockKey, kVoidKey, kVoidKey)).c_str());
|
| EXPECT_STREQ("us+chromeos(disabled_capslock_disabled)",
|
| - xkey_.CreateFullXkbLayoutName(
|
| + xkey_->CreateFullXkbLayoutName(
|
| "us",
|
| GetMap(kVoidKey, kCapsLockKey, kVoidKey)).c_str());
|
| EXPECT_STREQ("us+chromeos(disabled_disabled_capslock)",
|
| - xkey_.CreateFullXkbLayoutName(
|
| + xkey_->CreateFullXkbLayoutName(
|
| "us",
|
| GetMap(kVoidKey, kVoidKey, kCapsLockKey)).c_str());
|
|
|
| // CreateFullXkbLayoutName should not accept non-alphanumeric characters
|
| // except "()-_".
|
| - EXPECT_STREQ("", xkey_.CreateFullXkbLayoutName(
|
| + EXPECT_STREQ("", xkey_->CreateFullXkbLayoutName(
|
| "us!", GetMap(kVoidKey, kVoidKey, kVoidKey)).c_str());
|
| - EXPECT_STREQ("", xkey_.CreateFullXkbLayoutName(
|
| + EXPECT_STREQ("", xkey_->CreateFullXkbLayoutName(
|
| "us; /bin/sh", GetMap(kVoidKey, kVoidKey, kVoidKey)).c_str());
|
| EXPECT_STREQ("ab-c_12+chromeos(disabled_disabled_disabled),us",
|
| - xkey_.CreateFullXkbLayoutName(
|
| + xkey_->CreateFullXkbLayoutName(
|
| "ab-c_12",
|
| GetMap(kVoidKey, kVoidKey, kVoidKey)).c_str());
|
|
|
| // CreateFullXkbLayoutName should not accept upper-case ascii characters.
|
| - EXPECT_STREQ("", xkey_.CreateFullXkbLayoutName(
|
| + EXPECT_STREQ("", xkey_->CreateFullXkbLayoutName(
|
| "US", GetMap(kVoidKey, kVoidKey, kVoidKey)).c_str());
|
|
|
| // CreateFullXkbLayoutName should accept lower-case ascii characters.
|
| for (int c = 'a'; c <= 'z'; ++c) {
|
| - EXPECT_STRNE("", xkey_.CreateFullXkbLayoutName(
|
| + EXPECT_STRNE("", xkey_->CreateFullXkbLayoutName(
|
| std::string(3, c),
|
| GetMap(kVoidKey, kVoidKey, kVoidKey)).c_str());
|
| }
|
|
|
| // CreateFullXkbLayoutName should accept numbers.
|
| for (int c = '0'; c <= '9'; ++c) {
|
| - EXPECT_STRNE("", xkey_.CreateFullXkbLayoutName(
|
| + EXPECT_STRNE("", xkey_->CreateFullXkbLayoutName(
|
| std::string(3, c),
|
| GetMap(kVoidKey, kVoidKey, kVoidKey)).c_str());
|
| }
|
|
|
| // CreateFullXkbLayoutName should accept a layout with a variant name.
|
| EXPECT_STREQ("us(dvorak)+chromeos(disabled_disabled_disabled)",
|
| - xkey_.CreateFullXkbLayoutName(
|
| + xkey_->CreateFullXkbLayoutName(
|
| "us(dvorak)",
|
| GetMap(kVoidKey, kVoidKey, kVoidKey)).c_str());
|
| EXPECT_STREQ("jp+chromeos(disabled_disabled_disabled),us",
|
| - xkey_.CreateFullXkbLayoutName(
|
| + xkey_->CreateFullXkbLayoutName(
|
| "jp", // does not use AltGr, therefore no _keepralt.
|
| GetMap(kVoidKey, kVoidKey, kVoidKey)).c_str());
|
|
|
| // When the layout name is not "us", the second layout should be added.
|
| - EXPECT_EQ(std::string::npos, xkey_.CreateFullXkbLayoutName(
|
| + EXPECT_EQ(std::string::npos, xkey_->CreateFullXkbLayoutName(
|
| "us", GetMap(kVoidKey, kVoidKey, kVoidKey)).find(",us"));
|
| - EXPECT_EQ(std::string::npos, xkey_.CreateFullXkbLayoutName(
|
| + EXPECT_EQ(std::string::npos, xkey_->CreateFullXkbLayoutName(
|
| "us(dvorak)", GetMap(kVoidKey, kVoidKey, kVoidKey)).find(",us"));
|
| - EXPECT_NE(std::string::npos, xkey_.CreateFullXkbLayoutName(
|
| + EXPECT_NE(std::string::npos, xkey_->CreateFullXkbLayoutName(
|
| "gb(extd)", GetMap(kVoidKey, kVoidKey, kVoidKey)).find(",us"));
|
| - EXPECT_NE(std::string::npos, xkey_.CreateFullXkbLayoutName(
|
| + EXPECT_NE(std::string::npos, xkey_->CreateFullXkbLayoutName(
|
| "jp", GetMap(kVoidKey, kVoidKey, kVoidKey)).find(",us"));
|
| }
|
|
|
| TEST_F(XKeyboardTest, TestCreateFullXkbLayoutNameKeepCapsLock) {
|
| EXPECT_STREQ("us(colemak)+chromeos(search_disabled_disabled)",
|
| - xkey_.CreateFullXkbLayoutName(
|
| + xkey_->CreateFullXkbLayoutName(
|
| "us(colemak)",
|
| // The 1st kVoidKey should be ignored.
|
| GetMap(kVoidKey, kVoidKey, kVoidKey)).c_str());
|
| EXPECT_STREQ("de(neo)+"
|
| "chromeos(search_leftcontrol_leftcontrol_keepralt),us",
|
| - xkey_.CreateFullXkbLayoutName(
|
| + xkey_->CreateFullXkbLayoutName(
|
| // The 1st kLeftControlKey should be ignored.
|
| "de(neo)", GetMap(kLeftControlKey,
|
| kLeftControlKey,
|
| kLeftControlKey)).c_str());
|
| EXPECT_STREQ("gb(extd)+chromeos(disabled_disabled_disabled_keepralt),us",
|
| - xkey_.CreateFullXkbLayoutName(
|
| + xkey_->CreateFullXkbLayoutName(
|
| "gb(extd)",
|
| GetMap(kVoidKey, kVoidKey, kVoidKey)).c_str());
|
| }
|
|
|
| TEST_F(XKeyboardTest, TestCreateFullXkbLayoutNameKeepAlt) {
|
| EXPECT_STREQ("us(intl)+chromeos(disabled_disabled_disabled_keepralt)",
|
| - xkey_.CreateFullXkbLayoutName(
|
| + xkey_->CreateFullXkbLayoutName(
|
| "us(intl)", GetMap(kVoidKey, kVoidKey, kVoidKey)).c_str());
|
| EXPECT_STREQ("kr(kr104)+"
|
| "chromeos(leftcontrol_leftcontrol_leftcontrol_keepralt),us",
|
| - xkey_.CreateFullXkbLayoutName(
|
| + xkey_->CreateFullXkbLayoutName(
|
| "kr(kr104)", GetMap(kLeftControlKey,
|
| kLeftControlKey,
|
| kLeftControlKey)).c_str());
|
| @@ -237,7 +241,7 @@ TEST_F(XKeyboardTest, TestCreateFullXkbLayoutNameModifierKeys) {
|
| for (int i = 0; i < static_cast<int>(kNumModifierKeys); ++i) {
|
| for (int j = 0; j < static_cast<int>(kNumModifierKeys); ++j) {
|
| for (int k = 0; k < static_cast<int>(kNumModifierKeys); ++k) {
|
| - const std::string layout = xkey_.CreateFullXkbLayoutName(
|
| + const std::string layout = xkey_->CreateFullXkbLayoutName(
|
| "us", GetMap(ModifierKey(i), ModifierKey(j), ModifierKey(k)));
|
| // CreateFullXkbLayoutName should succeed (i.e. should not return "".)
|
| EXPECT_STREQ("us+", layout.substr(0, 3).c_str())
|
| @@ -249,20 +253,87 @@ TEST_F(XKeyboardTest, TestCreateFullXkbLayoutNameModifierKeys) {
|
| }
|
| }
|
|
|
| -TEST_F(XKeyboardTest, TestSetCapsLockIsEnabled) {
|
| +TEST_F(XKeyboardTest, TestSetCapsLockEnabled) {
|
| + if (!DisplayAvailable()) {
|
| + return;
|
| + }
|
| + const bool initial_lock_state = xkey_->CapsLockIsEnabled();
|
| + xkey_->SetCapsLockEnabled(true);
|
| + EXPECT_TRUE(TestableXKeyboard::CapsLockIsEnabled());
|
| + xkey_->SetCapsLockEnabled(false);
|
| + EXPECT_FALSE(TestableXKeyboard::CapsLockIsEnabled());
|
| + xkey_->SetCapsLockEnabled(true);
|
| + EXPECT_TRUE(TestableXKeyboard::CapsLockIsEnabled());
|
| + xkey_->SetCapsLockEnabled(false);
|
| + EXPECT_FALSE(TestableXKeyboard::CapsLockIsEnabled());
|
| + xkey_->SetCapsLockEnabled(initial_lock_state);
|
| +}
|
| +
|
| +TEST_F(XKeyboardTest, TestSetNumLockEnabled) {
|
| + if (!DisplayAvailable()) {
|
| + return;
|
| + }
|
| + const unsigned int num_lock_mask = TestableXKeyboard::GetNumLockMask();
|
| + ASSERT_NE(0U, num_lock_mask);
|
| +
|
| + const bool initial_lock_state = xkey_->NumLockIsEnabled(num_lock_mask);
|
| + xkey_->SetNumLockEnabled(true);
|
| + EXPECT_TRUE(TestableXKeyboard::NumLockIsEnabled(num_lock_mask));
|
| + xkey_->SetNumLockEnabled(false);
|
| + EXPECT_FALSE(TestableXKeyboard::NumLockIsEnabled(num_lock_mask));
|
| + xkey_->SetNumLockEnabled(true);
|
| + EXPECT_TRUE(TestableXKeyboard::NumLockIsEnabled(num_lock_mask));
|
| + xkey_->SetNumLockEnabled(false);
|
| + EXPECT_FALSE(TestableXKeyboard::NumLockIsEnabled(num_lock_mask));
|
| + xkey_->SetNumLockEnabled(initial_lock_state);
|
| +}
|
| +
|
| +TEST_F(XKeyboardTest, TestSetCapsLockAndNumLockAtTheSameTime) {
|
| if (!DisplayAvailable()) {
|
| return;
|
| }
|
| - const bool initial_lock_state = XKeyboard::CapsLockIsEnabled();
|
| - XKeyboard::SetCapsLockEnabled(true);
|
| - EXPECT_TRUE(XKeyboard::CapsLockIsEnabled());
|
| - XKeyboard::SetCapsLockEnabled(false);
|
| - EXPECT_FALSE(XKeyboard::CapsLockIsEnabled());
|
| - XKeyboard::SetCapsLockEnabled(true);
|
| - EXPECT_TRUE(XKeyboard::CapsLockIsEnabled());
|
| - XKeyboard::SetCapsLockEnabled(false);
|
| - EXPECT_FALSE(XKeyboard::CapsLockIsEnabled());
|
| - XKeyboard::SetCapsLockEnabled(initial_lock_state);
|
| + const unsigned int num_lock_mask = TestableXKeyboard::GetNumLockMask();
|
| + ASSERT_NE(0U, num_lock_mask);
|
| +
|
| + const bool initial_caps_lock_state = xkey_->CapsLockIsEnabled();
|
| + const bool initial_num_lock_state = xkey_->NumLockIsEnabled(num_lock_mask);
|
| +
|
| + // Flip both.
|
| + xkey_->SetLockedModifiers(
|
| + initial_caps_lock_state ? kDisableLock : kEnableLock,
|
| + initial_num_lock_state ? kDisableLock : kEnableLock);
|
| + EXPECT_EQ(!initial_caps_lock_state,
|
| + TestableXKeyboard::CapsLockIsEnabled());
|
| + EXPECT_EQ(!initial_num_lock_state,
|
| + TestableXKeyboard::NumLockIsEnabled(num_lock_mask));
|
| +
|
| + // Flip Caps Lock.
|
| + xkey_->SetLockedModifiers(
|
| + initial_caps_lock_state ? kEnableLock : kDisableLock,
|
| + kDontChange);
|
| + // Use GetLockedModifiers() for verifying the result.
|
| + bool c, n;
|
| + TestableXKeyboard::GetLockedModifiers(num_lock_mask, &c, &n);
|
| + EXPECT_EQ(initial_caps_lock_state, c);
|
| + EXPECT_EQ(!initial_num_lock_state, n);
|
| +
|
| + // Flip Num Lock to restore the initial state.
|
| + xkey_->SetLockedModifiers(
|
| + kDontChange,
|
| + initial_caps_lock_state ? kEnableLock : kDisableLock);
|
| + TestableXKeyboard::GetLockedModifiers(num_lock_mask, &c, &n);
|
| + EXPECT_EQ(initial_caps_lock_state, c);
|
| + EXPECT_EQ(initial_num_lock_state, n);
|
| +
|
| + // No-op SetLockedModifiers call.
|
| + xkey_->SetLockedModifiers(kDontChange, kDontChange);
|
| + EXPECT_EQ(initial_caps_lock_state,
|
| + TestableXKeyboard::CapsLockIsEnabled());
|
| + EXPECT_EQ(initial_num_lock_state,
|
| + TestableXKeyboard::NumLockIsEnabled(num_lock_mask));
|
| +
|
| + // No-op GetLockedModifiers call. Confirm it does not crash.
|
| + TestableXKeyboard::GetLockedModifiers(0, NULL, NULL);
|
| }
|
|
|
| TEST_F(XKeyboardTest, TestContainsModifierKeyAsReplacement) {
|
|
|