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

Side by Side Diff: chrome/browser/renderer_host/gtk_key_bindings_handler_unittest.cc

Issue 165293: Supports Gtk keyboard themes.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 3 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) 2009 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 #include "chrome/browser/renderer_host/gtk_key_bindings_handler.h"
5
6 #include <gdk/gdkkeysyms.h>
7 #include <string>
8 #include <utility>
9 #include <vector>
10
11 #include "base/basictypes.h"
12 #include "base/file_util.h"
13 #include "base/path_service.h"
14 #include "base/string_util.h"
15 #include "chrome/common/chrome_paths.h"
16 #include "chrome/common/edit_command.h"
17 #include "chrome/common/native_web_keyboard_event.h"
18 #include "testing/gtest/include/gtest/gtest.h"
19
20 class GtkKeyBindingsHandlerTest : public testing::Test {
21 protected:
22 struct EditCommand {
23 const char* name;
24 const char* value;
25 };
26
27 GtkKeyBindingsHandlerTest()
28 : window_(gtk_window_new(GTK_WINDOW_TOPLEVEL)),
29 handler_(NULL) {
30 std::wstring gtkrc;
31 PathService::Get(chrome::DIR_TEST_DATA, &gtkrc);
32 file_util::AppendToPath(&gtkrc, L"gtk_key_bindings_test_gtkrc");
33 gtk_rc_parse(WideToUTF8(gtkrc).c_str());
34
35 GtkWidget* fixed = gtk_fixed_new();
36 handler_ = new GtkKeyBindingsHandler(fixed);
37 gtk_container_add(GTK_CONTAINER(window_), fixed);
38 gtk_widget_show(fixed);
39 gtk_widget_show(window_);
40 }
41 ~GtkKeyBindingsHandlerTest() {
42 gtk_widget_destroy(window_);
43 delete handler_;
44 }
45
46 NativeWebKeyboardEvent NewNativeWebKeyboardEvent(guint keyval, guint state) {
47 GdkKeymap* keymap =
48 gdk_keymap_get_for_display(gtk_widget_get_display(window_));
49
50 GdkKeymapKey *keys = NULL;
51 gint n_keys = 0;
52 if (gdk_keymap_get_entries_for_keyval(keymap, keyval, &keys, &n_keys)) {
53 GdkEventKey event;
54 event.type = GDK_KEY_PRESS;
55 event.window = NULL;
56 event.send_event = 0;
57 event.time = 0;
58 event.state = state;
59 event.keyval = keyval;
60 event.length = 0;
61 event.string = NULL;
62 event.hardware_keycode = keys[0].keycode;
63 event.group = keys[0].group;
64 event.is_modifier = 0;
65 g_free(keys);
66 return NativeWebKeyboardEvent(&event);
67 }
68 return NativeWebKeyboardEvent();
69 }
70
71 void TestKeyBinding(const NativeWebKeyboardEvent& event,
72 const EditCommand expected_result[],
73 size_t size) {
74 EditCommands result;
75 handler_->set_enabled(false);
76 ASSERT_FALSE(handler_->Match(event, &result));
77 handler_->set_enabled(true);
78 ASSERT_TRUE(handler_->Match(event, &result));
79 ASSERT_EQ(size, result.size());
80 for (size_t i = 0; i < size; ++i) {
81 ASSERT_STREQ(expected_result[i].name, result[i].name.c_str());
82 ASSERT_STREQ(expected_result[i].value, result[i].value.c_str());
83 }
84 }
85
86 protected:
87 GtkWidget* window_;
88 GtkKeyBindingsHandler* handler_;
89 };
90
91 TEST_F(GtkKeyBindingsHandlerTest, MoveCursor) {
92 static const EditCommand kEditCommands[] = {
93 // "move-cursor" (logical-positions, -2, 0)
94 { "MoveBackward", "" },
95 { "MoveBackward", "" },
96 // "move-cursor" (logical-positions, 2, 0)
97 { "MoveForward", "" },
98 { "MoveForward", "" },
99 // "move-cursor" (visual-positions, -1, 1)
100 { "MoveLeftAndModifySelection", "" },
101 // "move-cursor" (visual-positions, 1, 1)
102 { "MoveRightAndModifySelection", "" },
103 // "move-cursor" (words, -1, 0)
104 { "MoveWordBackward", "" },
105 // "move-cursor" (words, 1, 0)
106 { "MoveWordForward", "" },
107 // "move-cursor" (display-lines, -1, 0)
108 { "MoveUp", "" },
109 // "move-cursor" (display-lines, 1, 0)
110 { "MoveDown", "" },
111 // "move-cursor" (display-line-ends, -1, 0)
112 { "MoveToBeginningOfLine", "" },
113 // "move-cursor" (display-line-ends, 1, 0)
114 { "MoveToEndOfLine", "" },
115 // "move-cursor" (paragraph-ends, -1, 0)
116 { "MoveToBeginningOfParagraph", "" },
117 // "move-cursor" (paragraph-ends, 1, 0)
118 { "MoveToEndOfParagraph", "" },
119 // "move-cursor" (pages, -1, 0)
120 { "MovePageUp", "" },
121 // "move-cursor" (pages, 1, 0)
122 { "MovePageDown", "" },
123 // "move-cursor" (buffer-ends, -1, 0)
124 { "MoveToBeginningOfDocument", "" },
125 // "move-cursor" (buffer-ends, 1, 0)
126 { "MoveToEndOfDocument", "" }
127 };
128
129 TestKeyBinding(NewNativeWebKeyboardEvent(GDK_1, GDK_CONTROL_MASK),
130 kEditCommands, arraysize(kEditCommands));
131 }
132
133 TEST_F(GtkKeyBindingsHandlerTest, DeleteFromCursor) {
134 static const EditCommand kEditCommands[] = {
135 // "delete-from-cursor" (chars, -2)
136 { "DeleteBackward", "" },
137 { "DeleteBackward", "" },
138 // "delete-from-cursor" (chars, 2)
139 { "DeleteForward", "" },
140 { "DeleteForward", "" },
141 // "delete-from-cursor" (word-ends, -1)
142 { "DeleteWordBackward", "" },
143 // "delete-from-cursor" (word-ends, 1)
144 { "DeleteWordForward", "" },
145 // "delete-from-cursor" (words, -1)
146 { "MoveWordBackward", "" },
147 { "DeleteWordForward", "" },
148 // "delete-from-cursor" (words, 1)
149 { "MoveWordForward", "" },
150 { "DeleteWordBackward", "" },
151 // "delete-from-cursor" (display-lines, -1)
152 { "MoveToBeginningOfLine", "" },
153 { "DeleteToEndOfLine", "" },
154 // "delete-from-cursor" (display-lines, 1)
155 { "MoveToBeginningOfLine", "" },
156 { "DeleteToEndOfLine", "" },
157 // "delete-from-cursor" (display-line-ends, -1)
158 { "DeleteToBeginningOfLine", "" },
159 // "delete-from-cursor" (display-line-ends, 1)
160 { "DeleteToEndOfLine", "" },
161 // "delete-from-cursor" (paragraph-ends, -1)
162 { "DeleteToBeginningOfParagraph", "" },
163 // "delete-from-cursor" (paragraph-ends, 1)
164 { "DeleteToEndOfParagraph", "" },
165 // "delete-from-cursor" (paragraphs, -1)
166 { "MoveToBeginningOfParagraph", "" },
167 { "DeleteToEndOfParagraph", "" },
168 // "delete-from-cursor" (paragraphs, 1)
169 { "MoveToBeginningOfParagraph", "" },
170 { "DeleteToEndOfParagraph", "" },
171 };
172
173 TestKeyBinding(NewNativeWebKeyboardEvent(GDK_2, GDK_CONTROL_MASK),
174 kEditCommands, arraysize(kEditCommands));
175 }
176
177 TEST_F(GtkKeyBindingsHandlerTest, OtherActions) {
178 static const EditCommand kBackspace[] = {
179 { "DeleteBackward", "" }
180 };
181 TestKeyBinding(NewNativeWebKeyboardEvent(GDK_3, GDK_CONTROL_MASK),
182 kBackspace, arraysize(kBackspace));
183
184 static const EditCommand kCopyClipboard[] = {
185 { "Copy", "" }
186 };
187 TestKeyBinding(NewNativeWebKeyboardEvent(GDK_4, GDK_CONTROL_MASK),
188 kCopyClipboard, arraysize(kCopyClipboard));
189
190 static const EditCommand kCutClipboard[] = {
191 { "Cut", "" }
192 };
193 TestKeyBinding(NewNativeWebKeyboardEvent(GDK_5, GDK_CONTROL_MASK),
194 kCutClipboard, arraysize(kCutClipboard));
195
196 static const EditCommand kInsertAtCursor[] = {
197 { "InsertText", "hello" }
198 };
199 TestKeyBinding(NewNativeWebKeyboardEvent(GDK_6, GDK_CONTROL_MASK),
200 kInsertAtCursor, arraysize(kInsertAtCursor));
201
202 static const EditCommand kPasteClipboard[] = {
203 { "Paste", "" }
204 };
205 TestKeyBinding(NewNativeWebKeyboardEvent(GDK_7, GDK_CONTROL_MASK),
206 kPasteClipboard, arraysize(kPasteClipboard));
207
208 static const EditCommand kSelectAll[] = {
209 { "Unselect", "" },
210 { "SelectAll", "" }
211 };
212 TestKeyBinding(NewNativeWebKeyboardEvent(GDK_8, GDK_CONTROL_MASK),
213 kSelectAll, arraysize(kSelectAll));
214
215 static const EditCommand kSetAnchor[] = {
216 { "SetMark", "" }
217 };
218 TestKeyBinding(NewNativeWebKeyboardEvent(GDK_9, GDK_CONTROL_MASK),
219 kSetAnchor, arraysize(kSetAnchor));
220 }
OLDNEW
« no previous file with comments | « chrome/browser/renderer_host/gtk_key_bindings_handler.cc ('k') | chrome/browser/renderer_host/render_view_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698