8 #include "flutter/shell/platform/linux/testing/fl_mock_binary_messenger.h"
9 #include "flutter/shell/platform/linux/testing/mock_window.h"
11 #include "gtest/gtest.h"
13 TEST(FlWindowStateMonitorTest, GainFocus) {
14 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
15 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
19 EXPECT_CALL(mock_window, gdk_window_get_state)
20 .WillOnce(::testing::Return(
static_cast<GdkWindowState
>(0)));
22 gboolean called =
TRUE;
23 fl_mock_binary_messenger_set_string_message_channel(
24 messenger,
"flutter/lifecycle",
25 [](FlMockBinaryMessenger* messenger, GTask* task,
FlValue* message,
27 gboolean* called =
static_cast<gboolean*
>(
user_data);
34 GtkWindow* window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
35 gtk_widget_show(GTK_WIDGET(window));
36 g_autoptr(FlWindowStateMonitor) monitor =
40 .window_state = {.new_window_state = GDK_WINDOW_STATE_FOCUSED}};
42 g_signal_emit_by_name(window,
"window-state-event", &event, &handled);
48 TEST(FlWindowStateMonitorTest, LoseFocus) {
49 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
50 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
54 EXPECT_CALL(mock_window, gdk_window_get_state)
55 .WillOnce(::testing::Return(GDK_WINDOW_STATE_FOCUSED));
56 gboolean called =
TRUE;
57 fl_mock_binary_messenger_set_string_message_channel(
58 messenger,
"flutter/lifecycle",
59 [](FlMockBinaryMessenger* messenger, GTask* task,
FlValue* message,
61 gboolean* called =
static_cast<gboolean*
>(
user_data);
64 "AppLifecycleState.inactive");
69 GtkWindow* window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
70 gtk_widget_show(GTK_WIDGET(window));
71 g_autoptr(FlWindowStateMonitor) monitor =
75 .window_state = {.new_window_state =
static_cast<GdkWindowState
>(0)}};
77 g_signal_emit_by_name(window,
"window-state-event", &event, &handled);
83 TEST(FlWindowStateMonitorTest, EnterIconified) {
84 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
85 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
89 EXPECT_CALL(mock_window, gdk_window_get_state)
90 .WillOnce(::testing::Return(
static_cast<GdkWindowState
>(0)));
91 gboolean called =
TRUE;
92 fl_mock_binary_messenger_set_string_message_channel(
93 messenger,
"flutter/lifecycle",
94 [](FlMockBinaryMessenger* messenger, GTask* task,
FlValue* message,
96 gboolean* called =
static_cast<gboolean*
>(
user_data);
103 GtkWindow* window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
104 gtk_widget_show(GTK_WIDGET(window));
105 g_autoptr(FlWindowStateMonitor) monitor =
109 .window_state = {.new_window_state = GDK_WINDOW_STATE_ICONIFIED}};
111 g_signal_emit_by_name(window,
"window-state-event", &event, &handled);
117 TEST(FlWindowStateMonitorTest, LeaveIconified) {
118 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
119 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
121 gtk_init(0,
nullptr);
123 EXPECT_CALL(mock_window, gdk_window_get_state)
124 .WillOnce(::testing::Return(GDK_WINDOW_STATE_ICONIFIED));
125 gboolean called =
TRUE;
126 fl_mock_binary_messenger_set_string_message_channel(
127 messenger,
"flutter/lifecycle",
128 [](FlMockBinaryMessenger* messenger, GTask* task,
FlValue* message,
130 gboolean* called =
static_cast<gboolean*
>(
user_data);
133 "AppLifecycleState.inactive");
138 GtkWindow* window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
139 gtk_widget_show(GTK_WIDGET(window));
140 g_autoptr(FlWindowStateMonitor) monitor =
144 .window_state = {.new_window_state =
static_cast<GdkWindowState
>(0)}};
146 g_signal_emit_by_name(window,
"window-state-event", &event, &handled);
152 TEST(FlWindowStateMonitorTest, LeaveIconifiedFocused) {
153 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
154 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
156 gtk_init(0,
nullptr);
158 EXPECT_CALL(mock_window, gdk_window_get_state)
159 .WillOnce(::testing::Return(GDK_WINDOW_STATE_ICONIFIED));
160 gboolean called =
TRUE;
161 fl_mock_binary_messenger_set_string_message_channel(
162 messenger,
"flutter/lifecycle",
163 [](FlMockBinaryMessenger* messenger, GTask* task,
FlValue* message,
165 gboolean* called =
static_cast<gboolean*
>(
user_data);
172 GtkWindow* window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
173 gtk_widget_show(GTK_WIDGET(window));
174 g_autoptr(FlWindowStateMonitor) monitor =
178 .window_state = {.new_window_state =
static_cast<GdkWindowState
>(
179 GDK_WINDOW_STATE_FOCUSED)}};
181 g_signal_emit_by_name(window,
"window-state-event", &event, &handled);
187 TEST(FlWindowStateMonitorTest, EnterWithdrawn) {
188 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
189 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
191 gtk_init(0,
nullptr);
193 EXPECT_CALL(mock_window, gdk_window_get_state)
194 .WillOnce(::testing::Return(
static_cast<GdkWindowState
>(0)));
195 gboolean called =
TRUE;
196 fl_mock_binary_messenger_set_string_message_channel(
197 messenger,
"flutter/lifecycle",
198 [](FlMockBinaryMessenger* messenger, GTask* task,
FlValue* message,
200 gboolean* called =
static_cast<gboolean*
>(
user_data);
207 GtkWindow* window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
208 gtk_widget_show(GTK_WIDGET(window));
209 g_autoptr(FlWindowStateMonitor) monitor =
213 .window_state = {.new_window_state = GDK_WINDOW_STATE_WITHDRAWN}};
215 g_signal_emit_by_name(window,
"window-state-event", &event, &handled);
221 TEST(FlWindowStateMonitorTest, LeaveWithdrawn) {
222 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
223 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
225 gtk_init(0,
nullptr);
227 EXPECT_CALL(mock_window, gdk_window_get_state)
228 .WillOnce(::testing::Return(GDK_WINDOW_STATE_WITHDRAWN));
229 gboolean called =
TRUE;
230 fl_mock_binary_messenger_set_string_message_channel(
231 messenger,
"flutter/lifecycle",
232 [](FlMockBinaryMessenger* messenger, GTask* task,
FlValue* message,
234 gboolean* called =
static_cast<gboolean*
>(
user_data);
237 "AppLifecycleState.inactive");
242 GtkWindow* window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
243 gtk_widget_show(GTK_WIDGET(window));
244 g_autoptr(FlWindowStateMonitor) monitor =
248 .window_state = {.new_window_state =
static_cast<GdkWindowState
>(0)}};
250 g_signal_emit_by_name(window,
"window-state-event", &event, &handled);
256 TEST(FlWindowStateMonitorTest, LeaveWithdrawnFocused) {
257 g_autoptr(FlMockBinaryMessenger) messenger = fl_mock_binary_messenger_new();
258 ::testing::NiceMock<flutter::testing::MockWindow> mock_window;
260 gtk_init(0,
nullptr);
262 EXPECT_CALL(mock_window, gdk_window_get_state)
263 .WillOnce(::testing::Return(GDK_WINDOW_STATE_WITHDRAWN));
264 gboolean called =
TRUE;
265 fl_mock_binary_messenger_set_string_message_channel(
266 messenger,
"flutter/lifecycle",
267 [](FlMockBinaryMessenger* messenger, GTask* task,
FlValue* message,
269 gboolean* called =
static_cast<gboolean*
>(
user_data);
276 GtkWindow* window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
277 gtk_widget_show(GTK_WIDGET(window));
278 g_autoptr(FlWindowStateMonitor) monitor =
282 .window_state = {.new_window_state =
static_cast<GdkWindowState
>(
283 GDK_WINDOW_STATE_FOCUSED)}};
285 g_signal_emit_by_name(window,
"window-state-event", &event, &handled);