OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/strings/string16.h" | 7 #include "base/strings/string16.h" |
8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
9 #include "build/build_config.h" | 9 #include "build/build_config.h" |
10 #include "chrome/test/chromedriver/chrome/ui_events.h" | 10 #include "chrome/test/chromedriver/chrome/ui_events.h" |
11 #include "chrome/test/chromedriver/keycode_text_conversion.h" | 11 #include "chrome/test/chromedriver/keycode_text_conversion.h" |
| 12 #include "chrome/test/chromedriver/test_util.h" |
12 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
13 #include "ui/events/keycodes/keyboard_codes.h" | 14 #include "ui/events/keycodes/keyboard_codes.h" |
14 #include "ui/events/test/keyboard_layout.h" | |
15 | 15 |
16 namespace { | 16 namespace { |
17 | 17 |
18 void CheckCharToKeyCode16(base::char16 character, ui::KeyboardCode key_code, | 18 void CheckCharToKeyCode16(base::char16 character, ui::KeyboardCode key_code, |
19 int modifiers) { | 19 int modifiers) { |
20 ui::KeyboardCode actual_key_code = ui::VKEY_UNKNOWN; | 20 ui::KeyboardCode actual_key_code = ui::VKEY_UNKNOWN; |
21 int actual_modifiers = 0; | 21 int actual_modifiers = 0; |
22 std::string error_msg; | 22 std::string error_msg; |
23 EXPECT_TRUE(ConvertCharToKeyCode( | 23 EXPECT_TRUE(ConvertCharToKeyCode( |
24 character, &actual_key_code, &actual_modifiers, &error_msg)); | 24 character, &actual_key_code, &actual_modifiers, &error_msg)); |
25 EXPECT_EQ(key_code, actual_key_code) << "Char: " << character; | 25 EXPECT_EQ(key_code, actual_key_code) << "Char: " << character; |
26 EXPECT_EQ(modifiers, actual_modifiers) << "Char: " << character; | 26 EXPECT_EQ(modifiers, actual_modifiers) << "Char: " << character; |
27 } | 27 } |
28 | 28 |
29 void CheckCharToKeyCode(char character, ui::KeyboardCode key_code, | 29 void CheckCharToKeyCode(char character, ui::KeyboardCode key_code, |
30 int modifiers) { | 30 int modifiers) { |
31 CheckCharToKeyCode16(base::UTF8ToUTF16(std::string(1, character))[0], | 31 CheckCharToKeyCode16(base::UTF8ToUTF16(std::string(1, character))[0], |
32 key_code, modifiers); | 32 key_code, modifiers); |
33 } | 33 } |
34 | 34 |
| 35 #if defined(OS_WIN) |
35 void CheckCharToKeyCode(wchar_t character, ui::KeyboardCode key_code, | 36 void CheckCharToKeyCode(wchar_t character, ui::KeyboardCode key_code, |
36 int modifiers) { | 37 int modifiers) { |
37 CheckCharToKeyCode16(base::WideToUTF16(std::wstring(1, character))[0], | 38 CheckCharToKeyCode16(base::WideToUTF16(std::wstring(1, character))[0], |
38 key_code, modifiers); | 39 key_code, modifiers); |
39 } | 40 } |
| 41 #endif |
40 | 42 |
41 void CheckCantConvertChar(wchar_t character) { | 43 void CheckCantConvertChar(wchar_t character) { |
42 std::wstring character_string; | 44 std::wstring character_string; |
43 character_string.push_back(character); | 45 character_string.push_back(character); |
44 base::char16 character_utf16 = base::WideToUTF16(character_string)[0]; | 46 base::char16 character_utf16 = base::WideToUTF16(character_string)[0]; |
45 ui::KeyboardCode actual_key_code = ui::VKEY_UNKNOWN; | 47 ui::KeyboardCode actual_key_code = ui::VKEY_UNKNOWN; |
46 int actual_modifiers = 0; | 48 int actual_modifiers = 0; |
47 std::string error_msg; | 49 std::string error_msg; |
48 EXPECT_FALSE(ConvertCharToKeyCode( | 50 EXPECT_FALSE(ConvertCharToKeyCode( |
49 character_utf16, &actual_key_code, &actual_modifiers, &error_msg)); | 51 character_utf16, &actual_key_code, &actual_modifiers, &error_msg)); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 | 120 |
119 #if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) | 121 #if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) |
120 // Not implemented on Linux. | 122 // Not implemented on Linux. |
121 // Fails if German layout is not installed on Mac. | 123 // Fails if German layout is not installed on Mac. |
122 #define MAYBE_NonShiftModifiers DISABLED_NonShiftModifiers | 124 #define MAYBE_NonShiftModifiers DISABLED_NonShiftModifiers |
123 #else | 125 #else |
124 #define MAYBE_NonShiftModifiers NonShiftModifiers | 126 #define MAYBE_NonShiftModifiers NonShiftModifiers |
125 #endif | 127 #endif |
126 | 128 |
127 TEST(KeycodeTextConversionTest, MAYBE_NonShiftModifiers) { | 129 TEST(KeycodeTextConversionTest, MAYBE_NonShiftModifiers) { |
128 ui::ScopedKeyboardLayout keyboard_layout(ui::KEYBOARD_LAYOUT_GERMAN); | 130 RestoreKeyboardLayoutOnDestruct restore; |
129 #if defined(OS_WIN) | 131 #if defined(OS_WIN) |
| 132 ASSERT_TRUE(SwitchKeyboardLayout("00000407")); // german |
130 int ctrl_and_alt = kControlKeyModifierMask | kAltKeyModifierMask; | 133 int ctrl_and_alt = kControlKeyModifierMask | kAltKeyModifierMask; |
131 CheckCharToKeyCode('@', ui::VKEY_Q, ctrl_and_alt); | 134 CheckCharToKeyCode('@', ui::VKEY_Q, ctrl_and_alt); |
132 EXPECT_EQ("@", ConvertKeyCodeToTextNoError(ui::VKEY_Q, ctrl_and_alt)); | 135 EXPECT_EQ("@", ConvertKeyCodeToTextNoError(ui::VKEY_Q, ctrl_and_alt)); |
133 #elif defined(OS_MACOSX) | 136 #elif defined(OS_MACOSX) |
| 137 ASSERT_TRUE(SwitchKeyboardLayout("com.apple.keylayout.German")); |
134 EXPECT_EQ("@", ConvertKeyCodeToTextNoError( | 138 EXPECT_EQ("@", ConvertKeyCodeToTextNoError( |
135 ui::VKEY_L, kAltKeyModifierMask)); | 139 ui::VKEY_L, kAltKeyModifierMask)); |
136 #endif | 140 #endif |
137 } | 141 } |
138 | 142 |
139 #if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) | 143 #if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) |
140 // Not implemented on Linux. | 144 // Not implemented on Linux. |
141 // Fails if tested layouts are not installed on Mac. | 145 // Fails if German layout is not installed on Mac. |
142 #define MAYBE_NonEnglish DISABLED_NonEnglish | 146 #define MAYBE_NonEnglish DISABLED_NonEnglish |
143 #else | 147 #else |
144 #define MAYBE_NonEnglish NonEnglish | 148 #define MAYBE_NonEnglish NonEnglish |
145 #endif | 149 #endif |
146 | 150 |
147 TEST(KeycodeTextConversionTest, MAYBE_NonEnglish) { | 151 TEST(KeycodeTextConversionTest, MAYBE_NonEnglish) { |
148 // For Greek and Russian keyboard layouts, which are very different from | 152 RestoreKeyboardLayoutOnDestruct restore; |
149 // QWERTY, Windows just uses virtual key codes that match the QWERTY layout, | 153 #if defined(OS_WIN) |
150 // and translates them to other characters. If we wanted to test something | 154 ASSERT_TRUE(SwitchKeyboardLayout("00000408")); // greek |
151 // like German, whose layout is very similar to QWERTY, we'd need to be | 155 CheckCharToKeyCode(';', ui::VKEY_Q, 0); |
152 // careful, as in this case Windows maps the keyboard scan codes to the | 156 EXPECT_EQ(";", ConvertKeyCodeToTextNoError(ui::VKEY_Q, 0)); |
153 // appropriate (different) VKEYs instead of mapping the VKEYs to different | 157 // Regression test for chromedriver bug #405. |
154 // characters. | 158 ASSERT_TRUE(SwitchKeyboardLayout("00000419")); // russian |
155 { | 159 CheckCharToKeyCode(L'\u0438', ui::VKEY_B, 0); |
156 ui::ScopedKeyboardLayout greek_layout(ui::KEYBOARD_LAYOUT_GREEK); | 160 EXPECT_EQ(base::UTF16ToUTF8(L"\u0438"), |
157 CheckCharToKeyCode(';', ui::VKEY_Q, 0); | 161 ConvertKeyCodeToTextNoError(ui::VKEY_B, 0)); |
158 EXPECT_EQ(";", ConvertKeyCodeToTextNoError(ui::VKEY_Q, 0)); | 162 #elif defined(OS_MACOSX) |
159 } | 163 ASSERT_TRUE(SwitchKeyboardLayout("com.apple.keylayout.German")); |
160 { | 164 CheckCharToKeyCode('z', ui::VKEY_Y, 0); |
161 // Regression test for chromedriver bug #405. | 165 EXPECT_EQ("z", ConvertKeyCodeToTextNoError(ui::VKEY_Y, 0)); |
162 ui::ScopedKeyboardLayout russian_layout(ui::KEYBOARD_LAYOUT_RUSSIAN); | 166 #endif |
163 CheckCharToKeyCode(L'\u0438', ui::VKEY_B, 0); | |
164 EXPECT_EQ(base::WideToUTF8(L"\u0438"), | |
165 ConvertKeyCodeToTextNoError(ui::VKEY_B, 0)); | |
166 } | |
167 } | 167 } |
OLD | NEW |