- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / test / chromedriver / keycode_text_conversion_unittest.cc
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.
4
5 #include <string>
6
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"
14
15 namespace {
16
17 void CheckCharToKeyCode(char character, ui::KeyboardCode key_code,
18                         int modifiers) {
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;
29 }
30
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));
40 }
41
42 std::string ConvertKeyCodeToTextNoError(ui::KeyboardCode key_code,
43                                         int modifiers) {
44   std::string error_msg;
45   std::string text;
46   EXPECT_TRUE(ConvertKeyCodeToText(key_code, modifiers, &text, &error_msg));
47   return text;
48 }
49
50 }  // namespace
51
52 #if defined(OS_LINUX)
53 // Fails on bots: crbug.com/174962
54 #define MAYBE_KeyCodeToText DISABLED_KeyCodeToText
55 #else
56 #define MAYBE_KeyCodeToText KeyCodeToText
57 #endif
58
59 TEST(KeycodeTextConversionTest, MAYBE_KeyCodeToText) {
60   EXPECT_EQ("a", ConvertKeyCodeToTextNoError(ui::VKEY_A, 0));
61   EXPECT_EQ("A",
62       ConvertKeyCodeToTextNoError(ui::VKEY_A, kShiftKeyModifierMask));
63
64   EXPECT_EQ("1", ConvertKeyCodeToTextNoError(ui::VKEY_1, 0));
65   EXPECT_EQ("!",
66       ConvertKeyCodeToTextNoError(ui::VKEY_1, kShiftKeyModifierMask));
67
68   EXPECT_EQ(",", ConvertKeyCodeToTextNoError(ui::VKEY_OEM_COMMA, 0));
69   EXPECT_EQ("<", ConvertKeyCodeToTextNoError(
70       ui::VKEY_OEM_COMMA, kShiftKeyModifierMask));
71
72   EXPECT_EQ("", ConvertKeyCodeToTextNoError(ui::VKEY_F1, 0));
73   EXPECT_EQ("",
74       ConvertKeyCodeToTextNoError(ui::VKEY_F1, kShiftKeyModifierMask));
75
76   EXPECT_EQ("/", ConvertKeyCodeToTextNoError(ui::VKEY_DIVIDE, 0));
77   EXPECT_EQ("/",
78       ConvertKeyCodeToTextNoError(ui::VKEY_DIVIDE, kShiftKeyModifierMask));
79
80   EXPECT_EQ("", ConvertKeyCodeToTextNoError(ui::VKEY_SHIFT, 0));
81   EXPECT_EQ("",
82       ConvertKeyCodeToTextNoError(ui::VKEY_SHIFT, kShiftKeyModifierMask));
83 }
84
85 #if defined(OS_LINUX)
86 // Fails on bots: crbug.com/174962
87 #define MAYBE_CharToKeyCode DISABLED_CharToKeyCode
88 #else
89 #define MAYBE_CharToKeyCode CharToKeyCode
90 #endif
91
92 TEST(KeycodeTextConversionTest, MAYBE_CharToKeyCode) {
93   CheckCharToKeyCode('a', ui::VKEY_A, 0);
94   CheckCharToKeyCode('A', ui::VKEY_A, kShiftKeyModifierMask);
95
96   CheckCharToKeyCode('1', ui::VKEY_1, 0);
97   CheckCharToKeyCode('!', ui::VKEY_1, kShiftKeyModifierMask);
98
99   CheckCharToKeyCode(',', ui::VKEY_OEM_COMMA, 0);
100   CheckCharToKeyCode('<', ui::VKEY_OEM_COMMA, kShiftKeyModifierMask);
101
102   CheckCharToKeyCode('/', ui::VKEY_OEM_2, 0);
103   CheckCharToKeyCode('?', ui::VKEY_OEM_2, kShiftKeyModifierMask);
104
105   CheckCantConvertChar(L'\u00E9');
106   CheckCantConvertChar(L'\u2159');
107 }
108
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
113 #else
114 #define MAYBE_NonShiftModifiers NonShiftModifiers
115 #endif
116
117 TEST(KeycodeTextConversionTest, MAYBE_NonShiftModifiers) {
118   RestoreKeyboardLayoutOnDestruct restore;
119 #if defined(OS_WIN)
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));
128 #endif
129 }
130
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
135 #else
136 #define MAYBE_NonEnglish NonEnglish
137 #endif
138
139 TEST(KeycodeTextConversionTest, MAYBE_NonEnglish) {
140   RestoreKeyboardLayoutOnDestruct restore;
141 #if defined(OS_WIN)
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));
149 #endif
150 }