6 #include "flutter/shell/platform/embedder/test_utils/proc_table_replacement.h"
9 #include "flutter/shell/platform/linux/testing/fl_test.h"
10 #include "flutter/shell/platform/linux/testing/fl_test_gtk_logs.h"
11 #include "flutter/shell/platform/linux/testing/mock_gtk.h"
13 #include "gtest/gtest.h"
16 *first_frame_emitted =
TRUE;
19 TEST(FlViewTest, GetEngine) {
20 flutter::testing::fl_ensure_gtk_init();
27 EXPECT_NE(engine,
nullptr);
30 TEST(FlViewTest, StateUpdateDoesNotHappenInInit) {
31 flutter::testing::fl_ensure_gtk_init();
37 flutter::testing::fl_get_received_gtk_log_levels() & G_LOG_LEVEL_CRITICAL,
43 TEST(FlViewTest, FirstFrameSignal) {
44 flutter::testing::fl_ensure_gtk_init();
48 gboolean first_frame_emitted = FALSE;
50 &first_frame_emitted);
52 EXPECT_FALSE(first_frame_emitted);
57 while (g_main_context_iteration(g_main_context_default(), FALSE)) {
62 EXPECT_TRUE(first_frame_emitted);
66 TEST(FlViewTest, SemanticsUpdate) {
67 flutter::testing::fl_ensure_gtk_init();
73 g_autoptr(GError)
error =
nullptr;
76 FlutterSemanticsNode2 root_node = {
80 FlutterSemanticsNode2* nodes[1] = {&root_node};
81 FlutterSemanticsUpdate2 update = {
82 .node_count = 1, .nodes = nodes, .view_id = 0};
83 g_signal_emit_by_name(engine,
"update-semantics", &update);
86 EXPECT_EQ(atk_object_get_n_accessible_children(ATK_OBJECT(accessible)), 1);
87 AtkObject* root_object =
88 atk_object_ref_accessible_child(ATK_OBJECT(accessible), 0);
89 EXPECT_STREQ(atk_object_get_name(root_object),
"root");
93 TEST(FlViewTest, SemanticsUpdateOtherView) {
94 flutter::testing::fl_ensure_gtk_init();
100 g_autoptr(GError)
error =
nullptr;
103 FlutterSemanticsNode2 root_node = {
107 FlutterSemanticsNode2* nodes[1] = {&root_node};
108 FlutterSemanticsUpdate2 update = {
109 .node_count = 1, .nodes = nodes, .view_id = 99};
110 g_signal_emit_by_name(engine,
"update-semantics", &update);
113 EXPECT_EQ(atk_object_get_n_accessible_children(ATK_OBJECT(accessible)), 0);
117 TEST(FlViewTest, SecondaryView) {
118 flutter::testing::fl_ensure_gtk_init();
127 AddView, ([&
view_id](
auto engine,
const FlutterAddViewInfo* info) {
129 FlutterAddViewResult result = {
130 .struct_size =
sizeof(FlutterAddViewResult),
133 info->add_view_callback(&result);
137 g_autoptr(GError)
error =
nullptr;
145 TEST(FlViewTest, SecondaryViewError) {
146 flutter::testing::fl_ensure_gtk_init();
155 AddView, ([&
view_id](
auto engine,
const FlutterAddViewInfo* info) {
157 return kInvalidArguments;
160 g_autoptr(GError)
error =
nullptr;
168 TEST(FlViewTest, ViewDestroy) {
169 flutter::testing::fl_ensure_gtk_init();
176 g_autoptr(GPtrArray) removed_views = g_ptr_array_new();
179 ([removed_views](
auto engine,
const FlutterRemoveViewInfo* info) {
180 g_ptr_array_add(removed_views, GINT_TO_POINTER(info->view_id));
184 g_autoptr(GError)
error =
nullptr;
192 fl_gtk_widget_destroy(GTK_WIDGET(secondary_view));
193 fl_gtk_widget_destroy(GTK_WIDGET(implicit_view));
195 EXPECT_EQ(removed_views->len, 2u);
196 EXPECT_EQ(GPOINTER_TO_INT(g_ptr_array_index(removed_views, 0)),
198 EXPECT_EQ(GPOINTER_TO_INT(g_ptr_array_index(removed_views, 1)),
203 TEST(FlViewTest, ViewDestroyError) {
204 flutter::testing::fl_ensure_gtk_init();
212 RemoveView, ([](
auto engine,
const FlutterRemoveViewInfo* info) {
213 return kInvalidArguments;
216 g_autoptr(GError)
error =
nullptr;
221 fl_gtk_widget_destroy(GTK_WIDGET(secondary_view));
222 fl_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)
FlViewAccessible * fl_view_get_accessible(FlView *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)
G_BEGIN_DECLS FlutterViewId view_id
static void first_frame_cb(FlView *view, gboolean *first_frame_emitted)
TEST(FlViewTest, GetEngine)