IndexedDBFactory now ForceCloses databases.
[chromium-blink-merge.git] / content / browser / renderer_host / input / web_input_event_builders_gtk_unittest.cc
blobb5e2d423a08198ea09de6b966cc48ca28ada4af7
1 // Copyright 2013 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.
5 #include "content/browser/renderer_host/input/web_input_event_builders_gtk.h"
7 #include <gdk/gdk.h>
8 #include <gdk/gdkkeysyms.h>
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "third_party/WebKit/public/web/WebInputEvent.h"
12 #include "ui/events/keycodes/keyboard_code_conversion_gtk.h"
14 using blink::WebInputEvent;
15 using blink::WebKeyboardEvent;
16 using blink::WebMouseEvent;
17 using content::WebMouseEventBuilder;
18 using content::WebKeyboardEventBuilder;
20 namespace {
22 TEST(WebMouseEventBuilderTest, DoubleClick) {
23 GdkEventButton first_click;
24 first_click.type = GDK_BUTTON_PRESS;
25 first_click.window = static_cast<GdkWindow*>(GINT_TO_POINTER(1));
26 first_click.x = first_click.y = first_click.x_root = first_click.y_root = 100;
27 first_click.state = 0;
28 first_click.time = 0;
29 first_click.button = 1;
31 // Single click works.
32 WebMouseEvent first_click_events =
33 WebMouseEventBuilder::Build(&first_click);
34 EXPECT_EQ(1, first_click_events.clickCount);
36 // Make sure double click works.
37 GdkEventButton second_click = first_click;
38 second_click.time = first_click.time + 100;
39 WebMouseEvent second_click_events =
40 WebMouseEventBuilder::Build(&second_click);
41 EXPECT_EQ(2, second_click_events.clickCount);
43 // Reset the click count.
44 first_click.time += 10000;
45 first_click_events = WebMouseEventBuilder::Build(&first_click);
46 EXPECT_EQ(1, first_click_events.clickCount);
48 // Two clicks with a long gap in between aren't counted as a double click.
49 second_click = first_click;
50 second_click.time = first_click.time + 1000;
51 second_click_events = WebMouseEventBuilder::Build(&second_click);
52 EXPECT_EQ(1, second_click_events.clickCount);
54 // Reset the click count.
55 first_click.time += 10000;
56 first_click_events = WebMouseEventBuilder::Build(&first_click);
57 EXPECT_EQ(1, first_click_events.clickCount);
59 // Two clicks far apart (horizontally) aren't counted as a double click.
60 second_click = first_click;
61 second_click.time = first_click.time + 1;
62 second_click.x = first_click.x + 100;
63 second_click_events = WebMouseEventBuilder::Build(&second_click);
64 EXPECT_EQ(1, second_click_events.clickCount);
66 // Reset the click count.
67 first_click.time += 10000;
68 first_click_events = WebMouseEventBuilder::Build(&first_click);
69 EXPECT_EQ(1, first_click_events.clickCount);
71 // Two clicks far apart (vertically) aren't counted as a double click.
72 second_click = first_click;
73 second_click.time = first_click.time + 1;
74 second_click.x = first_click.y + 100;
75 second_click_events = WebMouseEventBuilder::Build(&second_click);
76 EXPECT_EQ(1, second_click_events.clickCount);
78 // Reset the click count.
79 first_click.time += 10000;
80 first_click_events = WebMouseEventBuilder::Build(&first_click);
81 EXPECT_EQ(1, first_click_events.clickCount);
83 // Two clicks on different windows aren't a double click.
84 second_click = first_click;
85 second_click.time = first_click.time + 1;
86 second_click.window = static_cast<GdkWindow*>(GINT_TO_POINTER(2));
87 second_click_events = WebMouseEventBuilder::Build(&second_click);
88 EXPECT_EQ(1, second_click_events.clickCount);
91 TEST(WebMouseEventBuilderTest, MouseUpClickCount) {
92 GdkEventButton mouse_down;
93 memset(&mouse_down, 0, sizeof(mouse_down));
94 mouse_down.type = GDK_BUTTON_PRESS;
95 mouse_down.window = static_cast<GdkWindow*>(GINT_TO_POINTER(1));
96 mouse_down.x = mouse_down.y = mouse_down.x_root = mouse_down.y_root = 100;
97 mouse_down.time = 0;
98 mouse_down.button = 1;
100 // Properly set the last click time, so that the internal state won't be
101 // affected by previous tests.
102 WebMouseEventBuilder::Build(&mouse_down);
104 mouse_down.time += 10000;
105 GdkEventButton mouse_up = mouse_down;
106 mouse_up.type = GDK_BUTTON_RELEASE;
107 WebMouseEvent mouse_down_event;
108 WebMouseEvent mouse_up_event;
110 // Click for three times.
111 for (int i = 1; i < 4; ++i) {
112 mouse_down.time += 100;
113 mouse_down_event = WebMouseEventBuilder::Build(&mouse_down);
114 EXPECT_EQ(i, mouse_down_event.clickCount);
116 mouse_up.time = mouse_down.time + 50;
117 mouse_up_event = WebMouseEventBuilder::Build(&mouse_up);
118 EXPECT_EQ(i, mouse_up_event.clickCount);
121 // Reset the click count.
122 mouse_down.time += 10000;
123 mouse_down_event = WebMouseEventBuilder::Build(&mouse_down);
124 EXPECT_EQ(1, mouse_down_event.clickCount);
126 // Moving the cursor for a significant distance will reset the click count to
127 // 0.
128 GdkEventMotion mouse_move;
129 memset(&mouse_move, 0, sizeof(mouse_move));
130 mouse_move.type = GDK_MOTION_NOTIFY;
131 mouse_move.window = mouse_down.window;
132 mouse_move.time = mouse_down.time;
133 mouse_move.x = mouse_move.y = mouse_move.x_root = mouse_move.y_root =
134 mouse_down.x + 100;
135 WebMouseEventBuilder::Build(&mouse_move);
137 mouse_up.time = mouse_down.time + 50;
138 mouse_up_event = WebMouseEventBuilder::Build(&mouse_up);
139 EXPECT_EQ(0, mouse_up_event.clickCount);
141 // Reset the click count.
142 mouse_down.time += 10000;
143 mouse_down_event = WebMouseEventBuilder::Build(&mouse_down);
144 EXPECT_EQ(1, mouse_down_event.clickCount);
146 // Moving the cursor with a significant delay will reset the click count to 0.
147 mouse_move.time = mouse_down.time + 1000;
148 mouse_move.x = mouse_move.y = mouse_move.x_root = mouse_move.y_root =
149 mouse_down.x;
150 WebMouseEventBuilder::Build(&mouse_move);
152 mouse_up.time = mouse_move.time + 50;
153 mouse_up_event = WebMouseEventBuilder::Build(&mouse_up);
154 EXPECT_EQ(0, mouse_up_event.clickCount);
157 TEST(WebKeyboardEventBuilderTest, NumPadConversion) {
158 // Construct a GDK input event for the numpad "5" key.
159 char five[] = "5";
160 GdkEventKey gdk_event;
161 memset(&gdk_event, 0, sizeof(GdkEventKey));
162 gdk_event.type = GDK_KEY_PRESS;
163 gdk_event.keyval = GDK_KP_5;
164 gdk_event.string = five;
166 // Numpad flag should be set on the WebKeyboardEvent.
167 WebKeyboardEvent web_event = WebKeyboardEventBuilder::Build(&gdk_event);
168 EXPECT_TRUE(web_event.modifiers & WebInputEvent::IsKeyPad);
171 } // anonymous namespace