OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 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 <string> | |
6 | |
7 #include "base/strings/string16.h" | |
8 #include "base/strings/utf_string_conversions.h" | |
9 #include "chrome/common/automation_constants.h" | |
10 #include "chrome/test/webdriver/keycode_text_conversion.h" | |
11 #include "chrome/test/webdriver/webdriver_test_util.h" | |
12 #include "testing/gtest/include/gtest/gtest.h" | |
13 #include "ui/base/keycodes/keyboard_codes.h" | |
14 | |
15 using automation::kShiftKeyMask; | |
16 using webdriver::ConvertKeyCodeToText; | |
17 using webdriver::ConvertCharToKeyCode; | |
18 | |
19 namespace webdriver { | |
20 | |
21 void CheckCharToKeyCode(char character, ui::KeyboardCode key_code, | |
22 int modifiers) { | |
23 std::string character_string; | |
24 character_string.push_back(character); | |
25 char16 character_utf16 = UTF8ToUTF16(character_string)[0]; | |
26 ui::KeyboardCode actual_key_code = ui::VKEY_UNKNOWN; | |
27 int actual_modifiers = 0; | |
28 ASSERT_TRUE(ConvertCharToKeyCode( | |
29 character_utf16, &actual_key_code, &actual_modifiers)); | |
30 EXPECT_EQ(key_code, actual_key_code) << "Char: " << character; | |
31 EXPECT_EQ(modifiers, actual_modifiers) << "Char: " << character; | |
32 } | |
33 | |
34 void CheckCantConvertChar(wchar_t character) { | |
35 std::wstring character_string; | |
36 character_string.push_back(character); | |
37 char16 character_utf16 = WideToUTF16(character_string)[0]; | |
38 ui::KeyboardCode actual_key_code = ui::VKEY_UNKNOWN; | |
39 int actual_modifiers = 0; | |
40 EXPECT_FALSE(ConvertCharToKeyCode( | |
41 character_utf16, &actual_key_code, &actual_modifiers)); | |
42 } | |
43 | |
44 TEST(KeycodeTextConversionTest, KeyCodeToText) { | |
45 EXPECT_EQ("a", ConvertKeyCodeToText(ui::VKEY_A, 0)); | |
46 EXPECT_EQ("A", ConvertKeyCodeToText(ui::VKEY_A, kShiftKeyMask)); | |
47 | |
48 EXPECT_EQ("1", ConvertKeyCodeToText(ui::VKEY_1, 0)); | |
49 EXPECT_EQ("!", ConvertKeyCodeToText(ui::VKEY_1, kShiftKeyMask)); | |
50 | |
51 EXPECT_EQ(",", ConvertKeyCodeToText(ui::VKEY_OEM_COMMA, 0)); | |
52 EXPECT_EQ("<", ConvertKeyCodeToText(ui::VKEY_OEM_COMMA, kShiftKeyMask)); | |
53 | |
54 EXPECT_EQ("", ConvertKeyCodeToText(ui::VKEY_F1, 0)); | |
55 EXPECT_EQ("", ConvertKeyCodeToText(ui::VKEY_F1, kShiftKeyMask)); | |
56 | |
57 EXPECT_EQ("/", ConvertKeyCodeToText(ui::VKEY_DIVIDE, 0)); | |
58 EXPECT_EQ("/", ConvertKeyCodeToText(ui::VKEY_DIVIDE, kShiftKeyMask)); | |
59 | |
60 EXPECT_EQ("", ConvertKeyCodeToText(ui::VKEY_SHIFT, 0)); | |
61 EXPECT_EQ("", ConvertKeyCodeToText(ui::VKEY_SHIFT, kShiftKeyMask)); | |
62 } | |
63 | |
64 TEST(KeycodeTextConversionTest, CharToKeyCode) { | |
65 CheckCharToKeyCode('a', ui::VKEY_A, 0); | |
66 CheckCharToKeyCode('A', ui::VKEY_A, kShiftKeyMask); | |
67 | |
68 CheckCharToKeyCode('1', ui::VKEY_1, 0); | |
69 CheckCharToKeyCode('!', ui::VKEY_1, kShiftKeyMask); | |
70 | |
71 CheckCharToKeyCode(',', ui::VKEY_OEM_COMMA, 0); | |
72 CheckCharToKeyCode('<', ui::VKEY_OEM_COMMA, kShiftKeyMask); | |
73 | |
74 CheckCharToKeyCode('/', ui::VKEY_OEM_2, 0); | |
75 CheckCharToKeyCode('?', ui::VKEY_OEM_2, kShiftKeyMask); | |
76 | |
77 CheckCantConvertChar(L'\u00E9'); | |
78 CheckCantConvertChar(L'\u2159'); | |
79 } | |
80 | |
81 #if defined(OS_LINUX) | |
82 #define MAYBE_NonShiftModifiers DISABLED_NonShiftModifiers | |
83 #else | |
84 #define MAYBE_NonShiftModifiers NonShiftModifiers | |
85 #endif | |
86 | |
87 TEST(KeycodeTextConversionTest, MAYBE_NonShiftModifiers) { | |
88 RestoreKeyboardLayoutOnDestruct restore; | |
89 #if defined(OS_WIN) | |
90 ASSERT_TRUE(SwitchKeyboardLayout("00000407")); // german | |
91 int ctrl_and_alt = automation::kControlKeyMask | automation::kAltKeyMask; | |
92 CheckCharToKeyCode('@', ui::VKEY_Q, ctrl_and_alt); | |
93 EXPECT_EQ("@", ConvertKeyCodeToText(ui::VKEY_Q, ctrl_and_alt)); | |
94 #elif defined(OS_MACOSX) | |
95 ASSERT_TRUE(SwitchKeyboardLayout("com.apple.keylayout.German")); | |
96 EXPECT_EQ("@", ConvertKeyCodeToText(ui::VKEY_L, automation::kAltKeyMask)); | |
97 #endif | |
98 } | |
99 | |
100 #if defined(OS_LINUX) | |
101 #define MAYBE_NonEnglish DISABLED_NonEnglish | |
102 #else | |
103 #define MAYBE_NonEnglish NonEnglish | |
104 #endif | |
105 | |
106 TEST(KeycodeTextConversionTest, MAYBE_NonEnglish) { | |
107 RestoreKeyboardLayoutOnDestruct restore; | |
108 #if defined(OS_WIN) | |
109 ASSERT_TRUE(SwitchKeyboardLayout("00000408")); // greek | |
110 CheckCharToKeyCode(';', ui::VKEY_Q, 0); | |
111 EXPECT_EQ(";", ConvertKeyCodeToText(ui::VKEY_Q, 0)); | |
112 #elif defined(OS_MACOSX) | |
113 ASSERT_TRUE(SwitchKeyboardLayout("com.apple.keylayout.German")); | |
114 CheckCharToKeyCode('z', ui::VKEY_Y, 0); | |
115 EXPECT_EQ("z", ConvertKeyCodeToText(ui::VKEY_Y, 0)); | |
116 #endif | |
117 } | |
118 | |
119 } // namespace webdriver | |
OLD | NEW |