6 #include "flutter/shell/platform/embedder/test_utils/proc_table_replacement.h"
8 #include "flutter/shell/platform/linux/testing/fl_test.h"
9 #include "flutter/shell/platform/linux/testing/fl_test_gtk_logs.h"
11 #include "gtest/gtest.h"
14 *first_frame_emitted =
TRUE;
17 TEST(FlViewTest, GetEngine) {
18 flutter::testing::fl_ensure_gtk_init();
25 EXPECT_NE(engine,
nullptr);
28 TEST(FlViewTest, StateUpdateDoesNotHappenInInit) {
29 flutter::testing::fl_ensure_gtk_init();
35 flutter::testing::fl_get_received_gtk_log_levels() & G_LOG_LEVEL_CRITICAL,
41 TEST(FlViewTest, FirstFrameSignal) {
42 flutter::testing::fl_ensure_gtk_init();
46 gboolean first_frame_emitted = FALSE;
48 &first_frame_emitted);
50 EXPECT_FALSE(first_frame_emitted);
55 while (g_main_context_iteration(g_main_context_default(), FALSE)) {
60 EXPECT_TRUE(first_frame_emitted);
64 TEST(FlViewTest, SecondaryView) {
65 flutter::testing::fl_ensure_gtk_init();
72 FlutterViewId view_id = -1;
74 AddView, ([&view_id](
auto engine,
const FlutterAddViewInfo* info) {
75 view_id = info->view_id;
76 FlutterAddViewResult result = {
77 .struct_size =
sizeof(FlutterAddViewResult),
80 info->add_view_callback(&result);
84 g_autoptr(GError)
error =
nullptr;
92 TEST(FlViewTest, SecondaryViewError) {
93 flutter::testing::fl_ensure_gtk_init();
100 FlutterViewId view_id = -1;
102 AddView, ([&view_id](
auto engine,
const FlutterAddViewInfo* info) {
103 view_id = info->view_id;
104 return kInvalidArguments;
107 g_autoptr(GError)
error =
nullptr;
115 TEST(FlViewTest, ViewDestroy) {
116 flutter::testing::fl_ensure_gtk_init();
123 g_autoptr(GPtrArray) removed_views = g_ptr_array_new();
126 ([removed_views](
auto engine,
const FlutterRemoveViewInfo* info) {
127 g_ptr_array_add(removed_views, GINT_TO_POINTER(info->view_id));
131 g_autoptr(GError)
error =
nullptr;
139 gtk_widget_destroy(GTK_WIDGET(secondary_view));
140 gtk_widget_destroy(GTK_WIDGET(implicit_view));
142 EXPECT_EQ(removed_views->len, 2u);
143 EXPECT_EQ(GPOINTER_TO_INT(g_ptr_array_index(removed_views, 0)),
145 EXPECT_EQ(GPOINTER_TO_INT(g_ptr_array_index(removed_views, 1)),
150 TEST(FlViewTest, ViewDestroyError) {
151 flutter::testing::fl_ensure_gtk_init();
159 RemoveView, ([](
auto engine,
const FlutterRemoveViewInfo* info) {
160 return kInvalidArguments;
163 g_autoptr(GError)
error =
nullptr;
168 gtk_widget_destroy(GTK_WIDGET(secondary_view));
169 gtk_widget_destroy(GTK_WIDGET(implicit_view));
G_MODULE_EXPORT FlDartProject * fl_dart_project_new()
FlutterEngineProcTable * fl_engine_get_embedder_api(FlEngine *self)
gboolean fl_engine_start(FlEngine *self, GError **error)
G_BEGIN_DECLS G_MODULE_EXPORT FlValue gpointer user_data
const uint8_t uint32_t uint32_t GError ** error
void fl_renderable_redraw(FlRenderable *self)
G_MODULE_EXPORT FlView * fl_view_new(FlDartProject *project)
G_MODULE_EXPORT FlView * fl_view_new_for_engine(FlEngine *engine)
G_MODULE_EXPORT FlEngine * fl_view_get_engine(FlView *self)
G_MODULE_EXPORT int64_t fl_view_get_id(FlView *self)
static void first_frame_cb(FlView *view, gboolean *first_frame_emitted)
TEST(FlViewTest, GetEngine)