summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorkkania@chromium.org <kkania@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-16 01:36:48 +0000
committerkkania@chromium.org <kkania@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-16 01:36:48 +0000
commit487d1730d922bf933e332b997fda6796c3b0da5b (patch)
tree6263cc6121b094d0e1f18ef7d48d378309111df2 /chrome
parent7ba168d309dd2777cd07bbbd3c024c26265f79ba (diff)
downloadchromium_src-487d1730d922bf933e332b997fda6796c3b0da5b.zip
chromium_src-487d1730d922bf933e332b997fda6796c3b0da5b.tar.gz
chromium_src-487d1730d922bf933e332b997fda6796c3b0da5b.tar.bz2
Implement keycode/text conversion for ChromeDriver on Linux, which is needed
for the Value command. BUG=none TEST=none Review URL: http://codereview.chromium.org/6526025 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@75047 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/test/webdriver/WEBDRIVER_TESTS4
-rw-r--r--chrome/test/webdriver/webdriver_key_converter.cc38
-rw-r--r--chrome/test/webdriver/webdriver_key_converter_unittest.cc18
3 files changed, 59 insertions, 1 deletions
diff --git a/chrome/test/webdriver/WEBDRIVER_TESTS b/chrome/test/webdriver/WEBDRIVER_TESTS
index bc5a697..47f4373 100644
--- a/chrome/test/webdriver/WEBDRIVER_TESTS
+++ b/chrome/test/webdriver/WEBDRIVER_TESTS
@@ -89,6 +89,8 @@
],
'linux': [
-
+ 'typing_tests',
+ # needs clear command
+ '-typing_tests.TypingTests.testNumberpadAndFunctionKeys',
],
}
diff --git a/chrome/test/webdriver/webdriver_key_converter.cc b/chrome/test/webdriver/webdriver_key_converter.cc
index d78c1e2..39c06b3 100644
--- a/chrome/test/webdriver/webdriver_key_converter.cc
+++ b/chrome/test/webdriver/webdriver_key_converter.cc
@@ -4,9 +4,17 @@
#include "chrome/test/webdriver/webdriver_key_converter.h"
+#include <cctype>
+
+#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "chrome/common/automation_constants.h"
+#if defined(OS_LINUX)
+#include <gdk/gdk.h>
+#include "ui/base/keycodes/keyboard_code_conversion_gtk.h"
+#endif
+
namespace {
// TODO(kkania): Use this in KeyMap.
@@ -121,6 +129,22 @@ bool ConvertCharToKeyCode(
*necessary_modifiers = HIBYTE(vkey_and_modifiers);
}
return translated;
+#elif defined(OS_LINUX)
+ guint gdk_key_code = gdk_unicode_to_keyval(key);
+ if (!gdk_key_code)
+ return false;
+
+ string16 key_string;
+ key_string.push_back(key);
+ const std::string kNeedsShiftSymbols= "!@#$%^&*()_+~{}|\":<>?";
+ bool is_special_symbol = IsStringASCII(key_string) &&
+ kNeedsShiftSymbols.find(static_cast<char>(gdk_key_code)) !=
+ std::string::npos;
+
+ if (is_special_symbol || key != std::towlower(key))
+ *necessary_modifiers = automation::kShiftKeyMask;
+ *key_code = ui::WindowsKeyCodeForGdkKeyCode(gdk_key_code);
+ return true;
#else
// TODO(kkania): Implement.
return false;
@@ -145,6 +169,20 @@ std::string ConvertKeyCodeToText(ui::KeyboardCode key_code, int modifiers) {
WideToUTF8(chars, code, &text);
return text;
}
+#elif defined(OS_LINUX)
+ // |gdk_keyval_to_upper| does not convert some keys like '1' to '!', so
+ // provide |ui::GdkKeyCodeForWindowsKeyCode| with our shift state as well,
+ // which will do basic conversions like it for us.
+ guint gdk_key_code = ui::GdkKeyCodeForWindowsKeyCode(
+ key_code, modifiers & automation::kShiftKeyMask);
+ if (modifiers & automation::kShiftKeyMask)
+ gdk_key_code = gdk_keyval_to_upper(gdk_key_code);
+ guint32 unicode_char = gdk_keyval_to_unicode(gdk_key_code);
+ if (!unicode_char)
+ return "";
+ string16 text;
+ text.push_back(unicode_char);
+ return UTF16ToUTF8(text);
#else
// TODO(kkania): Implement
return "";
diff --git a/chrome/test/webdriver/webdriver_key_converter_unittest.cc b/chrome/test/webdriver/webdriver_key_converter_unittest.cc
index 47a3afb..ccb0440 100644
--- a/chrome/test/webdriver/webdriver_key_converter_unittest.cc
+++ b/chrome/test/webdriver/webdriver_key_converter_unittest.cc
@@ -42,6 +42,14 @@ TEST(WebDriverKeyConverter, SingleChar) {
CheckEvents("h", event_array, arraysize(event_array));
}
+TEST(WebDriverKeyConverter, SingleNumber) {
+ WebKeyEvent event_array[] = {
+ CreateKeyDownEvent(ui::VKEY_1, 0),
+ CreateCharEvent("1", "1", 0),
+ CreateKeyUpEvent(ui::VKEY_1, 0)};
+ CheckEvents("1", event_array, arraysize(event_array));
+}
+
TEST(WebDriverKeyConverter, MultipleChars) {
WebKeyEvent event_array[] = {
CreateKeyDownEvent(ui::VKEY_H, 0),
@@ -107,6 +115,16 @@ TEST(WebDriverKeyConverter, UppercaseCharDoesShift) {
CheckEvents("A", event_array, arraysize(event_array));
}
+TEST(WebDriverKeyConverter, UppercaseSymbolCharDoesShift) {
+ WebKeyEvent event_array[] = {
+ CreateKeyDownEvent(ui::VKEY_SHIFT, 0),
+ CreateKeyDownEvent(ui::VKEY_1, automation::kShiftKeyMask),
+ CreateCharEvent("1", "!", automation::kShiftKeyMask),
+ CreateKeyUpEvent(ui::VKEY_1, automation::kShiftKeyMask),
+ CreateKeyUpEvent(ui::VKEY_SHIFT, 0)};
+ CheckEvents("!", event_array, arraysize(event_array));
+}
+
TEST(WebDriverKeyConverter, UppercaseCharUsesShiftOnlyIfNecessary) {
WebKeyEvent event_array[] = {
CreateKeyDownEvent(ui::VKEY_SHIFT, automation::kShiftKeyMask),