Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Side by Side Diff: chrome/test/webdriver/webdriver_key_converter_unittest.cc

Issue 6482014: Implement sendKeys webdriver API in ChromeDriver. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698