8#include "gtest/gtest.h"
19 const gchar* expected_message,
22 data->expected_message = expected_message;
23 data->handled = handled;
25 messenger,
"flutter/keyevent",
26 [](FlMockBinaryMessenger* messenger, GTask* task,
FlValue*
message,
31 EXPECT_STREQ(message_string, data->expected_message);
56 const char* down_expected,
57 const char* up_expected);
67 "{type: keydown, keymap: linux, scanCode: 4, toolkit: gtk, keyCode: 65, "
68 "modifiers: 0, unicodeScalarValues: 65}",
71 12345,
TRUE, 0x04, GDK_KEY_A,
static_cast<GdkModifierType
>(0), 0);
73 responder, event1, 0,
nullptr,
74 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
77 FL_KEY_CHANNEL_RESPONDER(
object), result, &handled,
nullptr));
78 EXPECT_FALSE(handled);
79 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
82 g_main_loop_run(loop);
86 "{type: keyup, keymap: linux, scanCode: 4, toolkit: gtk, keyCode: 65, "
87 "modifiers: 0, unicodeScalarValues: 65}",
90 23456, FALSE, 0x04, GDK_KEY_A,
static_cast<GdkModifierType
>(0), 0);
92 responder, event2, 0,
nullptr,
93 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
96 FL_KEY_CHANNEL_RESPONDER(
object), result, &handled,
nullptr));
97 EXPECT_FALSE(handled);
98 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
101 g_main_loop_run(loop);
105 const char* down_expected,
106 const char* up_expected) {
109 12345,
TRUE, 0x04, key_code,
static_cast<GdkModifierType
>(0), 0);
112 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
115 FL_KEY_CHANNEL_RESPONDER(
object), result, &handled,
nullptr));
116 EXPECT_FALSE(handled);
117 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
120 g_main_loop_run(
loop);
124 12346, FALSE, 0x04, key_code,
static_cast<GdkModifierType
>(0), 0);
127 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
130 FL_KEY_CHANNEL_RESPONDER(
object), result, &handled,
nullptr));
131 EXPECT_FALSE(handled);
132 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
135 g_main_loop_run(
loop);
140 TestLockEvent(GDK_KEY_Num_Lock,
141 "{type: keydown, keymap: linux, scanCode: 4, toolkit: gtk, "
142 "keyCode: 65407, modifiers: 16}",
143 "{type: keyup, keymap: linux, scanCode: 4, toolkit: gtk, "
144 "keyCode: 65407, modifiers: 0}");
149 TestLockEvent(GDK_KEY_Caps_Lock,
150 "{type: keydown, keymap: linux, scanCode: 4, toolkit: gtk, "
151 "keyCode: 65509, modifiers: 2}",
152 "{type: keyup, keymap: linux, scanCode: 4, toolkit: gtk, "
153 "keyCode: 65509, modifiers: 0}");
158 TestLockEvent(GDK_KEY_Shift_Lock,
159 "{type: keydown, keymap: linux, scanCode: 4, toolkit: gtk, "
160 "keyCode: 65510, modifiers: 2}",
161 "{type: keyup, keymap: linux, scanCode: 4, toolkit: gtk, "
162 "keyCode: 65510, modifiers: 0}");
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);
189 "{type: keydown, keymap: linux, scanCode: 4, toolkit: gtk, "
190 "keyCode: 65, modifiers: 0, unicodeScalarValues: 65, "
191 "specifiedLogicalKey: 888}",
194 12345,
TRUE, 0x04, GDK_KEY_A,
static_cast<GdkModifierType
>(0), 0);
196 responder, event, 888,
nullptr,
197 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
200 FL_KEY_CHANNEL_RESPONDER(
object), result, &handled,
nullptr));
201 EXPECT_TRUE(handled);
202 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
205 g_main_loop_run(loop);
~FlKeyChannelResponderTest()
void TestLockEvent(guint key_code, const char *down_expected, const char *up_expected)
FlKeyChannelResponder * responder
FlMockBinaryMessenger * messenger
g_autoptr(FlEngine) engine
void fl_binary_messenger_shutdown(FlBinaryMessenger *self)
void fl_key_channel_responder_handle_event(FlKeyChannelResponder *self, FlKeyEvent *event, uint64_t specified_logical_key, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
gboolean fl_key_channel_responder_handle_event_finish(FlKeyChannelResponder *self, GAsyncResult *result, gboolean *handled, GError **error)
FlKeyChannelResponder * fl_key_channel_responder_new(FlBinaryMessenger *messenger)
TEST_F(FlKeyChannelResponderTest, SendKeyEvent)
static void set_key_event_channel(FlMockBinaryMessenger *messenger, const gchar *expected_message, gboolean handled)
FlKeyEvent * fl_key_event_new(guint32 time, gboolean is_press, guint16 keycode, guint keyval, GdkModifierType state, guint8 group)
FlMockBinaryMessenger * fl_mock_binary_messenger_new()
void fl_mock_binary_messenger_set_json_message_channel(FlMockBinaryMessenger *self, const gchar *channel, FlMockBinaryMessengerMessageChannelHandler handler, gpointer user_data)
G_MODULE_EXPORT FlValue * fl_value_new_map()
G_MODULE_EXPORT void fl_value_set_string_take(FlValue *self, const gchar *key, FlValue *value)
G_MODULE_EXPORT gchar * fl_value_to_string(FlValue *value)
G_MODULE_EXPORT FlValue * fl_value_new_bool(bool value)
typedefG_BEGIN_DECLS struct _FlValue FlValue
const gchar * expected_message