| 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 #include <vector> |
| 7 |
| 8 #include "base/string16.h" |
| 9 #include "base/utf_string_conversions.h" |
| 10 #include "chrome/test/webdriver/automation.h" |
| 11 #include "chrome/test/webdriver/webdriver_key_converter.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" |
| 13 |
| 14 namespace webdriver { |
| 15 |
| 16 void CheckEvents(const string16& keys, |
| 17 WebKeyEvent expected_events[], |
| 18 size_t expected_size) { |
| 19 std::vector<WebKeyEvent> events; |
| 20 ConvertKeysToWebKeyEvents(keys, &events); |
| 21 EXPECT_EQ(expected_size, events.size()); |
| 22 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].key_code, events[i].key_code); |
| 25 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].modifiers, events[i].modifiers); |
| 28 } |
| 29 } |
| 30 |
| 31 void CheckEvents(const std::string& keys, |
| 32 WebKeyEvent expected_events[], |
| 33 size_t expected_size) { |
| 34 CheckEvents(UTF8ToUTF16(keys), expected_events, expected_size); |
| 35 } |
| 36 |
| 37 TEST(WebDriverKeyConverter, SingleChar) { |
| 38 WebKeyEvent event_array[] = { |
| 39 CreateKeyDownEvent(ui::VKEY_H, 0), |
| 40 CreateCharEvent("h", "h", 0), |
| 41 CreateKeyUpEvent(ui::VKEY_H, 0)}; |
| 42 CheckEvents("h", event_array, arraysize(event_array)); |
| 43 } |
| 44 |
| 45 TEST(WebDriverKeyConverter, MultipleChars) { |
| 46 WebKeyEvent event_array[] = { |
| 47 CreateKeyDownEvent(ui::VKEY_H, 0), |
| 48 CreateCharEvent("h", "h", 0), |
| 49 CreateKeyUpEvent(ui::VKEY_H, 0), |
| 50 CreateKeyDownEvent(ui::VKEY_E, 0), |
| 51 CreateCharEvent("e", "e", 0), |
| 52 CreateKeyUpEvent(ui::VKEY_E, 0), |
| 53 CreateKeyDownEvent(ui::VKEY_Y, 0), |
| 54 CreateCharEvent("y", "y", 0), |
| 55 CreateKeyUpEvent(ui::VKEY_Y, 0)}; |
| 56 CheckEvents("hey", event_array, arraysize(event_array)); |
| 57 } |
| 58 |
| 59 TEST(WebDriverKeyConverter, WebDriverSpecialChar) { |
| 60 WebKeyEvent event_array[] = { |
| 61 CreateKeyDownEvent(ui::VKEY_SPACE, 0), |
| 62 CreateCharEvent(" ", " ", 0), |
| 63 CreateKeyUpEvent(ui::VKEY_SPACE, 0)}; |
| 64 string16 keys; |
| 65 keys.push_back(static_cast<char16>(0xE00DU)); |
| 66 CheckEvents(keys, event_array, arraysize(event_array)); |
| 67 } |
| 68 |
| 69 TEST(WebDriverKeyConverter, WebDriverSpecialNonCharKey) { |
| 70 WebKeyEvent event_array[] = { |
| 71 CreateKeyDownEvent(ui::VKEY_F1, 0), |
| 72 CreateKeyUpEvent(ui::VKEY_F1, 0)}; |
| 73 string16 keys; |
| 74 keys.push_back(static_cast<char16>(0xE031U)); |
| 75 CheckEvents(keys, event_array, arraysize(event_array)); |
| 76 } |
| 77 |
| 78 TEST(WebDriverKeyConverter, FrenchKeyOnEnglishLayout) { |
| 79 WebKeyEvent event_array[] = { |
| 80 CreateKeyDownEvent(ui::VKEY_UNKNOWN, 0), |
| 81 CreateCharEvent(WideToUTF8(L"\u00E9"), WideToUTF8(L"\u00E9"), 0), |
| 82 CreateKeyUpEvent(ui::VKEY_UNKNOWN, 0)}; |
| 83 CheckEvents(WideToUTF16(L"\u00E9"), event_array, arraysize(event_array)); |
| 84 } |
| 85 |
| 86 #if defined(OS_WIN) |
| 87 TEST(WebDriverKeyConverter, FrenchKeyOnFrenchLayout) { |
| 88 WebKeyEvent event_array[] = { |
| 89 CreateKeyDownEvent(ui::VKEY_2, 0), |
| 90 CreateCharEvent(WideToUTF8(L"\u00E9"), WideToUTF8(L"\u00E9"), 0), |
| 91 CreateKeyUpEvent(ui::VKEY_2, 0)}; |
| 92 HKL french_layout = ::LoadKeyboardLayout(L"0000040C", 0); |
| 93 ASSERT_TRUE(french_layout); |
| 94 HKL prev_layout = ::ActivateKeyboardLayout(french_layout, 0); |
| 95 CheckEvents(WideToUTF16(L"\u00E9"), event_array, arraysize(event_array)); |
| 96 ::ActivateKeyboardLayout(prev_layout, 0); |
| 97 } |
| 98 #endif |
| 99 |
| 100 TEST(WebDriverKeyConverter, UppercaseCharDoesShift) { |
| 101 WebKeyEvent event_array[] = { |
| 102 CreateKeyDownEvent(ui::VKEY_SHIFT, 0), |
| 103 CreateKeyDownEvent(ui::VKEY_A, automation::kShiftKeyMask), |
| 104 CreateCharEvent("a", "A", automation::kShiftKeyMask), |
| 105 CreateKeyUpEvent(ui::VKEY_A, automation::kShiftKeyMask), |
| 106 CreateKeyUpEvent(ui::VKEY_SHIFT, 0)}; |
| 107 CheckEvents("A", event_array, arraysize(event_array)); |
| 108 } |
| 109 |
| 110 TEST(WebDriverKeyConverter, UppercaseCharUsesShiftOnlyIfNecessary) { |
| 111 WebKeyEvent event_array[] = { |
| 112 CreateKeyDownEvent(ui::VKEY_SHIFT, automation::kShiftKeyMask), |
| 113 CreateKeyDownEvent(ui::VKEY_A, automation::kShiftKeyMask), |
| 114 CreateCharEvent("a", "A", automation::kShiftKeyMask), |
| 115 CreateKeyUpEvent(ui::VKEY_A, automation::kShiftKeyMask), |
| 116 CreateKeyDownEvent(ui::VKEY_B, automation::kShiftKeyMask), |
| 117 CreateCharEvent("b", "B", automation::kShiftKeyMask), |
| 118 CreateKeyUpEvent(ui::VKEY_B, automation::kShiftKeyMask), |
| 119 CreateKeyDownEvent(ui::VKEY_C, automation::kShiftKeyMask), |
| 120 CreateCharEvent("c", "C", automation::kShiftKeyMask), |
| 121 CreateKeyUpEvent(ui::VKEY_C, automation::kShiftKeyMask), |
| 122 CreateKeyUpEvent(ui::VKEY_SHIFT, 0)}; |
| 123 string16 keys; |
| 124 keys.push_back(static_cast<char16>(0xE008U)); |
| 125 keys.append(UTF8ToUTF16("aBc")); |
| 126 CheckEvents(keys, event_array, arraysize(event_array)); |
| 127 } |
| 128 |
| 129 TEST(WebDriverKeyConverter, ToggleModifiers) { |
| 130 WebKeyEvent event_array[] = { |
| 131 CreateKeyDownEvent(ui::VKEY_SHIFT, automation::kShiftKeyMask), |
| 132 CreateKeyUpEvent(ui::VKEY_SHIFT, 0), |
| 133 CreateKeyDownEvent(ui::VKEY_CONTROL, automation::kControlKeyMask), |
| 134 CreateKeyUpEvent(ui::VKEY_CONTROL, 0), |
| 135 CreateKeyDownEvent(ui::VKEY_MENU, automation::kAltKeyMask), |
| 136 CreateKeyUpEvent(ui::VKEY_MENU, 0), |
| 137 CreateKeyDownEvent(ui::VKEY_COMMAND, automation::kMetaKeyMask), |
| 138 CreateKeyUpEvent(ui::VKEY_COMMAND, 0)}; |
| 139 string16 keys; |
| 140 keys.push_back(static_cast<char16>(0xE008U)); |
| 141 keys.push_back(static_cast<char16>(0xE008U)); |
| 142 keys.push_back(static_cast<char16>(0xE009U)); |
| 143 keys.push_back(static_cast<char16>(0xE009U)); |
| 144 keys.push_back(static_cast<char16>(0xE00AU)); |
| 145 keys.push_back(static_cast<char16>(0xE00AU)); |
| 146 keys.push_back(static_cast<char16>(0xE03DU)); |
| 147 keys.push_back(static_cast<char16>(0xE03DU)); |
| 148 CheckEvents(keys, event_array, arraysize(event_array)); |
| 149 } |
| 150 |
| 151 } // namespace webdriver |
| OLD | NEW |