| 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 <list> | 5 #include <list> |
| 6 #include <string> | 6 #include <string> |
| 7 | 7 |
| 8 #include "base/strings/string16.h" | 8 #include "base/strings/string16.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "chrome/test/chromedriver/chrome/status.h" | 10 #include "chrome/test/chromedriver/chrome/status.h" |
| 11 #include "chrome/test/chromedriver/chrome/ui_events.h" | 11 #include "chrome/test/chromedriver/chrome/ui_events.h" |
| 12 #include "chrome/test/chromedriver/key_converter.h" | 12 #include "chrome/test/chromedriver/key_converter.h" |
| 13 #include "chrome/test/chromedriver/test_util.h" | 13 #include "chrome/test/chromedriver/test_util.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 | 15 |
| 16 namespace { | 16 namespace { |
| 17 | 17 |
| 18 void CheckEvents(const string16& keys, | 18 void CheckEvents(const base::string16& keys, |
| 19 KeyEvent expected_events[], | 19 KeyEvent expected_events[], |
| 20 bool release_modifiers, | 20 bool release_modifiers, |
| 21 size_t expected_size, | 21 size_t expected_size, |
| 22 int expected_modifiers) { | 22 int expected_modifiers) { |
| 23 int modifiers = 0; | 23 int modifiers = 0; |
| 24 std::list<KeyEvent> events; | 24 std::list<KeyEvent> events; |
| 25 EXPECT_EQ(kOk, ConvertKeysToKeyEvents(keys, release_modifiers, | 25 EXPECT_EQ(kOk, ConvertKeysToKeyEvents(keys, release_modifiers, |
| 26 &modifiers, &events).code()); | 26 &modifiers, &events).code()); |
| 27 EXPECT_EQ(expected_size, events.size()); | 27 EXPECT_EQ(expected_size, events.size()); |
| 28 size_t i = 0; | 28 size_t i = 0; |
| 29 std::list<KeyEvent>::const_iterator it = events.begin(); | 29 std::list<KeyEvent>::const_iterator it = events.begin(); |
| 30 while (i < expected_size && it != events.end()) { | 30 while (i < expected_size && it != events.end()) { |
| 31 EXPECT_EQ(expected_events[i].type, it->type); | 31 EXPECT_EQ(expected_events[i].type, it->type); |
| 32 EXPECT_EQ(expected_events[i].modifiers, it->modifiers); | 32 EXPECT_EQ(expected_events[i].modifiers, it->modifiers); |
| 33 EXPECT_EQ(expected_events[i].modified_text, it->modified_text); | 33 EXPECT_EQ(expected_events[i].modified_text, it->modified_text); |
| 34 EXPECT_EQ(expected_events[i].unmodified_text, it->unmodified_text); | 34 EXPECT_EQ(expected_events[i].unmodified_text, it->unmodified_text); |
| 35 EXPECT_EQ(expected_events[i].key_code, it->key_code); | 35 EXPECT_EQ(expected_events[i].key_code, it->key_code); |
| 36 | 36 |
| 37 ++i; | 37 ++i; |
| 38 ++it; | 38 ++it; |
| 39 } | 39 } |
| 40 EXPECT_EQ(expected_modifiers, modifiers); | 40 EXPECT_EQ(expected_modifiers, modifiers); |
| 41 } | 41 } |
| 42 | 42 |
| 43 void CheckEventsReleaseModifiers(const string16& keys, | 43 void CheckEventsReleaseModifiers(const base::string16& keys, |
| 44 KeyEvent expected_events[], | 44 KeyEvent expected_events[], |
| 45 size_t expected_size) { | 45 size_t expected_size) { |
| 46 CheckEvents(keys, expected_events, true /* release_modifier */, | 46 CheckEvents(keys, expected_events, true /* release_modifier */, |
| 47 expected_size, 0 /* expected_modifiers */); | 47 expected_size, 0 /* expected_modifiers */); |
| 48 } | 48 } |
| 49 | 49 |
| 50 void CheckEventsReleaseModifiers(const std::string& keys, | 50 void CheckEventsReleaseModifiers(const std::string& keys, |
| 51 KeyEvent expected_events[], | 51 KeyEvent expected_events[], |
| 52 size_t expected_size) { | 52 size_t expected_size) { |
| 53 CheckEventsReleaseModifiers(UTF8ToUTF16(keys), | 53 CheckEventsReleaseModifiers(UTF8ToUTF16(keys), |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 CreateCharEvent("y", "y", 0), | 128 CreateCharEvent("y", "y", 0), |
| 129 CreateKeyUpEvent(ui::VKEY_Y, 0)}; | 129 CreateKeyUpEvent(ui::VKEY_Y, 0)}; |
| 130 CheckEventsReleaseModifiers("hey", event_array, arraysize(event_array)); | 130 CheckEventsReleaseModifiers("hey", event_array, arraysize(event_array)); |
| 131 } | 131 } |
| 132 | 132 |
| 133 TEST(KeyConverter, WebDriverSpecialChar) { | 133 TEST(KeyConverter, WebDriverSpecialChar) { |
| 134 KeyEvent event_array[] = { | 134 KeyEvent event_array[] = { |
| 135 CreateKeyDownEvent(ui::VKEY_SPACE, 0), | 135 CreateKeyDownEvent(ui::VKEY_SPACE, 0), |
| 136 CreateCharEvent(" ", " ", 0), | 136 CreateCharEvent(" ", " ", 0), |
| 137 CreateKeyUpEvent(ui::VKEY_SPACE, 0)}; | 137 CreateKeyUpEvent(ui::VKEY_SPACE, 0)}; |
| 138 string16 keys; | 138 base::string16 keys; |
| 139 keys.push_back(static_cast<char16>(0xE00DU)); | 139 keys.push_back(static_cast<char16>(0xE00DU)); |
| 140 CheckEventsReleaseModifiers(keys, event_array, arraysize(event_array)); | 140 CheckEventsReleaseModifiers(keys, event_array, arraysize(event_array)); |
| 141 } | 141 } |
| 142 | 142 |
| 143 TEST(KeyConverter, WebDriverSpecialNonCharKey) { | 143 TEST(KeyConverter, WebDriverSpecialNonCharKey) { |
| 144 KeyEvent event_array[] = { | 144 KeyEvent event_array[] = { |
| 145 CreateKeyDownEvent(ui::VKEY_F1, 0), | 145 CreateKeyDownEvent(ui::VKEY_F1, 0), |
| 146 CreateKeyUpEvent(ui::VKEY_F1, 0)}; | 146 CreateKeyUpEvent(ui::VKEY_F1, 0)}; |
| 147 string16 keys; | 147 base::string16 keys; |
| 148 keys.push_back(static_cast<char16>(0xE031U)); | 148 keys.push_back(static_cast<char16>(0xE031U)); |
| 149 CheckEventsReleaseModifiers(keys, event_array, arraysize(event_array)); | 149 CheckEventsReleaseModifiers(keys, event_array, arraysize(event_array)); |
| 150 } | 150 } |
| 151 | 151 |
| 152 TEST(KeyConverter, FrenchKeyOnEnglishLayout) { | 152 TEST(KeyConverter, FrenchKeyOnEnglishLayout) { |
| 153 KeyEvent event_array[] = { | 153 KeyEvent event_array[] = { |
| 154 CreateKeyDownEvent(ui::VKEY_UNKNOWN, 0), | 154 CreateKeyDownEvent(ui::VKEY_UNKNOWN, 0), |
| 155 CreateCharEvent(WideToUTF8(L"\u00E9"), WideToUTF8(L"\u00E9"), 0), | 155 CreateCharEvent(WideToUTF8(L"\u00E9"), WideToUTF8(L"\u00E9"), 0), |
| 156 CreateKeyUpEvent(ui::VKEY_UNKNOWN, 0)}; | 156 CreateKeyUpEvent(ui::VKEY_UNKNOWN, 0)}; |
| 157 CheckEventsReleaseModifiers(WideToUTF16(L"\u00E9"), | 157 CheckEventsReleaseModifiers(WideToUTF16(L"\u00E9"), |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 CreateKeyDownEvent(ui::VKEY_A, kShiftKeyModifierMask), | 201 CreateKeyDownEvent(ui::VKEY_A, kShiftKeyModifierMask), |
| 202 CreateCharEvent("a", "A", kShiftKeyModifierMask), | 202 CreateCharEvent("a", "A", kShiftKeyModifierMask), |
| 203 CreateKeyUpEvent(ui::VKEY_A, kShiftKeyModifierMask), | 203 CreateKeyUpEvent(ui::VKEY_A, kShiftKeyModifierMask), |
| 204 CreateKeyDownEvent(ui::VKEY_B, kShiftKeyModifierMask), | 204 CreateKeyDownEvent(ui::VKEY_B, kShiftKeyModifierMask), |
| 205 CreateCharEvent("b", "B", kShiftKeyModifierMask), | 205 CreateCharEvent("b", "B", kShiftKeyModifierMask), |
| 206 CreateKeyUpEvent(ui::VKEY_B, kShiftKeyModifierMask), | 206 CreateKeyUpEvent(ui::VKEY_B, kShiftKeyModifierMask), |
| 207 CreateKeyDownEvent(ui::VKEY_C, kShiftKeyModifierMask), | 207 CreateKeyDownEvent(ui::VKEY_C, kShiftKeyModifierMask), |
| 208 CreateCharEvent("c", "C", kShiftKeyModifierMask), | 208 CreateCharEvent("c", "C", kShiftKeyModifierMask), |
| 209 CreateKeyUpEvent(ui::VKEY_C, kShiftKeyModifierMask), | 209 CreateKeyUpEvent(ui::VKEY_C, kShiftKeyModifierMask), |
| 210 CreateKeyUpEvent(ui::VKEY_SHIFT, 0)}; | 210 CreateKeyUpEvent(ui::VKEY_SHIFT, 0)}; |
| 211 string16 keys; | 211 base::string16 keys; |
| 212 keys.push_back(static_cast<char16>(0xE008U)); | 212 keys.push_back(static_cast<char16>(0xE008U)); |
| 213 keys.append(UTF8ToUTF16("aBc")); | 213 keys.append(UTF8ToUTF16("aBc")); |
| 214 CheckEventsReleaseModifiers(keys, event_array, arraysize(event_array)); | 214 CheckEventsReleaseModifiers(keys, event_array, arraysize(event_array)); |
| 215 } | 215 } |
| 216 | 216 |
| 217 TEST(KeyConverter, ToggleModifiers) { | 217 TEST(KeyConverter, ToggleModifiers) { |
| 218 KeyEvent event_array[] = { | 218 KeyEvent event_array[] = { |
| 219 CreateKeyDownEvent(ui::VKEY_SHIFT, kShiftKeyModifierMask), | 219 CreateKeyDownEvent(ui::VKEY_SHIFT, kShiftKeyModifierMask), |
| 220 CreateKeyUpEvent(ui::VKEY_SHIFT, 0), | 220 CreateKeyUpEvent(ui::VKEY_SHIFT, 0), |
| 221 CreateKeyDownEvent(ui::VKEY_CONTROL, kControlKeyModifierMask), | 221 CreateKeyDownEvent(ui::VKEY_CONTROL, kControlKeyModifierMask), |
| 222 CreateKeyUpEvent(ui::VKEY_CONTROL, 0), | 222 CreateKeyUpEvent(ui::VKEY_CONTROL, 0), |
| 223 CreateKeyDownEvent(ui::VKEY_MENU, kAltKeyModifierMask), | 223 CreateKeyDownEvent(ui::VKEY_MENU, kAltKeyModifierMask), |
| 224 CreateKeyUpEvent(ui::VKEY_MENU, 0), | 224 CreateKeyUpEvent(ui::VKEY_MENU, 0), |
| 225 CreateKeyDownEvent(ui::VKEY_COMMAND, kMetaKeyModifierMask), | 225 CreateKeyDownEvent(ui::VKEY_COMMAND, kMetaKeyModifierMask), |
| 226 CreateKeyUpEvent(ui::VKEY_COMMAND, 0)}; | 226 CreateKeyUpEvent(ui::VKEY_COMMAND, 0)}; |
| 227 string16 keys; | 227 base::string16 keys; |
| 228 keys.push_back(static_cast<char16>(0xE008U)); | 228 keys.push_back(static_cast<char16>(0xE008U)); |
| 229 keys.push_back(static_cast<char16>(0xE008U)); | 229 keys.push_back(static_cast<char16>(0xE008U)); |
| 230 keys.push_back(static_cast<char16>(0xE009U)); | 230 keys.push_back(static_cast<char16>(0xE009U)); |
| 231 keys.push_back(static_cast<char16>(0xE009U)); | 231 keys.push_back(static_cast<char16>(0xE009U)); |
| 232 keys.push_back(static_cast<char16>(0xE00AU)); | 232 keys.push_back(static_cast<char16>(0xE00AU)); |
| 233 keys.push_back(static_cast<char16>(0xE00AU)); | 233 keys.push_back(static_cast<char16>(0xE00AU)); |
| 234 keys.push_back(static_cast<char16>(0xE03DU)); | 234 keys.push_back(static_cast<char16>(0xE03DU)); |
| 235 keys.push_back(static_cast<char16>(0xE03DU)); | 235 keys.push_back(static_cast<char16>(0xE03DU)); |
| 236 CheckEventsReleaseModifiers(keys, event_array, arraysize(event_array)); | 236 CheckEventsReleaseModifiers(keys, event_array, arraysize(event_array)); |
| 237 } | 237 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 } | 269 } |
| 270 | 270 |
| 271 #if defined(OS_LINUX) | 271 #if defined(OS_LINUX) |
| 272 // Fails on bots: crbug.com/174962 | 272 // Fails on bots: crbug.com/174962 |
| 273 #define MAYBE_AllEnglishKeyboardSymbols DISABLED_AllEnglishKeyboardSymbols | 273 #define MAYBE_AllEnglishKeyboardSymbols DISABLED_AllEnglishKeyboardSymbols |
| 274 #else | 274 #else |
| 275 #define MAYBE_AllEnglishKeyboardSymbols AllEnglishKeyboardSymbols | 275 #define MAYBE_AllEnglishKeyboardSymbols AllEnglishKeyboardSymbols |
| 276 #endif | 276 #endif |
| 277 | 277 |
| 278 TEST(KeyConverter, MAYBE_AllEnglishKeyboardSymbols) { | 278 TEST(KeyConverter, MAYBE_AllEnglishKeyboardSymbols) { |
| 279 string16 keys; | 279 base::string16 keys; |
| 280 const ui::KeyboardCode kSymbolKeyCodes[] = { | 280 const ui::KeyboardCode kSymbolKeyCodes[] = { |
| 281 ui::VKEY_OEM_3, | 281 ui::VKEY_OEM_3, |
| 282 ui::VKEY_OEM_MINUS, | 282 ui::VKEY_OEM_MINUS, |
| 283 ui::VKEY_OEM_PLUS, | 283 ui::VKEY_OEM_PLUS, |
| 284 ui::VKEY_OEM_4, | 284 ui::VKEY_OEM_4, |
| 285 ui::VKEY_OEM_6, | 285 ui::VKEY_OEM_6, |
| 286 ui::VKEY_OEM_5, | 286 ui::VKEY_OEM_5, |
| 287 ui::VKEY_OEM_1, | 287 ui::VKEY_OEM_1, |
| 288 ui::VKEY_OEM_7, | 288 ui::VKEY_OEM_7, |
| 289 ui::VKEY_OEM_COMMA, | 289 ui::VKEY_OEM_COMMA, |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x7F, ';', '=', | 337 ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x7F, ';', '=', |
| 338 #else | 338 #else |
| 339 0, 0, 0, 0, 0, 0, '\r', '\r', 0, 0, 0, 0, 0, | 339 0, 0, 0, 0, 0, 0, '\r', '\r', 0, 0, 0, 0, 0, |
| 340 ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ';', '=', | 340 ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ';', '=', |
| 341 #endif | 341 #endif |
| 342 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', | 342 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', |
| 343 '*', '+', ',', '-', '.', '/'}; | 343 '*', '+', ',', '-', '.', '/'}; |
| 344 for (size_t i = 0; i <= 0x3D; ++i) { | 344 for (size_t i = 0; i <= 0x3D; ++i) { |
| 345 if (i > 0x29 && i < 0x31) | 345 if (i > 0x29 && i < 0x31) |
| 346 continue; | 346 continue; |
| 347 string16 keys; | 347 base::string16 keys; |
| 348 int modifiers = 0; | 348 int modifiers = 0; |
| 349 keys.push_back(0xE000U + i); | 349 keys.push_back(0xE000U + i); |
| 350 std::list<KeyEvent> events; | 350 std::list<KeyEvent> events; |
| 351 if (i == 1) { | 351 if (i == 1) { |
| 352 EXPECT_NE(kOk, ConvertKeysToKeyEvents(keys, | 352 EXPECT_NE(kOk, ConvertKeysToKeyEvents(keys, |
| 353 true /* release_modifiers*/, | 353 true /* release_modifiers*/, |
| 354 &modifiers, &events).code()) | 354 &modifiers, &events).code()) |
| 355 << "Index: " << i; | 355 << "Index: " << i; |
| 356 EXPECT_EQ(0u, events.size()) << "Index: " << i; | 356 EXPECT_EQ(0u, events.size()) << "Index: " << i; |
| 357 } else { | 357 } else { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 378 TEST(KeyConverter, ModifiersState) { | 378 TEST(KeyConverter, ModifiersState) { |
| 379 int shift_key_modifier = kShiftKeyModifierMask; | 379 int shift_key_modifier = kShiftKeyModifierMask; |
| 380 int control_key_modifier = shift_key_modifier | kControlKeyModifierMask; | 380 int control_key_modifier = shift_key_modifier | kControlKeyModifierMask; |
| 381 int alt_key_modifier = control_key_modifier | kAltKeyModifierMask; | 381 int alt_key_modifier = control_key_modifier | kAltKeyModifierMask; |
| 382 int meta_key_modifier = alt_key_modifier | kMetaKeyModifierMask; | 382 int meta_key_modifier = alt_key_modifier | kMetaKeyModifierMask; |
| 383 KeyEvent event_array[] = { | 383 KeyEvent event_array[] = { |
| 384 CreateKeyDownEvent(ui::VKEY_SHIFT, shift_key_modifier), | 384 CreateKeyDownEvent(ui::VKEY_SHIFT, shift_key_modifier), |
| 385 CreateKeyDownEvent(ui::VKEY_CONTROL, control_key_modifier), | 385 CreateKeyDownEvent(ui::VKEY_CONTROL, control_key_modifier), |
| 386 CreateKeyDownEvent(ui::VKEY_MENU, alt_key_modifier), | 386 CreateKeyDownEvent(ui::VKEY_MENU, alt_key_modifier), |
| 387 CreateKeyDownEvent(ui::VKEY_COMMAND, meta_key_modifier)}; | 387 CreateKeyDownEvent(ui::VKEY_COMMAND, meta_key_modifier)}; |
| 388 string16 keys; | 388 base::string16 keys; |
| 389 keys.push_back(static_cast<char16>(0xE008U)); | 389 keys.push_back(static_cast<char16>(0xE008U)); |
| 390 keys.push_back(static_cast<char16>(0xE009U)); | 390 keys.push_back(static_cast<char16>(0xE009U)); |
| 391 keys.push_back(static_cast<char16>(0xE00AU)); | 391 keys.push_back(static_cast<char16>(0xE00AU)); |
| 392 keys.push_back(static_cast<char16>(0xE03DU)); | 392 keys.push_back(static_cast<char16>(0xE03DU)); |
| 393 | 393 |
| 394 CheckEvents(keys, event_array, false /* release_modifiers */, | 394 CheckEvents(keys, event_array, false /* release_modifiers */, |
| 395 arraysize(event_array), meta_key_modifier); | 395 arraysize(event_array), meta_key_modifier); |
| 396 } | 396 } |
| 397 | 397 |
| 398 TEST(KeyConverter, ReleaseModifiers) { | 398 TEST(KeyConverter, ReleaseModifiers) { |
| 399 KeyEvent event_array[] = { | 399 KeyEvent event_array[] = { |
| 400 CreateKeyDownEvent(ui::VKEY_SHIFT, kShiftKeyModifierMask), | 400 CreateKeyDownEvent(ui::VKEY_SHIFT, kShiftKeyModifierMask), |
| 401 CreateKeyDownEvent(ui::VKEY_CONTROL, | 401 CreateKeyDownEvent(ui::VKEY_CONTROL, |
| 402 kShiftKeyModifierMask | kControlKeyModifierMask), | 402 kShiftKeyModifierMask | kControlKeyModifierMask), |
| 403 CreateKeyUpEvent(ui::VKEY_SHIFT, 0), | 403 CreateKeyUpEvent(ui::VKEY_SHIFT, 0), |
| 404 CreateKeyUpEvent(ui::VKEY_CONTROL, 0)}; | 404 CreateKeyUpEvent(ui::VKEY_CONTROL, 0)}; |
| 405 string16 keys; | 405 base::string16 keys; |
| 406 keys.push_back(static_cast<char16>(0xE008U)); | 406 keys.push_back(static_cast<char16>(0xE008U)); |
| 407 keys.push_back(static_cast<char16>(0xE009U)); | 407 keys.push_back(static_cast<char16>(0xE009U)); |
| 408 | 408 |
| 409 CheckEvents(keys, event_array, true /* release_modifiers */, | 409 CheckEvents(keys, event_array, true /* release_modifiers */, |
| 410 arraysize(event_array), 0); | 410 arraysize(event_array), 0); |
| 411 } | 411 } |
| OLD | NEW |