10 #include "flutter/shell/platform/linux/testing/fl_mock_binary_messenger.h"
11 #include "flutter/shell/platform/linux/testing/fl_test.h"
13 #include "gmock/gmock.h"
14 #include "gtest/gtest.h"
22 struct _FlTestApplication {
23 GtkApplication parent_instance;
24 gboolean* dispose_called;
29 gtk_application_get_type())
31 static
void fl_test_application_startup(GApplication* application) {
32 G_APPLICATION_CLASS(fl_test_application_parent_class)->startup(application);
37 gtk_application_window_new(GTK_APPLICATION(application));
41 G_APPLICATION_CLASS(fl_test_application_parent_class)->activate(application);
43 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
44 g_autoptr(FlPlatformHandler) handler =
46 EXPECT_NE(handler,
nullptr);
49 gboolean called = FALSE;
52 fl_mock_binary_messenger_invoke_json_method(
53 messenger,
"flutter/platform",
"System.exitApplication",
args,
54 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
56 gboolean* called =
static_cast<gboolean*
>(
user_data);
59 EXPECT_TRUE(FL_IS_METHOD_SUCCESS_RESPONSE(response));
65 FL_METHOD_SUCCESS_RESPONSE(response)),
75 FlTestApplication*
self = FL_TEST_APPLICATION(
object);
77 *
self->dispose_called =
true;
79 G_OBJECT_CLASS(fl_test_application_parent_class)->dispose(
object);
84 G_APPLICATION_CLASS(klass)->startup = fl_test_application_startup;
91 FlTestApplication*
self = FL_TEST_APPLICATION(
92 g_object_new(fl_test_application_get_type(),
nullptr));
95 g_application_set_application_id(G_APPLICATION(
self),
"dev.flutter.GtkTest");
96 g_application_set_flags(G_APPLICATION(
self), G_APPLICATION_NON_UNIQUE);
99 FL_IS_TEST_APPLICATION(
self);
101 self->dispose_called = dispose_called;
106 TEST(FlPlatformHandlerTest, PlaySound) {
107 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
108 g_autoptr(FlPlatformHandler) handler =
110 EXPECT_NE(handler,
nullptr);
112 gboolean called = FALSE;
114 fl_mock_binary_messenger_invoke_json_method(
115 messenger,
"flutter/platform",
"SystemSound.play",
args,
116 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
118 gboolean* called =
static_cast<gboolean*
>(
user_data);
121 EXPECT_TRUE(FL_IS_METHOD_SUCCESS_RESPONSE(response));
125 FL_METHOD_SUCCESS_RESPONSE(response)),
134 TEST(FlPlatformHandlerTest, ExitApplication) {
135 g_autoptr(GMainLoop) loop = g_main_loop_new(
nullptr, 0);
137 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
138 g_autoptr(FlPlatformHandler) handler =
140 EXPECT_NE(handler,
nullptr);
143 gboolean called = FALSE;
144 fl_mock_binary_messenger_invoke_json_method(
145 messenger,
"flutter/platform",
"System.initializationComplete",
nullptr,
146 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
148 gboolean* called =
static_cast<gboolean*
>(
user_data);
151 EXPECT_TRUE(FL_IS_METHOD_SUCCESS_RESPONSE(response));
155 FL_METHOD_SUCCESS_RESPONSE(response)),
161 gboolean request_exit_called = FALSE;
162 fl_mock_binary_messenger_set_json_method_channel(
163 messenger,
"flutter/platform",
164 [](FlMockBinaryMessenger* messenger, GTask* task,
const gchar* name,
166 gboolean* called =
static_cast<gboolean*
>(
user_data);
169 EXPECT_STREQ(name,
"System.requestAppExit");
182 &request_exit_called);
186 fl_mock_binary_messenger_invoke_json_method(
187 messenger,
"flutter/platform",
"System.exitApplication",
args,
188 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
190 EXPECT_TRUE(FL_IS_METHOD_SUCCESS_RESPONSE(response));
196 FL_METHOD_SUCCESS_RESPONSE(response)),
199 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
203 g_main_loop_run(loop);
205 EXPECT_TRUE(request_exit_called);
210 TEST(FlPlatformHandlerTest, ExitApplicationDispose) {
211 gtk_init(0,
nullptr);
213 gboolean dispose_called =
false;
217 g_application_run(G_APPLICATION(application), 0,
nullptr);
219 EXPECT_FALSE(dispose_called);
220 g_object_unref(application);
221 EXPECT_TRUE(dispose_called);