| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/string16.h" | 8 #include "base/string16.h" |
| 9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
| 10 #include "chrome/test/automation/automation_json_requests.h" | 10 #include "chrome/test/automation/automation_json_requests.h" |
| 11 #include "chrome/test/webdriver/webdriver_key_converter.h" | 11 #include "chrome/test/webdriver/webdriver_key_converter.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 13 | 13 |
| 14 namespace webdriver { | 14 namespace webdriver { |
| 15 | 15 |
| 16 void CheckEvents(const string16& keys, | 16 void CheckEvents(const string16& keys, |
| 17 WebKeyEvent expected_events[], | 17 WebKeyEvent expected_events[], |
| 18 size_t expected_size) { | 18 size_t expected_size) { |
| 19 std::vector<WebKeyEvent> events; | 19 std::vector<WebKeyEvent> events; |
| 20 ConvertKeysToWebKeyEvents(keys, &events); | 20 std::string error_msg; |
| 21 EXPECT_TRUE(ConvertKeysToWebKeyEvents(keys, &events, &error_msg)); |
| 21 EXPECT_EQ(expected_size, events.size()); | 22 EXPECT_EQ(expected_size, events.size()); |
| 22 for (size_t i = 0; i < events.size() && i < expected_size; ++i) { | 23 for (size_t i = 0; i < events.size() && i < expected_size; ++i) { |
| 23 EXPECT_EQ(expected_events[i].type, events[i].type); | 24 EXPECT_EQ(expected_events[i].type, events[i].type); |
| 24 EXPECT_EQ(expected_events[i].key_code, events[i].key_code); | 25 EXPECT_EQ(expected_events[i].key_code, events[i].key_code); |
| 25 EXPECT_EQ(expected_events[i].unmodified_text, events[i].unmodified_text); | 26 EXPECT_EQ(expected_events[i].unmodified_text, events[i].unmodified_text); |
| 26 EXPECT_EQ(expected_events[i].modified_text, events[i].modified_text); | 27 EXPECT_EQ(expected_events[i].modified_text, events[i].modified_text); |
| 27 EXPECT_EQ(expected_events[i].modifiers, events[i].modifiers); | 28 EXPECT_EQ(expected_events[i].modifiers, events[i].modifiers); |
| 28 } | 29 } |
| 29 } | 30 } |
| 30 | 31 |
| 31 void CheckEvents(const std::string& keys, | 32 void CheckEvents(const std::string& keys, |
| 32 WebKeyEvent expected_events[], | 33 WebKeyEvent expected_events[], |
| 33 size_t expected_size) { | 34 size_t expected_size) { |
| 34 CheckEvents(UTF8ToUTF16(keys), expected_events, expected_size); | 35 CheckEvents(UTF8ToUTF16(keys), expected_events, expected_size); |
| 35 } | 36 } |
| 36 | 37 |
| 37 void CheckNonShiftChar(ui::KeyboardCode key_code, char character) { | 38 void CheckNonShiftChar(ui::KeyboardCode key_code, char character) { |
| 38 std::string char_string; | 39 std::string char_string; |
| 39 char_string.push_back(character); | 40 char_string.push_back(character); |
| 40 std::vector<WebKeyEvent> events; | 41 std::vector<WebKeyEvent> events; |
| 41 ConvertKeysToWebKeyEvents(ASCIIToUTF16(char_string), &events); | 42 std::string error_msg; |
| 43 EXPECT_TRUE(ConvertKeysToWebKeyEvents(ASCIIToUTF16(char_string), &events, |
| 44 &error_msg)); |
| 42 ASSERT_EQ(3u, events.size()) << "Char: " << character; | 45 ASSERT_EQ(3u, events.size()) << "Char: " << character; |
| 43 EXPECT_EQ(key_code, events[0].key_code) << "Char: " << character; | 46 EXPECT_EQ(key_code, events[0].key_code) << "Char: " << character; |
| 44 ASSERT_EQ(1u, events[1].modified_text.length()) << "Char: " << character; | 47 ASSERT_EQ(1u, events[1].modified_text.length()) << "Char: " << character; |
| 45 ASSERT_EQ(1u, events[1].unmodified_text.length()) << "Char: " << character; | 48 ASSERT_EQ(1u, events[1].unmodified_text.length()) << "Char: " << character; |
| 46 EXPECT_EQ(character, events[1].modified_text[0]) << "Char: " << character; | 49 EXPECT_EQ(character, events[1].modified_text[0]) << "Char: " << character; |
| 47 EXPECT_EQ(character, events[1].unmodified_text[0]) << "Char: " << character; | 50 EXPECT_EQ(character, events[1].unmodified_text[0]) << "Char: " << character; |
| 48 EXPECT_EQ(key_code, events[2].key_code) << "Char: " << character; | 51 EXPECT_EQ(key_code, events[2].key_code) << "Char: " << character; |
| 49 } | 52 } |
| 50 | 53 |
| 51 void CheckShiftChar(ui::KeyboardCode key_code, char character, char lower) { | 54 void CheckShiftChar(ui::KeyboardCode key_code, char character, char lower) { |
| 52 std::string char_string; | 55 std::string char_string; |
| 53 char_string.push_back(character); | 56 char_string.push_back(character); |
| 54 std::vector<WebKeyEvent> events; | 57 std::vector<WebKeyEvent> events; |
| 55 ConvertKeysToWebKeyEvents(ASCIIToUTF16(char_string), &events); | 58 std::string error_msg; |
| 59 EXPECT_TRUE(ConvertKeysToWebKeyEvents(ASCIIToUTF16(char_string), &events, |
| 60 &error_msg)); |
| 56 ASSERT_EQ(5u, events.size()) << "Char: " << character; | 61 ASSERT_EQ(5u, events.size()) << "Char: " << character; |
| 57 EXPECT_EQ(ui::VKEY_SHIFT, events[0].key_code) << "Char: " << character; | 62 EXPECT_EQ(ui::VKEY_SHIFT, events[0].key_code) << "Char: " << character; |
| 58 EXPECT_EQ(key_code, events[1].key_code) << "Char: " << character; | 63 EXPECT_EQ(key_code, events[1].key_code) << "Char: " << character; |
| 59 ASSERT_EQ(1u, events[2].modified_text.length()) << "Char: " << character; | 64 ASSERT_EQ(1u, events[2].modified_text.length()) << "Char: " << character; |
| 60 ASSERT_EQ(1u, events[2].unmodified_text.length()) << "Char: " << character; | 65 ASSERT_EQ(1u, events[2].unmodified_text.length()) << "Char: " << character; |
| 61 EXPECT_EQ(character, events[2].modified_text[0]) << "Char: " << character; | 66 EXPECT_EQ(character, events[2].modified_text[0]) << "Char: " << character; |
| 62 EXPECT_EQ(lower, events[2].unmodified_text[0]) << "Char: " << character; | 67 EXPECT_EQ(lower, events[2].unmodified_text[0]) << "Char: " << character; |
| 63 EXPECT_EQ(key_code, events[3].key_code) << "Char: " << character; | 68 EXPECT_EQ(key_code, events[3].key_code) << "Char: " << character; |
| 64 EXPECT_EQ(ui::VKEY_SHIFT, events[4].key_code) << "Char: " << character; | 69 EXPECT_EQ(ui::VKEY_SHIFT, events[4].key_code) << "Char: " << character; |
| 65 } | 70 } |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 keys.push_back(static_cast<char16>(0xE008U)); | 194 keys.push_back(static_cast<char16>(0xE008U)); |
| 190 keys.push_back(static_cast<char16>(0xE009U)); | 195 keys.push_back(static_cast<char16>(0xE009U)); |
| 191 keys.push_back(static_cast<char16>(0xE009U)); | 196 keys.push_back(static_cast<char16>(0xE009U)); |
| 192 keys.push_back(static_cast<char16>(0xE00AU)); | 197 keys.push_back(static_cast<char16>(0xE00AU)); |
| 193 keys.push_back(static_cast<char16>(0xE00AU)); | 198 keys.push_back(static_cast<char16>(0xE00AU)); |
| 194 keys.push_back(static_cast<char16>(0xE03DU)); | 199 keys.push_back(static_cast<char16>(0xE03DU)); |
| 195 keys.push_back(static_cast<char16>(0xE03DU)); | 200 keys.push_back(static_cast<char16>(0xE03DU)); |
| 196 CheckEvents(keys, event_array, arraysize(event_array)); | 201 CheckEvents(keys, event_array, arraysize(event_array)); |
| 197 } | 202 } |
| 198 | 203 |
| 204 TEST(WebDriverKeyConverter, AllShorthandKeys) { |
| 205 WebKeyEvent event_array[] = { |
| 206 CreateKeyDownEvent(ui::VKEY_RETURN, 0), |
| 207 CreateCharEvent("\r", "\r", 0), |
| 208 CreateKeyUpEvent(ui::VKEY_RETURN, 0), |
| 209 CreateKeyDownEvent(ui::VKEY_RETURN, 0), |
| 210 CreateCharEvent("\r", "\r", 0), |
| 211 CreateKeyUpEvent(ui::VKEY_RETURN, 0), |
| 212 CreateKeyDownEvent(ui::VKEY_TAB, 0), |
| 213 CreateKeyUpEvent(ui::VKEY_TAB, 0), |
| 214 CreateKeyDownEvent(ui::VKEY_BACK, 0), |
| 215 CreateKeyUpEvent(ui::VKEY_BACK, 0), |
| 216 CreateKeyDownEvent(ui::VKEY_SPACE, 0), |
| 217 CreateCharEvent(" ", " ", 0), |
| 218 CreateKeyUpEvent(ui::VKEY_SPACE, 0)}; |
| 219 CheckEvents("\n\r\n\t\b ", event_array, arraysize(event_array)); |
| 220 } |
| 221 |
| 199 TEST(WebDriverKeyConverter, AllEnglishKeyboardSymbols) { | 222 TEST(WebDriverKeyConverter, AllEnglishKeyboardSymbols) { |
| 200 string16 keys; | 223 string16 keys; |
| 201 const ui::KeyboardCode kSymbolKeyCodes[] = { | 224 const ui::KeyboardCode kSymbolKeyCodes[] = { |
| 202 ui::VKEY_OEM_3, | 225 ui::VKEY_OEM_3, |
| 203 ui::VKEY_OEM_MINUS, | 226 ui::VKEY_OEM_MINUS, |
| 204 ui::VKEY_OEM_PLUS, | 227 ui::VKEY_OEM_PLUS, |
| 205 ui::VKEY_OEM_4, | 228 ui::VKEY_OEM_4, |
| 206 ui::VKEY_OEM_6, | 229 ui::VKEY_OEM_6, |
| 207 ui::VKEY_OEM_5, | 230 ui::VKEY_OEM_5, |
| 208 ui::VKEY_OEM_1, | 231 ui::VKEY_OEM_1, |
| (...skipping 27 matching lines...) Expand all Loading... |
| 236 offset = ui::VKEY_0; | 259 offset = ui::VKEY_0; |
| 237 else | 260 else |
| 238 offset = ui::VKEY_0 + 7; | 261 offset = ui::VKEY_0 + 7; |
| 239 ui::KeyboardCode expected_code = static_cast<ui::KeyboardCode>(offset + i); | 262 ui::KeyboardCode expected_code = static_cast<ui::KeyboardCode>(offset + i); |
| 240 CheckShiftChar(expected_code, kUpperChars[i], kLowerChars[i]); | 263 CheckShiftChar(expected_code, kUpperChars[i], kLowerChars[i]); |
| 241 } | 264 } |
| 242 } | 265 } |
| 243 | 266 |
| 244 TEST(WebDriverKeyConverter, AllSpecialWebDriverKeysOnEnglishKeyboard) { | 267 TEST(WebDriverKeyConverter, AllSpecialWebDriverKeysOnEnglishKeyboard) { |
| 245 const char kTextKeys[] = { | 268 const char kTextKeys[] = { |
| 246 ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ';', '=', '0', '1', '2', '3', '4', '5', | 269 0, 0, 0, 0, 0, 0, '\r', '\r', 0, 0, 0, 0, 0, ' ', 0, 0, 0, 0, 0, 0, 0, 0, |
| 247 '6', '7', '8', '9', '*', '+', ',', '-', '.', '/'}; | 270 0, 0, ';', '=', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', |
| 271 '*', '+', ',', '-', '.', '/'}; |
| 248 for (size_t i = 0; i <= 0x3D; ++i) { | 272 for (size_t i = 0; i <= 0x3D; ++i) { |
| 249 if (i > 0x29 && i < 0x31) | 273 if (i > 0x29 && i < 0x31) |
| 250 continue; | 274 continue; |
| 251 string16 keys; | 275 string16 keys; |
| 252 keys.push_back(0xE000U + i); | 276 keys.push_back(0xE000U + i); |
| 253 std::vector<WebKeyEvent> events; | 277 std::vector<WebKeyEvent> events; |
| 254 ConvertKeysToWebKeyEvents(keys, &events); | 278 std::string error_msg; |
| 255 if (i == 0xD || (i >= 0x18 && i <= 0x29)) { | 279 if (i == 1) { |
| 256 ASSERT_EQ(3u, events.size()) << "Index: " << i; | 280 EXPECT_FALSE(ConvertKeysToWebKeyEvents(keys, &events, &error_msg)) |
| 257 ASSERT_EQ(1u, events[1].unmodified_text.length()) << "Index: " << i; | |
| 258 EXPECT_EQ(kTextKeys[i - 0xD], events[1].unmodified_text[0]) | |
| 259 << "Index: " << i; | 281 << "Index: " << i; |
| 260 } else if (i < 2) { | |
| 261 EXPECT_EQ(0u, events.size()) << "Index: " << i; | 282 EXPECT_EQ(0u, events.size()) << "Index: " << i; |
| 262 } else { | 283 } else { |
| 263 EXPECT_EQ(2u, events.size()) << "Index: " << i; | 284 EXPECT_TRUE(ConvertKeysToWebKeyEvents(keys, &events, &error_msg)) |
| 285 << "Index: " << i; |
| 286 if (i == 0) { |
| 287 EXPECT_EQ(0u, events.size()) << "Index: " << i; |
| 288 } else if (i == 6 || i == 7 || i == 0xD || (i >= 0x18 && i <= 0x29)) { |
| 289 ASSERT_EQ(3u, events.size()) << "Index: " << i; |
| 290 ASSERT_EQ(1u, events[1].unmodified_text.length()) << "Index: " << i; |
| 291 EXPECT_EQ(kTextKeys[i], events[1].unmodified_text[0]) |
| 292 << "Index: " << i; |
| 293 } else { |
| 294 EXPECT_EQ(2u, events.size()) << "Index: " << i; |
| 295 } |
| 264 } | 296 } |
| 265 } | 297 } |
| 266 } | 298 } |
| 267 | 299 |
| 268 } // namespace webdriver | 300 } // namespace webdriver |
| OLD | NEW |