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
3 // found in the LICENSE file.
7 #include "base/strings/string16.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/test/chromedriver/chrome/ui_events.h"
10 #include "chrome/test/chromedriver/keycode_text_conversion.h"
11 #include "chrome/test/chromedriver/test_util.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "ui/events/keycodes/keyboard_codes.h"
17 void CheckCharToKeyCode(char character, ui::KeyboardCode key_code,
19 std::string character_string;
20 character_string.push_back(character);
21 char16 character_utf16 = UTF8ToUTF16(character_string)[0];
22 ui::KeyboardCode actual_key_code = ui::VKEY_UNKNOWN;
23 int actual_modifiers = 0;
24 std::string error_msg;
25 EXPECT_TRUE(ConvertCharToKeyCode(
26 character_utf16, &actual_key_code, &actual_modifiers, &error_msg));
27 EXPECT_EQ(key_code, actual_key_code) << "Char: " << character;
28 EXPECT_EQ(modifiers, actual_modifiers) << "Char: " << character;
31 void CheckCantConvertChar(wchar_t character) {
32 std::wstring character_string;
33 character_string.push_back(character);
34 char16 character_utf16 = WideToUTF16(character_string)[0];
35 ui::KeyboardCode actual_key_code = ui::VKEY_UNKNOWN;
36 int actual_modifiers = 0;
37 std::string error_msg;
38 EXPECT_FALSE(ConvertCharToKeyCode(
39 character_utf16, &actual_key_code, &actual_modifiers, &error_msg));
42 std::string ConvertKeyCodeToTextNoError(ui::KeyboardCode key_code,
44 std::string error_msg;
46 EXPECT_TRUE(ConvertKeyCodeToText(key_code, modifiers, &text, &error_msg));
53 // Fails on bots: crbug.com/174962
54 #define MAYBE_KeyCodeToText DISABLED_KeyCodeToText
56 #define MAYBE_KeyCodeToText KeyCodeToText
59 TEST(KeycodeTextConversionTest, MAYBE_KeyCodeToText) {
60 EXPECT_EQ("a", ConvertKeyCodeToTextNoError(ui::VKEY_A, 0));
62 ConvertKeyCodeToTextNoError(ui::VKEY_A, kShiftKeyModifierMask));
64 EXPECT_EQ("1", ConvertKeyCodeToTextNoError(ui::VKEY_1, 0));
66 ConvertKeyCodeToTextNoError(ui::VKEY_1, kShiftKeyModifierMask));
68 EXPECT_EQ(",", ConvertKeyCodeToTextNoError(ui::VKEY_OEM_COMMA, 0));
69 EXPECT_EQ("<", ConvertKeyCodeToTextNoError(
70 ui::VKEY_OEM_COMMA, kShiftKeyModifierMask));
72 EXPECT_EQ("", ConvertKeyCodeToTextNoError(ui::VKEY_F1, 0));
74 ConvertKeyCodeToTextNoError(ui::VKEY_F1, kShiftKeyModifierMask));
76 EXPECT_EQ("/", ConvertKeyCodeToTextNoError(ui::VKEY_DIVIDE, 0));
78 ConvertKeyCodeToTextNoError(ui::VKEY_DIVIDE, kShiftKeyModifierMask));
80 EXPECT_EQ("", ConvertKeyCodeToTextNoError(ui::VKEY_SHIFT, 0));
82 ConvertKeyCodeToTextNoError(ui::VKEY_SHIFT, kShiftKeyModifierMask));
86 // Fails on bots: crbug.com/174962
87 #define MAYBE_CharToKeyCode DISABLED_CharToKeyCode
89 #define MAYBE_CharToKeyCode CharToKeyCode
92 TEST(KeycodeTextConversionTest, MAYBE_CharToKeyCode) {
93 CheckCharToKeyCode('a', ui::VKEY_A, 0);
94 CheckCharToKeyCode('A', ui::VKEY_A, kShiftKeyModifierMask);
96 CheckCharToKeyCode('1', ui::VKEY_1, 0);
97 CheckCharToKeyCode('!', ui::VKEY_1, kShiftKeyModifierMask);
99 CheckCharToKeyCode(',', ui::VKEY_OEM_COMMA, 0);
100 CheckCharToKeyCode('<', ui::VKEY_OEM_COMMA, kShiftKeyModifierMask);
102 CheckCharToKeyCode('/', ui::VKEY_OEM_2, 0);
103 CheckCharToKeyCode('?', ui::VKEY_OEM_2, kShiftKeyModifierMask);
105 CheckCantConvertChar(L'\u00E9');
106 CheckCantConvertChar(L'\u2159');
109 #if defined(OS_LINUX) || defined(OS_MACOSX)
110 // Not implemented on Linux.
111 // Fails if German layout is not installed on Mac.
112 #define MAYBE_NonShiftModifiers DISABLED_NonShiftModifiers
114 #define MAYBE_NonShiftModifiers NonShiftModifiers
117 TEST(KeycodeTextConversionTest, MAYBE_NonShiftModifiers) {
118 RestoreKeyboardLayoutOnDestruct restore;
120 ASSERT_TRUE(SwitchKeyboardLayout("00000407")); // german
121 int ctrl_and_alt = kControlKeyModifierMask | kAltKeyModifierMask;
122 CheckCharToKeyCode('@', ui::VKEY_Q, ctrl_and_alt);
123 EXPECT_EQ("@", ConvertKeyCodeToTextNoError(ui::VKEY_Q, ctrl_and_alt));
124 #elif defined(OS_MACOSX)
125 ASSERT_TRUE(SwitchKeyboardLayout("com.apple.keylayout.German"));
126 EXPECT_EQ("@", ConvertKeyCodeToTextNoError(
127 ui::VKEY_L, kAltKeyModifierMask));
131 #if defined(OS_LINUX) || defined(OS_MACOSX)
132 // Not implemented on Linux.
133 // Fails if German layout is not installed on Mac.
134 #define MAYBE_NonEnglish DISABLED_NonEnglish
136 #define MAYBE_NonEnglish NonEnglish
139 TEST(KeycodeTextConversionTest, MAYBE_NonEnglish) {
140 RestoreKeyboardLayoutOnDestruct restore;
142 ASSERT_TRUE(SwitchKeyboardLayout("00000408")); // greek
143 CheckCharToKeyCode(';', ui::VKEY_Q, 0);
144 EXPECT_EQ(";", ConvertKeyCodeToTextNoError(ui::VKEY_Q, 0));
145 #elif defined(OS_MACOSX)
146 ASSERT_TRUE(SwitchKeyboardLayout("com.apple.keylayout.German"));
147 CheckCharToKeyCode('z', ui::VKEY_Y, 0);
148 EXPECT_EQ("z", ConvertKeyCodeToTextNoError(ui::VKEY_Y, 0));