8 #include "flutter/shell/platform/linux/testing/fl_mock_binary_messenger.h"
9 #include "flutter/shell/platform/linux/testing/fl_test_gtk_logs.h"
10 #include "flutter/shell/platform/linux/testing/mock_window.h"
11 #include "flutter/testing/testing.h"
13 #include "gmock/gmock.h"
14 #include "gtest/gtest.h"
33 EXPECT_TRUE(FL_IS_METHOD_SUCCESS_RESPONSE(response));
36 FL_METHOD_SUCCESS_RESPONSE(response));
40 EXPECT_NE(view_id_value,
nullptr);
43 EXPECT_GT(view_id, 0);
46 EXPECT_NE(size_value,
nullptr);
55 EXPECT_NE(state_value,
nullptr);
73 TEST(FlWindowingHandlerTest, CreateRegular) {
74 flutter::testing::fl_ensure_gtk_init();
75 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
77 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
78 g_autoptr(FlEngine) engine =
82 EXPECT_CALL(mock_window, gtk_window_new);
83 EXPECT_CALL(mock_window, gtk_window_set_default_size(::testing::_, 800, 600));
87 gboolean called = FALSE;
88 fl_mock_binary_messenger_invoke_standard_method(
89 messenger,
"flutter/windowing",
"createRegular",
args,
90 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
93 gboolean* called =
static_cast<gboolean*
>(
user_data);
102 TEST(FlWindowingHandlerTest, CreateRegularMinSize) {
103 flutter::testing::fl_ensure_gtk_init();
104 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
106 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
107 g_autoptr(FlEngine) engine =
111 EXPECT_CALL(mock_window, gtk_window_new);
112 EXPECT_CALL(mock_window,
113 gtk_window_set_geometry_hints(
114 ::testing::_,
nullptr,
115 ::testing::Pointee(::testing::AllOf(
116 ::testing::Field(&GdkGeometry::min_width, 100),
117 ::testing::Field(&GdkGeometry::min_height, 200))),
123 gboolean called = FALSE;
124 fl_mock_binary_messenger_invoke_standard_method(
125 messenger,
"flutter/windowing",
"createRegular",
args,
126 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
129 gboolean* called =
static_cast<gboolean*
>(
user_data);
138 TEST(FlWindowingHandlerTest, CreateRegularMaxSize) {
139 flutter::testing::fl_ensure_gtk_init();
140 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
142 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
143 g_autoptr(FlEngine) engine =
147 EXPECT_CALL(mock_window, gtk_window_new);
148 EXPECT_CALL(mock_window,
149 gtk_window_set_geometry_hints(
150 ::testing::_,
nullptr,
151 ::testing::Pointee(::testing::AllOf(
152 ::testing::Field(&GdkGeometry::max_width, 1000),
153 ::testing::Field(&GdkGeometry::max_height, 2000))),
159 gboolean called = FALSE;
160 fl_mock_binary_messenger_invoke_standard_method(
161 messenger,
"flutter/windowing",
"createRegular",
args,
162 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
165 gboolean* called =
static_cast<gboolean*
>(
user_data);
174 TEST(FlWindowingHandlerTest, CreateRegularWithTitle) {
175 flutter::testing::fl_ensure_gtk_init();
176 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
178 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
179 g_autoptr(FlEngine) engine =
183 EXPECT_CALL(mock_window, gtk_window_new);
184 EXPECT_CALL(mock_window,
185 gtk_window_set_title(::testing::_, ::testing::StrEq(
"TITLE")));
190 gboolean called = FALSE;
191 fl_mock_binary_messenger_invoke_standard_method(
192 messenger,
"flutter/windowing",
"createRegular",
args,
193 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
196 gboolean* called =
static_cast<gboolean*
>(
user_data);
205 TEST(FlWindowingHandlerTest, CreateRegularMaximized) {
206 flutter::testing::fl_ensure_gtk_init();
207 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
209 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
210 g_autoptr(FlEngine) engine =
214 EXPECT_CALL(mock_window, gtk_window_new);
215 EXPECT_CALL(mock_window, gtk_window_maximize(::testing::_));
221 gboolean called = FALSE;
222 fl_mock_binary_messenger_invoke_standard_method(
223 messenger,
"flutter/windowing",
"createRegular",
args,
224 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
227 gboolean* called =
static_cast<gboolean*
>(
user_data);
236 TEST(FlWindowingHandlerTest, CreateRegularMinimized) {
237 flutter::testing::fl_ensure_gtk_init();
238 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
240 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
241 g_autoptr(FlEngine) engine =
245 EXPECT_CALL(mock_window, gtk_window_new);
246 EXPECT_CALL(mock_window, gtk_window_iconify(::testing::_));
252 gboolean called = FALSE;
253 fl_mock_binary_messenger_invoke_standard_method(
254 messenger,
"flutter/windowing",
"createRegular",
args,
255 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
258 gboolean* called =
static_cast<gboolean*
>(
user_data);
267 TEST(FlWindowingHandlerTest, ModifyRegularSize) {
268 flutter::testing::fl_ensure_gtk_init();
269 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
271 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
272 g_autoptr(FlEngine) engine =
276 EXPECT_CALL(mock_window, gtk_window_new);
277 EXPECT_CALL(mock_window, gtk_window_resize(::testing::_, 1024, 768));
281 int64_t view_id = -1;
282 fl_mock_binary_messenger_invoke_standard_method(
283 messenger,
"flutter/windowing",
"createRegular", create_args,
284 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
286 int64_t* view_id =
static_cast<int64_t*
>(
user_data);
290 EXPECT_GT(view_id, 0);
295 gboolean modify_called = FALSE;
296 fl_mock_binary_messenger_invoke_standard_method(
297 messenger,
"flutter/windowing",
"modifyRegular", modify_args,
298 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
300 EXPECT_TRUE(FL_IS_METHOD_SUCCESS_RESPONSE(response));
301 gboolean* called =
static_cast<gboolean*
>(
user_data);
305 EXPECT_TRUE(modify_called);
310 TEST(FlWindowingHandlerTest, ModifyRegularTitle) {
311 flutter::testing::fl_ensure_gtk_init();
312 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
314 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
315 g_autoptr(FlEngine) engine =
319 EXPECT_CALL(mock_window, gtk_window_new);
320 EXPECT_CALL(mock_window,
321 gtk_window_set_title(::testing::_, ::testing::StrEq(
"TITLE")));
325 int64_t view_id = -1;
326 fl_mock_binary_messenger_invoke_standard_method(
327 messenger,
"flutter/windowing",
"createRegular", create_args,
328 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
330 int64_t* view_id =
static_cast<int64_t*
>(
user_data);
334 EXPECT_GT(view_id, 0);
339 gboolean modify_called = FALSE;
340 fl_mock_binary_messenger_invoke_standard_method(
341 messenger,
"flutter/windowing",
"modifyRegular", modify_args,
342 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
344 EXPECT_TRUE(FL_IS_METHOD_SUCCESS_RESPONSE(response));
345 gboolean* called =
static_cast<gboolean*
>(
user_data);
349 EXPECT_TRUE(modify_called);
354 TEST(FlWindowingHandlerTest, ModifyRegularMaximize) {
355 flutter::testing::fl_ensure_gtk_init();
356 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
358 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
359 g_autoptr(FlEngine) engine =
363 EXPECT_CALL(mock_window, gtk_window_new);
367 int64_t view_id = -1;
368 fl_mock_binary_messenger_invoke_standard_method(
369 messenger,
"flutter/windowing",
"createRegular", create_args,
370 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
372 int64_t* view_id =
static_cast<int64_t*
>(
user_data);
376 EXPECT_GT(view_id, 0);
378 EXPECT_CALL(mock_window, gtk_window_maximize(::testing::_));
384 gboolean modify_called = FALSE;
385 fl_mock_binary_messenger_invoke_standard_method(
386 messenger,
"flutter/windowing",
"modifyRegular", modify_args,
387 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
389 EXPECT_TRUE(FL_IS_METHOD_SUCCESS_RESPONSE(response));
390 gboolean* called =
static_cast<gboolean*
>(
user_data);
394 EXPECT_TRUE(modify_called);
399 TEST(FlWindowingHandlerTest, ModifyRegularUnmaximize) {
400 flutter::testing::fl_ensure_gtk_init();
401 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
403 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
404 g_autoptr(FlEngine) engine =
408 EXPECT_CALL(mock_window, gtk_window_new);
409 EXPECT_CALL(mock_window, gtk_window_maximize(::testing::_));
415 int64_t view_id = -1;
416 fl_mock_binary_messenger_invoke_standard_method(
417 messenger,
"flutter/windowing",
"createRegular", create_args,
418 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
420 int64_t* view_id =
static_cast<int64_t*
>(
user_data);
424 EXPECT_GT(view_id, 0);
426 EXPECT_CALL(mock_window, gtk_window_is_maximized(::testing::_))
427 .WillOnce(::testing::Return(
TRUE));
428 EXPECT_CALL(mock_window, gtk_window_unmaximize(::testing::_));
434 gboolean modify_called = FALSE;
435 fl_mock_binary_messenger_invoke_standard_method(
436 messenger,
"flutter/windowing",
"modifyRegular", modify_args,
437 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
439 EXPECT_TRUE(FL_IS_METHOD_SUCCESS_RESPONSE(response));
440 gboolean* called =
static_cast<gboolean*
>(
user_data);
444 EXPECT_TRUE(modify_called);
449 TEST(FlWindowingHandlerTest, ModifyRegularMinimize) {
450 flutter::testing::fl_ensure_gtk_init();
451 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
453 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
454 g_autoptr(FlEngine) engine =
458 EXPECT_CALL(mock_window, gtk_window_new);
462 int64_t view_id = -1;
463 fl_mock_binary_messenger_invoke_standard_method(
464 messenger,
"flutter/windowing",
"createRegular", create_args,
465 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
467 int64_t* view_id =
static_cast<int64_t*
>(
user_data);
471 EXPECT_GT(view_id, 0);
473 EXPECT_CALL(mock_window, gtk_window_iconify(::testing::_));
479 gboolean modify_called = FALSE;
480 fl_mock_binary_messenger_invoke_standard_method(
481 messenger,
"flutter/windowing",
"modifyRegular", modify_args,
482 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
484 EXPECT_TRUE(FL_IS_METHOD_SUCCESS_RESPONSE(response));
485 gboolean* called =
static_cast<gboolean*
>(
user_data);
489 EXPECT_TRUE(modify_called);
494 TEST(FlWindowingHandlerTest, ModifyRegularUnminimize) {
495 flutter::testing::fl_ensure_gtk_init();
496 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
498 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
499 g_autoptr(FlEngine) engine =
503 EXPECT_CALL(mock_window, gtk_window_new);
504 EXPECT_CALL(mock_window, gtk_window_iconify(::testing::_));
510 int64_t view_id = -1;
511 fl_mock_binary_messenger_invoke_standard_method(
512 messenger,
"flutter/windowing",
"createRegular", create_args,
513 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
515 int64_t* view_id =
static_cast<int64_t*
>(
user_data);
519 EXPECT_GT(view_id, 0);
521 EXPECT_CALL(mock_window, gdk_window_get_state(::testing::_))
522 .WillOnce(::testing::Return(GDK_WINDOW_STATE_ICONIFIED));
523 EXPECT_CALL(mock_window, gtk_window_deiconify(::testing::_));
529 gboolean modify_called = FALSE;
530 fl_mock_binary_messenger_invoke_standard_method(
531 messenger,
"flutter/windowing",
"modifyRegular", modify_args,
532 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
534 EXPECT_TRUE(FL_IS_METHOD_SUCCESS_RESPONSE(response));
535 gboolean* called =
static_cast<gboolean*
>(
user_data);
539 EXPECT_TRUE(modify_called);
544 TEST(FlWindowingHandlerTest, ModifyUnknownWindow) {
545 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
546 g_autoptr(FlEngine) engine =
552 gboolean called = FALSE;
553 fl_mock_binary_messenger_invoke_standard_method(
554 messenger,
"flutter/windowing",
"modifyRegular",
args,
555 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
557 EXPECT_TRUE(FL_IS_METHOD_ERROR_RESPONSE(response));
559 FL_METHOD_ERROR_RESPONSE(response)),
562 FL_METHOD_ERROR_RESPONSE(response)),
563 "No window with given view ID");
564 gboolean* called =
static_cast<gboolean*
>(
user_data);
573 TEST(FlWindowingHandlerTest, DestroyWindow) {
574 flutter::testing::fl_ensure_gtk_init();
575 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
577 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
578 g_autoptr(FlEngine) engine =
582 EXPECT_CALL(mock_window, gtk_window_new);
583 EXPECT_CALL(mock_window, gtk_widget_destroy);
587 int64_t view_id = -1;
588 fl_mock_binary_messenger_invoke_standard_method(
589 messenger,
"flutter/windowing",
"createRegular", create_args,
590 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
592 int64_t* view_id =
static_cast<int64_t*
>(
user_data);
596 EXPECT_GT(view_id, 0);
599 gboolean destroy_called = FALSE;
600 fl_mock_binary_messenger_invoke_standard_method(
601 messenger,
"flutter/windowing",
"destroyWindow", destroy_args,
602 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
604 EXPECT_TRUE(FL_IS_METHOD_SUCCESS_RESPONSE(response));
605 gboolean* called =
static_cast<gboolean*
>(
user_data);
609 EXPECT_TRUE(destroy_called);
614 TEST(FlWindowingHandlerTest, DestroyUnknownWindow) {
615 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
616 g_autoptr(FlEngine) engine =
621 gboolean called = FALSE;
622 fl_mock_binary_messenger_invoke_standard_method(
623 messenger,
"flutter/windowing",
"destroyWindow",
args,
624 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
626 EXPECT_TRUE(FL_IS_METHOD_ERROR_RESPONSE(response));
628 FL_METHOD_ERROR_RESPONSE(response)),
631 FL_METHOD_ERROR_RESPONSE(response)),
632 "No window with given view ID");
633 gboolean* called =
static_cast<gboolean*
>(
user_data);