Index: chrome/browser/renderer_host/gtk_key_bindings_handler_unittest.cc |
=================================================================== |
--- chrome/browser/renderer_host/gtk_key_bindings_handler_unittest.cc (revision 0) |
+++ chrome/browser/renderer_host/gtk_key_bindings_handler_unittest.cc (revision 0) |
@@ -0,0 +1,220 @@ |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+#include "chrome/browser/renderer_host/gtk_key_bindings_handler.h" |
+ |
+#include <gdk/gdkkeysyms.h> |
+#include <string> |
+#include <utility> |
+#include <vector> |
+ |
+#include "base/basictypes.h" |
+#include "base/file_util.h" |
+#include "base/path_service.h" |
+#include "base/string_util.h" |
+#include "chrome/common/chrome_paths.h" |
+#include "chrome/common/edit_command.h" |
+#include "chrome/common/native_web_keyboard_event.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+class GtkKeyBindingsHandlerTest : public testing::Test { |
+ protected: |
+ struct EditCommand { |
+ const char* name; |
+ const char* value; |
+ }; |
+ |
+ GtkKeyBindingsHandlerTest() |
+ : window_(gtk_window_new(GTK_WINDOW_TOPLEVEL)), |
+ handler_(NULL) { |
+ std::wstring gtkrc; |
+ PathService::Get(chrome::DIR_TEST_DATA, >krc); |
+ file_util::AppendToPath(>krc, L"gtk_key_bindings_test_gtkrc"); |
+ gtk_rc_parse(WideToUTF8(gtkrc).c_str()); |
+ |
+ GtkWidget* fixed = gtk_fixed_new(); |
+ handler_ = new GtkKeyBindingsHandler(fixed); |
+ gtk_container_add(GTK_CONTAINER(window_), fixed); |
+ gtk_widget_show(fixed); |
+ gtk_widget_show(window_); |
+ } |
+ ~GtkKeyBindingsHandlerTest() { |
+ gtk_widget_destroy(window_); |
+ delete handler_; |
+ } |
+ |
+ NativeWebKeyboardEvent NewNativeWebKeyboardEvent(guint keyval, guint state) { |
+ GdkKeymap* keymap = |
+ gdk_keymap_get_for_display(gtk_widget_get_display(window_)); |
+ |
+ GdkKeymapKey *keys = NULL; |
+ gint n_keys = 0; |
+ if (gdk_keymap_get_entries_for_keyval(keymap, keyval, &keys, &n_keys)) { |
+ GdkEventKey event; |
+ event.type = GDK_KEY_PRESS; |
+ event.window = NULL; |
+ event.send_event = 0; |
+ event.time = 0; |
+ event.state = state; |
+ event.keyval = keyval; |
+ event.length = 0; |
+ event.string = NULL; |
+ event.hardware_keycode = keys[0].keycode; |
+ event.group = keys[0].group; |
+ event.is_modifier = 0; |
+ g_free(keys); |
+ return NativeWebKeyboardEvent(&event); |
+ } |
+ return NativeWebKeyboardEvent(); |
+ } |
+ |
+ void TestKeyBinding(const NativeWebKeyboardEvent& event, |
+ const EditCommand expected_result[], |
+ size_t size) { |
+ EditCommands result; |
+ handler_->set_enabled(false); |
+ ASSERT_FALSE(handler_->Match(event, &result)); |
+ handler_->set_enabled(true); |
+ ASSERT_TRUE(handler_->Match(event, &result)); |
+ ASSERT_EQ(size, result.size()); |
+ for (size_t i = 0; i < size; ++i) { |
+ ASSERT_STREQ(expected_result[i].name, result[i].name.c_str()); |
+ ASSERT_STREQ(expected_result[i].value, result[i].value.c_str()); |
+ } |
+ } |
+ |
+ protected: |
+ GtkWidget* window_; |
+ GtkKeyBindingsHandler* handler_; |
+}; |
+ |
+TEST_F(GtkKeyBindingsHandlerTest, MoveCursor) { |
+ static const EditCommand kEditCommands[] = { |
+ // "move-cursor" (logical-positions, -2, 0) |
+ { "MoveBackward", "" }, |
+ { "MoveBackward", "" }, |
+ // "move-cursor" (logical-positions, 2, 0) |
+ { "MoveForward", "" }, |
+ { "MoveForward", "" }, |
+ // "move-cursor" (visual-positions, -1, 1) |
+ { "MoveLeftAndModifySelection", "" }, |
+ // "move-cursor" (visual-positions, 1, 1) |
+ { "MoveRightAndModifySelection", "" }, |
+ // "move-cursor" (words, -1, 0) |
+ { "MoveWordBackward", "" }, |
+ // "move-cursor" (words, 1, 0) |
+ { "MoveWordForward", "" }, |
+ // "move-cursor" (display-lines, -1, 0) |
+ { "MoveUp", "" }, |
+ // "move-cursor" (display-lines, 1, 0) |
+ { "MoveDown", "" }, |
+ // "move-cursor" (display-line-ends, -1, 0) |
+ { "MoveToBeginningOfLine", "" }, |
+ // "move-cursor" (display-line-ends, 1, 0) |
+ { "MoveToEndOfLine", "" }, |
+ // "move-cursor" (paragraph-ends, -1, 0) |
+ { "MoveToBeginningOfParagraph", "" }, |
+ // "move-cursor" (paragraph-ends, 1, 0) |
+ { "MoveToEndOfParagraph", "" }, |
+ // "move-cursor" (pages, -1, 0) |
+ { "MovePageUp", "" }, |
+ // "move-cursor" (pages, 1, 0) |
+ { "MovePageDown", "" }, |
+ // "move-cursor" (buffer-ends, -1, 0) |
+ { "MoveToBeginningOfDocument", "" }, |
+ // "move-cursor" (buffer-ends, 1, 0) |
+ { "MoveToEndOfDocument", "" } |
+ }; |
+ |
+ TestKeyBinding(NewNativeWebKeyboardEvent(GDK_1, GDK_CONTROL_MASK), |
+ kEditCommands, arraysize(kEditCommands)); |
+} |
+ |
+TEST_F(GtkKeyBindingsHandlerTest, DeleteFromCursor) { |
+ static const EditCommand kEditCommands[] = { |
+ // "delete-from-cursor" (chars, -2) |
+ { "DeleteBackward", "" }, |
+ { "DeleteBackward", "" }, |
+ // "delete-from-cursor" (chars, 2) |
+ { "DeleteForward", "" }, |
+ { "DeleteForward", "" }, |
+ // "delete-from-cursor" (word-ends, -1) |
+ { "DeleteWordBackward", "" }, |
+ // "delete-from-cursor" (word-ends, 1) |
+ { "DeleteWordForward", "" }, |
+ // "delete-from-cursor" (words, -1) |
+ { "MoveWordBackward", "" }, |
+ { "DeleteWordForward", "" }, |
+ // "delete-from-cursor" (words, 1) |
+ { "MoveWordForward", "" }, |
+ { "DeleteWordBackward", "" }, |
+ // "delete-from-cursor" (display-lines, -1) |
+ { "MoveToBeginningOfLine", "" }, |
+ { "DeleteToEndOfLine", "" }, |
+ // "delete-from-cursor" (display-lines, 1) |
+ { "MoveToBeginningOfLine", "" }, |
+ { "DeleteToEndOfLine", "" }, |
+ // "delete-from-cursor" (display-line-ends, -1) |
+ { "DeleteToBeginningOfLine", "" }, |
+ // "delete-from-cursor" (display-line-ends, 1) |
+ { "DeleteToEndOfLine", "" }, |
+ // "delete-from-cursor" (paragraph-ends, -1) |
+ { "DeleteToBeginningOfParagraph", "" }, |
+ // "delete-from-cursor" (paragraph-ends, 1) |
+ { "DeleteToEndOfParagraph", "" }, |
+ // "delete-from-cursor" (paragraphs, -1) |
+ { "MoveToBeginningOfParagraph", "" }, |
+ { "DeleteToEndOfParagraph", "" }, |
+ // "delete-from-cursor" (paragraphs, 1) |
+ { "MoveToBeginningOfParagraph", "" }, |
+ { "DeleteToEndOfParagraph", "" }, |
+ }; |
+ |
+ TestKeyBinding(NewNativeWebKeyboardEvent(GDK_2, GDK_CONTROL_MASK), |
+ kEditCommands, arraysize(kEditCommands)); |
+} |
+ |
+TEST_F(GtkKeyBindingsHandlerTest, OtherActions) { |
+ static const EditCommand kBackspace[] = { |
+ { "DeleteBackward", "" } |
+ }; |
+ TestKeyBinding(NewNativeWebKeyboardEvent(GDK_3, GDK_CONTROL_MASK), |
+ kBackspace, arraysize(kBackspace)); |
+ |
+ static const EditCommand kCopyClipboard[] = { |
+ { "Copy", "" } |
+ }; |
+ TestKeyBinding(NewNativeWebKeyboardEvent(GDK_4, GDK_CONTROL_MASK), |
+ kCopyClipboard, arraysize(kCopyClipboard)); |
+ |
+ static const EditCommand kCutClipboard[] = { |
+ { "Cut", "" } |
+ }; |
+ TestKeyBinding(NewNativeWebKeyboardEvent(GDK_5, GDK_CONTROL_MASK), |
+ kCutClipboard, arraysize(kCutClipboard)); |
+ |
+ static const EditCommand kInsertAtCursor[] = { |
+ { "InsertText", "hello" } |
+ }; |
+ TestKeyBinding(NewNativeWebKeyboardEvent(GDK_6, GDK_CONTROL_MASK), |
+ kInsertAtCursor, arraysize(kInsertAtCursor)); |
+ |
+ static const EditCommand kPasteClipboard[] = { |
+ { "Paste", "" } |
+ }; |
+ TestKeyBinding(NewNativeWebKeyboardEvent(GDK_7, GDK_CONTROL_MASK), |
+ kPasteClipboard, arraysize(kPasteClipboard)); |
+ |
+ static const EditCommand kSelectAll[] = { |
+ { "Unselect", "" }, |
+ { "SelectAll", "" } |
+ }; |
+ TestKeyBinding(NewNativeWebKeyboardEvent(GDK_8, GDK_CONTROL_MASK), |
+ kSelectAll, arraysize(kSelectAll)); |
+ |
+ static const EditCommand kSetAnchor[] = { |
+ { "SetMark", "" } |
+ }; |
+ TestKeyBinding(NewNativeWebKeyboardEvent(GDK_9, GDK_CONTROL_MASK), |
+ kSetAnchor, arraysize(kSetAnchor)); |
+} |
Property changes on: chrome/browser/renderer_host/gtk_key_bindings_handler_unittest.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |