9 #include "flutter/shell/platform/embedder/test_utils/proc_table_replacement.h"
13 #include "flutter/shell/platform/linux/testing/fl_test.h"
14 #include "flutter/shell/platform/linux/testing/fl_test_gtk_logs.h"
15 #include "flutter/shell/platform/linux/testing/mock_gtk.h"
17 #include "flutter/shell/platform/linux/testing/linux_test.h"
18 #include "gtest/gtest.h"
23 *first_frame_emitted =
TRUE;
27 class FlViewTest :
public flutter::testing::LinuxTest {};
35 EXPECT_NE(engine,
nullptr);
43 flutter::testing::fl_get_received_gtk_log_levels() & G_LOG_LEVEL_CRITICAL,
54 g_object_ref_sink(
view);
77 gboolean first_frame_emitted = FALSE;
79 &first_frame_emitted);
81 EXPECT_FALSE(first_frame_emitted);
86 while (g_main_context_iteration(g_main_context_default(), FALSE)) {
91 EXPECT_TRUE(first_frame_emitted);
102 FlutterSemanticsFlags flags = {};
103 FlutterSemanticsNode2 root_node = {
104 .id = 0, .label =
"root", .flags2 = &flags};
105 FlutterSemanticsNode2* nodes[1] = {&root_node};
106 FlutterSemanticsUpdate2 update = {
107 .node_count = 1, .nodes = nodes, .view_id = 0};
108 g_signal_emit_by_name(engine,
"update-semantics", &update);
111 EXPECT_EQ(atk_object_get_n_accessible_children(ATK_OBJECT(
accessible)), 1);
112 AtkObject* root_object =
113 atk_object_ref_accessible_child(ATK_OBJECT(
accessible), 0);
114 EXPECT_STREQ(atk_object_get_name(root_object),
"root");
124 FlutterSemanticsFlags flags = {};
125 FlutterSemanticsNode2 root_node = {
126 .id = 0, .label =
"root", .flags2 = &flags};
127 FlutterSemanticsNode2* nodes[1] = {&root_node};
128 FlutterSemanticsUpdate2 update = {
129 .node_count = 1, .nodes = nodes, .view_id = 99};
130 g_signal_emit_by_name(engine,
"update-semantics", &update);
133 EXPECT_EQ(atk_object_get_n_accessible_children(ATK_OBJECT(
accessible)), 0);
142 auto view_id = std::make_shared<FlutterViewId>(-1);
144 AddView, ([
view_id](
auto engine,
const FlutterAddViewInfo* info) {
146 FlutterAddViewResult result = {
147 .struct_size =
sizeof(FlutterAddViewResult),
150 info->add_view_callback(&result);
166 auto view_id = std::make_shared<FlutterViewId>(-1);
168 AddView, ([
view_id](
auto engine,
const FlutterAddViewInfo* info) {
170 return kInvalidArguments;
185 g_autoptr(GPtrArray) removed_views = g_ptr_array_new();
188 ([removed_views](
auto engine,
const FlutterRemoveViewInfo* info) {
189 g_ptr_array_add(removed_views, GINT_TO_POINTER(info->view_id));
200 fl_gtk_widget_destroy(GTK_WIDGET(secondary_view));
201 fl_gtk_widget_destroy(GTK_WIDGET(implicit_view));
203 EXPECT_EQ(removed_views->len, 2u);
204 EXPECT_EQ(GPOINTER_TO_INT(g_ptr_array_index(removed_views, 0)),
206 EXPECT_EQ(GPOINTER_TO_INT(g_ptr_array_index(removed_views, 1)),
217 RemoveView, ([](
auto engine,
const FlutterRemoveViewInfo* info) {
218 return kInvalidArguments;
225 fl_gtk_widget_destroy(GTK_WIDGET(secondary_view));
226 fl_gtk_widget_destroy(GTK_WIDGET(implicit_view));
236 RemoveView, ([](
auto engine,
const FlutterRemoveViewInfo* info) {
237 return kInvalidArguments;
244 fl_gtk_widget_destroy(GTK_WIDGET(secondary_view));
245 fl_gtk_widget_destroy(GTK_WIDGET(implicit_view));
FlViewAccessible * accessible
g_autoptr(FlEngine) engine
const char FlTextDirection FlAssertiveness gpointer user_data
FlutterEngineProcTable * fl_engine_get_embedder_api(FlEngine *self)
FlTextInputHandler * fl_engine_get_text_input_handler(FlEngine *self)
void fl_renderable_present_layers(FlRenderable *self, const FlutterLayer **layers, size_t layers_count)
void fl_text_input_handler_set_widget(FlTextInputHandler *self, GtkWidget *widget)
GtkWidget * fl_text_input_handler_get_widget(FlTextInputHandler *self)
FlViewAccessible * fl_view_get_accessible(FlView *self)
G_MODULE_EXPORT FlView * fl_view_new(FlDartProject *project)
G_MODULE_EXPORT FlView * fl_view_new_sized_to_content(FlEngine *engine)
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(FlViewMonitor *self)
TEST_F(FlViewTest, GetEngine)