Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
fl_window_state_monitor_test.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
10
12#include "gtest/gtest.h"
13
15 protected:
16 void SetUp() override {
17 gtk_init(0, nullptr);
19 }
20
22 fl_binary_messenger_shutdown(FL_BINARY_MESSENGER(messenger));
23 g_clear_object(&messenger);
24 }
25
26 FlMockBinaryMessenger* messenger = nullptr;
27 ::testing::NiceMock<flutter::testing::MockGtk> mock_gtk;
28};
29
31 EXPECT_CALL(mock_gtk, gdk_window_get_state)
32 .WillOnce(::testing::Return(static_cast<GdkWindowState>(0)));
33
34 gboolean called = TRUE;
36 messenger, "flutter/lifecycle",
37 [](FlMockBinaryMessenger* messenger, GTask* task, FlValue* message,
38 gpointer user_data) {
39 gboolean* called = static_cast<gboolean*>(user_data);
40 *called = TRUE;
41 EXPECT_STREQ(fl_value_get_string(message), "AppLifecycleState.resumed");
42 return fl_value_new_string("");
43 },
44 &called);
45
46 GtkWindow* window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
47 gtk_widget_show(GTK_WIDGET(window));
48 g_autoptr(FlWindowStateMonitor) monitor =
49 fl_window_state_monitor_new(FL_BINARY_MESSENGER(messenger), window);
50
51 GdkEvent event = {
52 .window_state = {.new_window_state = GDK_WINDOW_STATE_FOCUSED}};
53 gboolean handled;
54 g_signal_emit_by_name(window, "window-state-event", &event, &handled);
55 EXPECT_TRUE(called);
56}
57
59 EXPECT_CALL(mock_gtk, gdk_window_get_state)
60 .WillOnce(::testing::Return(GDK_WINDOW_STATE_FOCUSED));
61 gboolean called = TRUE;
63 messenger, "flutter/lifecycle",
64 [](FlMockBinaryMessenger* messenger, GTask* task, FlValue* message,
65 gpointer user_data) {
66 gboolean* called = static_cast<gboolean*>(user_data);
67 *called = TRUE;
68 EXPECT_STREQ(fl_value_get_string(message),
69 "AppLifecycleState.inactive");
70 return fl_value_new_string("");
71 },
72 &called);
73
74 GtkWindow* window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
75 gtk_widget_show(GTK_WIDGET(window));
76 g_autoptr(FlWindowStateMonitor) monitor =
77 fl_window_state_monitor_new(FL_BINARY_MESSENGER(messenger), window);
78
79 GdkEvent event = {
80 .window_state = {.new_window_state = static_cast<GdkWindowState>(0)}};
81 gboolean handled;
82 g_signal_emit_by_name(window, "window-state-event", &event, &handled);
83 EXPECT_TRUE(called);
84}
85
87 EXPECT_CALL(mock_gtk, gdk_window_get_state)
88 .WillOnce(::testing::Return(static_cast<GdkWindowState>(0)));
89 gboolean called = TRUE;
91 messenger, "flutter/lifecycle",
92 [](FlMockBinaryMessenger* messenger, GTask* task, FlValue* message,
93 gpointer user_data) {
94 gboolean* called = static_cast<gboolean*>(user_data);
95 *called = TRUE;
96 EXPECT_STREQ(fl_value_get_string(message), "AppLifecycleState.hidden");
97 return fl_value_new_string("");
98 },
99 &called);
100
101 GtkWindow* window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
102 gtk_widget_show(GTK_WIDGET(window));
103 g_autoptr(FlWindowStateMonitor) monitor =
104 fl_window_state_monitor_new(FL_BINARY_MESSENGER(messenger), window);
105
106 GdkEvent event = {
107 .window_state = {.new_window_state = GDK_WINDOW_STATE_ICONIFIED}};
108 gboolean handled;
109 g_signal_emit_by_name(window, "window-state-event", &event, &handled);
110 EXPECT_TRUE(called);
111}
112
114 EXPECT_CALL(mock_gtk, gdk_window_get_state)
115 .WillOnce(::testing::Return(GDK_WINDOW_STATE_ICONIFIED));
116 gboolean called = TRUE;
118 messenger, "flutter/lifecycle",
119 [](FlMockBinaryMessenger* messenger, GTask* task, FlValue* message,
120 gpointer user_data) {
121 gboolean* called = static_cast<gboolean*>(user_data);
122 *called = TRUE;
123 EXPECT_STREQ(fl_value_get_string(message),
124 "AppLifecycleState.inactive");
125 return fl_value_new_string("");
126 },
127 &called);
128
129 GtkWindow* window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
130 gtk_widget_show(GTK_WIDGET(window));
131 g_autoptr(FlWindowStateMonitor) monitor =
132 fl_window_state_monitor_new(FL_BINARY_MESSENGER(messenger), window);
133
134 GdkEvent event = {
135 .window_state = {.new_window_state = static_cast<GdkWindowState>(0)}};
136 gboolean handled;
137 g_signal_emit_by_name(window, "window-state-event", &event, &handled);
138 EXPECT_TRUE(called);
139}
140
141TEST_F(FlWindowStateMonitorTest, LeaveIconifiedFocused) {
142 EXPECT_CALL(mock_gtk, gdk_window_get_state)
143 .WillOnce(::testing::Return(GDK_WINDOW_STATE_ICONIFIED));
144 gboolean called = TRUE;
146 messenger, "flutter/lifecycle",
147 [](FlMockBinaryMessenger* messenger, GTask* task, FlValue* message,
148 gpointer user_data) {
149 gboolean* called = static_cast<gboolean*>(user_data);
150 *called = TRUE;
151 EXPECT_STREQ(fl_value_get_string(message), "AppLifecycleState.resumed");
152 return fl_value_new_string("");
153 },
154 &called);
155
156 GtkWindow* window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
157 gtk_widget_show(GTK_WIDGET(window));
158 g_autoptr(FlWindowStateMonitor) monitor =
159 fl_window_state_monitor_new(FL_BINARY_MESSENGER(messenger), window);
160
161 GdkEvent event = {
162 .window_state = {.new_window_state = static_cast<GdkWindowState>(
163 GDK_WINDOW_STATE_FOCUSED)}};
164 gboolean handled;
165 g_signal_emit_by_name(window, "window-state-event", &event, &handled);
166 EXPECT_TRUE(called);
167}
168
170 EXPECT_CALL(mock_gtk, gdk_window_get_state)
171 .WillOnce(::testing::Return(static_cast<GdkWindowState>(0)));
172 gboolean called = TRUE;
174 messenger, "flutter/lifecycle",
175 [](FlMockBinaryMessenger* messenger, GTask* task, FlValue* message,
176 gpointer user_data) {
177 gboolean* called = static_cast<gboolean*>(user_data);
178 *called = TRUE;
179 EXPECT_STREQ(fl_value_get_string(message), "AppLifecycleState.hidden");
180 return fl_value_new_string("");
181 },
182 &called);
183
184 GtkWindow* window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
185 gtk_widget_show(GTK_WIDGET(window));
186 g_autoptr(FlWindowStateMonitor) monitor =
187 fl_window_state_monitor_new(FL_BINARY_MESSENGER(messenger), window);
188
189 GdkEvent event = {
190 .window_state = {.new_window_state = GDK_WINDOW_STATE_WITHDRAWN}};
191 gboolean handled;
192 g_signal_emit_by_name(window, "window-state-event", &event, &handled);
193 EXPECT_TRUE(called);
194}
195
197 EXPECT_CALL(mock_gtk, gdk_window_get_state)
198 .WillOnce(::testing::Return(GDK_WINDOW_STATE_WITHDRAWN));
199 gboolean called = TRUE;
201 messenger, "flutter/lifecycle",
202 [](FlMockBinaryMessenger* messenger, GTask* task, FlValue* message,
203 gpointer user_data) {
204 gboolean* called = static_cast<gboolean*>(user_data);
205 *called = TRUE;
206 EXPECT_STREQ(fl_value_get_string(message),
207 "AppLifecycleState.inactive");
208 return fl_value_new_string("");
209 },
210 &called);
211
212 GtkWindow* window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
213 gtk_widget_show(GTK_WIDGET(window));
214 g_autoptr(FlWindowStateMonitor) monitor =
215 fl_window_state_monitor_new(FL_BINARY_MESSENGER(messenger), window);
216
217 GdkEvent event = {
218 .window_state = {.new_window_state = static_cast<GdkWindowState>(0)}};
219 gboolean handled;
220 g_signal_emit_by_name(window, "window-state-event", &event, &handled);
221 EXPECT_TRUE(called);
222}
223
224TEST_F(FlWindowStateMonitorTest, LeaveWithdrawnFocused) {
225 EXPECT_CALL(mock_gtk, gdk_window_get_state)
226 .WillOnce(::testing::Return(GDK_WINDOW_STATE_WITHDRAWN));
227 gboolean called = TRUE;
229 messenger, "flutter/lifecycle",
230 [](FlMockBinaryMessenger* messenger, GTask* task, FlValue* message,
231 gpointer user_data) {
232 gboolean* called = static_cast<gboolean*>(user_data);
233 *called = TRUE;
234 EXPECT_STREQ(fl_value_get_string(message), "AppLifecycleState.resumed");
235 return fl_value_new_string("");
236 },
237 &called);
238
239 GtkWindow* window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
240 gtk_widget_show(GTK_WIDGET(window));
241 g_autoptr(FlWindowStateMonitor) monitor =
242 fl_window_state_monitor_new(FL_BINARY_MESSENGER(messenger), window);
243
244 GdkEvent event = {
245 .window_state = {.new_window_state = static_cast<GdkWindowState>(
246 GDK_WINDOW_STATE_FOCUSED)}};
247 gboolean handled;
248 g_signal_emit_by_name(window, "window-state-event", &event, &handled);
249 EXPECT_TRUE(called);
250}
::testing::NiceMock< flutter::testing::MockGtk > mock_gtk
GLFWwindow * window
Definition main.cc:60
const char * message
g_autoptr(FlEngine) engine
void fl_binary_messenger_shutdown(FlBinaryMessenger *self)
return TRUE
FlMockBinaryMessenger * fl_mock_binary_messenger_new()
void fl_mock_binary_messenger_set_string_message_channel(FlMockBinaryMessenger *self, const gchar *channel, FlMockBinaryMessengerMessageChannelHandler handler, gpointer user_data)
G_MODULE_EXPORT FlValue * fl_value_new_string(const gchar *value)
Definition fl_value.cc:276
G_MODULE_EXPORT const gchar * fl_value_get_string(FlValue *self)
Definition fl_value.cc:682
typedefG_BEGIN_DECLS struct _FlValue FlValue
Definition fl_value.h:42
FlWindowStateMonitor * fl_window_state_monitor_new(FlBinaryMessenger *messenger, GtkWindow *window)
TEST_F(FlWindowStateMonitorTest, GainFocus)
void gtk_widget_show(GtkWidget *widget)
Definition mock_gtk.cc:267
GtkWidget * gtk_window_new(GtkWindowType type)
Definition mock_gtk.cc:182
GdkWindowState gdk_window_get_state(GdkWindow *window)
Definition mock_gtk.cc:100