Chromium Code Reviews| Index: chrome/test/webdriver/webdriver_key_converter_unittest.cc |
| =================================================================== |
| --- chrome/test/webdriver/webdriver_key_converter_unittest.cc (revision 0) |
| +++ chrome/test/webdriver/webdriver_key_converter_unittest.cc (revision 0) |
| @@ -0,0 +1,151 @@ |
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
|
Jason Leyba
2011/02/11 19:32:01
You didn't add this to chromedriver_unittests in c
|
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include <string> |
| +#include <vector> |
| + |
| +#include "base/string16.h" |
| +#include "base/utf_string_conversions.h" |
| +#include "chrome/test/webdriver/automation.h" |
| +#include "chrome/test/webdriver/webdriver_key_converter.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +namespace webdriver { |
| + |
| +void CheckEvents(const string16& keys, |
| + WebKeyEvent expected_events[], |
| + size_t expected_size) { |
| + std::vector<WebKeyEvent> events; |
| + ConvertKeysToWebKeyEvents(keys, &events); |
| + EXPECT_EQ(expected_size, events.size()); |
| + for (size_t i = 0; i < events.size() && i < expected_size; ++i) { |
| + EXPECT_EQ(expected_events[i].type, events[i].type); |
| + EXPECT_EQ(expected_events[i].key_code, events[i].key_code); |
| + EXPECT_EQ(expected_events[i].unmodified_text, events[i].unmodified_text); |
| + EXPECT_EQ(expected_events[i].modified_text, events[i].modified_text); |
| + EXPECT_EQ(expected_events[i].modifiers, events[i].modifiers); |
| + } |
| +} |
| + |
| +void CheckEvents(const std::string& keys, |
| + WebKeyEvent expected_events[], |
| + size_t expected_size) { |
| + CheckEvents(UTF8ToUTF16(keys), expected_events, expected_size); |
| +} |
| + |
| +TEST(WebDriverKeyConverter, SingleChar) { |
| + WebKeyEvent event_array[] = { |
| + CreateKeyDownEvent(ui::VKEY_H, 0), |
| + CreateCharEvent("h", "h", 0), |
| + CreateKeyUpEvent(ui::VKEY_H, 0)}; |
| + CheckEvents("h", event_array, arraysize(event_array)); |
| +} |
| + |
| +TEST(WebDriverKeyConverter, MultipleChars) { |
| + WebKeyEvent event_array[] = { |
| + CreateKeyDownEvent(ui::VKEY_H, 0), |
| + CreateCharEvent("h", "h", 0), |
| + CreateKeyUpEvent(ui::VKEY_H, 0), |
| + CreateKeyDownEvent(ui::VKEY_E, 0), |
| + CreateCharEvent("e", "e", 0), |
| + CreateKeyUpEvent(ui::VKEY_E, 0), |
| + CreateKeyDownEvent(ui::VKEY_Y, 0), |
| + CreateCharEvent("y", "y", 0), |
| + CreateKeyUpEvent(ui::VKEY_Y, 0)}; |
| + CheckEvents("hey", event_array, arraysize(event_array)); |
| +} |
| + |
| +TEST(WebDriverKeyConverter, WebDriverSpecialChar) { |
| + WebKeyEvent event_array[] = { |
| + CreateKeyDownEvent(ui::VKEY_SPACE, 0), |
| + CreateCharEvent(" ", " ", 0), |
| + CreateKeyUpEvent(ui::VKEY_SPACE, 0)}; |
| + string16 keys; |
| + keys.push_back(static_cast<char16>(0xE00DU)); |
| + CheckEvents(keys, event_array, arraysize(event_array)); |
| +} |
| + |
| +TEST(WebDriverKeyConverter, WebDriverSpecialNonCharKey) { |
| + WebKeyEvent event_array[] = { |
| + CreateKeyDownEvent(ui::VKEY_F1, 0), |
| + CreateKeyUpEvent(ui::VKEY_F1, 0)}; |
| + string16 keys; |
| + keys.push_back(static_cast<char16>(0xE031U)); |
| + CheckEvents(keys, event_array, arraysize(event_array)); |
| +} |
| + |
| +TEST(WebDriverKeyConverter, FrenchKeyOnEnglishLayout) { |
| + WebKeyEvent event_array[] = { |
| + CreateKeyDownEvent(ui::VKEY_UNKNOWN, 0), |
| + CreateCharEvent(WideToUTF8(L"\u00E9"), WideToUTF8(L"\u00E9"), 0), |
| + CreateKeyUpEvent(ui::VKEY_UNKNOWN, 0)}; |
| + CheckEvents(WideToUTF16(L"\u00E9"), event_array, arraysize(event_array)); |
| +} |
| + |
| +#if defined(OS_WIN) |
| +TEST(WebDriverKeyConverter, FrenchKeyOnFrenchLayout) { |
| + WebKeyEvent event_array[] = { |
| + CreateKeyDownEvent(ui::VKEY_2, 0), |
| + CreateCharEvent(WideToUTF8(L"\u00E9"), WideToUTF8(L"\u00E9"), 0), |
| + CreateKeyUpEvent(ui::VKEY_2, 0)}; |
| + HKL french_layout = ::LoadKeyboardLayout(L"0000040C", 0); |
| + ASSERT_TRUE(french_layout); |
| + HKL prev_layout = ::ActivateKeyboardLayout(french_layout, 0); |
| + CheckEvents(WideToUTF16(L"\u00E9"), event_array, arraysize(event_array)); |
| + ::ActivateKeyboardLayout(prev_layout, 0); |
| +} |
| +#endif |
| + |
| +TEST(WebDriverKeyConverter, UppercaseCharDoesShift) { |
| + WebKeyEvent event_array[] = { |
| + CreateKeyDownEvent(ui::VKEY_SHIFT, 0), |
| + CreateKeyDownEvent(ui::VKEY_A, automation::kShiftKeyMask), |
| + CreateCharEvent("a", "A", automation::kShiftKeyMask), |
| + CreateKeyUpEvent(ui::VKEY_A, automation::kShiftKeyMask), |
| + CreateKeyUpEvent(ui::VKEY_SHIFT, 0)}; |
| + CheckEvents("A", event_array, arraysize(event_array)); |
| +} |
| + |
| +TEST(WebDriverKeyConverter, UppercaseCharUsesShiftOnlyIfNecessary) { |
| + WebKeyEvent event_array[] = { |
| + CreateKeyDownEvent(ui::VKEY_SHIFT, automation::kShiftKeyMask), |
| + CreateKeyDownEvent(ui::VKEY_A, automation::kShiftKeyMask), |
| + CreateCharEvent("a", "A", automation::kShiftKeyMask), |
| + CreateKeyUpEvent(ui::VKEY_A, automation::kShiftKeyMask), |
| + CreateKeyDownEvent(ui::VKEY_B, automation::kShiftKeyMask), |
| + CreateCharEvent("b", "B", automation::kShiftKeyMask), |
| + CreateKeyUpEvent(ui::VKEY_B, automation::kShiftKeyMask), |
| + CreateKeyDownEvent(ui::VKEY_C, automation::kShiftKeyMask), |
| + CreateCharEvent("c", "C", automation::kShiftKeyMask), |
| + CreateKeyUpEvent(ui::VKEY_C, automation::kShiftKeyMask), |
| + CreateKeyUpEvent(ui::VKEY_SHIFT, 0)}; |
| + string16 keys; |
| + keys.push_back(static_cast<char16>(0xE008U)); |
| + keys.append(UTF8ToUTF16("aBc")); |
| + CheckEvents(keys, event_array, arraysize(event_array)); |
| +} |
| + |
| +TEST(WebDriverKeyConverter, ToggleModifiers) { |
| + WebKeyEvent event_array[] = { |
| + CreateKeyDownEvent(ui::VKEY_SHIFT, automation::kShiftKeyMask), |
| + CreateKeyUpEvent(ui::VKEY_SHIFT, 0), |
| + CreateKeyDownEvent(ui::VKEY_CONTROL, automation::kControlKeyMask), |
| + CreateKeyUpEvent(ui::VKEY_CONTROL, 0), |
| + CreateKeyDownEvent(ui::VKEY_MENU, automation::kAltKeyMask), |
| + CreateKeyUpEvent(ui::VKEY_MENU, 0), |
| + CreateKeyDownEvent(ui::VKEY_COMMAND, automation::kMetaKeyMask), |
| + CreateKeyUpEvent(ui::VKEY_COMMAND, 0)}; |
| + string16 keys; |
| + keys.push_back(static_cast<char16>(0xE008U)); |
| + keys.push_back(static_cast<char16>(0xE008U)); |
| + keys.push_back(static_cast<char16>(0xE009U)); |
| + keys.push_back(static_cast<char16>(0xE009U)); |
| + keys.push_back(static_cast<char16>(0xE00AU)); |
| + keys.push_back(static_cast<char16>(0xE00AU)); |
| + keys.push_back(static_cast<char16>(0xE03DU)); |
| + keys.push_back(static_cast<char16>(0xE03DU)); |
| + CheckEvents(keys, event_array, arraysize(event_array)); |
| +} |
| + |
| +} // namespace webdriver |
| Property changes on: chrome\test\webdriver\webdriver_key_converter_unittest.cc |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |