7 #include "gtest/gtest.h"
10 #include "flutter/shell/platform/linux/testing/fl_mock_binary_messenger.h"
18 const gchar* expected_message,
23 fl_mock_binary_messenger_set_json_message_channel(
24 messenger,
"flutter/keyevent",
25 [](FlMockBinaryMessenger* messenger, GTask* task,
FlValue* message,
30 EXPECT_STREQ(message_string, data->expected_message);
42 TEST(FlKeyChannelResponderTest, SendKeyEvent) {
43 g_autoptr(GMainLoop) loop = g_main_loop_new(
nullptr, 0);
45 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
46 g_autoptr(FlKeyChannelResponder) responder =
51 "{type: keydown, keymap: linux, scanCode: 4, toolkit: gtk, keyCode: 65, "
52 "modifiers: 0, unicodeScalarValues: 65}",
55 12345,
TRUE, 0x04, GDK_KEY_A,
static_cast<GdkModifierType
>(0), 0);
57 responder, event1, 0,
nullptr,
58 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
61 FL_KEY_CHANNEL_RESPONDER(
object), result, &handled,
nullptr));
62 EXPECT_FALSE(handled);
63 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
66 g_main_loop_run(loop);
70 "{type: keyup, keymap: linux, scanCode: 4, toolkit: gtk, keyCode: 65, "
71 "modifiers: 0, unicodeScalarValues: 65}",
74 23456, FALSE, 0x04, GDK_KEY_A,
static_cast<GdkModifierType
>(0), 0);
76 responder, event2, 0,
nullptr,
77 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
80 FL_KEY_CHANNEL_RESPONDER(
object), result, &handled,
nullptr));
81 EXPECT_FALSE(handled);
82 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
85 g_main_loop_run(loop);
91 const char* down_expected,
92 const char* up_expected) {
93 g_autoptr(GMainLoop) loop = g_main_loop_new(
nullptr, 0);
95 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
96 g_autoptr(FlKeyChannelResponder) responder =
101 12345,
TRUE, 0x04, key_code,
static_cast<GdkModifierType
>(0), 0);
103 responder, event1, 0,
nullptr,
104 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
107 FL_KEY_CHANNEL_RESPONDER(
object), result, &handled,
nullptr));
108 EXPECT_FALSE(handled);
109 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
112 g_main_loop_run(loop);
116 12346, FALSE, 0x04, key_code,
static_cast<GdkModifierType
>(0), 0);
118 responder, event2, 0,
nullptr,
119 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
122 FL_KEY_CHANNEL_RESPONDER(
object), result, &handled,
nullptr));
123 EXPECT_FALSE(handled);
124 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
127 g_main_loop_run(loop);
133 TEST(FlKeyChannelResponderTest, SendNumLockKeyEvent) {
135 "{type: keydown, keymap: linux, scanCode: 4, toolkit: gtk, "
136 "keyCode: 65407, modifiers: 16}",
137 "{type: keyup, keymap: linux, scanCode: 4, toolkit: gtk, "
138 "keyCode: 65407, modifiers: 0}");
142 TEST(FlKeyChannelResponderTest, SendCapsLockKeyEvent) {
144 "{type: keydown, keymap: linux, scanCode: 4, toolkit: gtk, "
145 "keyCode: 65509, modifiers: 2}",
146 "{type: keyup, keymap: linux, scanCode: 4, toolkit: gtk, "
147 "keyCode: 65509, modifiers: 0}");
151 TEST(FlKeyChannelResponderTest, SendShiftLockKeyEvent) {
153 "{type: keydown, keymap: linux, scanCode: 4, toolkit: gtk, "
154 "keyCode: 65510, modifiers: 2}",
155 "{type: keyup, keymap: linux, scanCode: 4, toolkit: gtk, "
156 "keyCode: 65510, modifiers: 0}");
159 TEST(FlKeyChannelResponderTest, TestKeyEventHandledByFramework) {
160 g_autoptr(GMainLoop) loop = g_main_loop_new(
nullptr, 0);
162 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
163 g_autoptr(FlKeyChannelResponder) responder =
168 "{type: keydown, keymap: linux, scanCode: 4, toolkit: gtk, "
169 "keyCode: 65, modifiers: 0, unicodeScalarValues: 65}",
172 12345,
TRUE, 0x04, GDK_KEY_A,
static_cast<GdkModifierType
>(0), 0);
174 responder, event, 0,
nullptr,
175 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
178 FL_KEY_CHANNEL_RESPONDER(
object), result, &handled,
nullptr));
179 EXPECT_TRUE(handled);
180 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
183 g_main_loop_run(loop);
188 TEST(FlKeyChannelResponderTest, UseSpecifiedLogicalKey) {
189 g_autoptr(GMainLoop) loop = g_main_loop_new(
nullptr, 0);
191 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
192 g_autoptr(FlKeyChannelResponder) responder =
197 "{type: keydown, keymap: linux, scanCode: 4, toolkit: gtk, "
198 "keyCode: 65, modifiers: 0, unicodeScalarValues: 65, "
199 "specifiedLogicalKey: 888}",
202 12345,
TRUE, 0x04, GDK_KEY_A,
static_cast<GdkModifierType
>(0), 0);
204 responder, event, 888,
nullptr,
205 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
208 FL_KEY_CHANNEL_RESPONDER(
object), result, &handled,
nullptr));
209 EXPECT_TRUE(handled);
210 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
213 g_main_loop_run(loop);