Flutter Engine
 
Loading...
Searching...
No Matches
fl_view_test.cc File Reference

Go to the source code of this file.

Functions

 TEST (FlViewTest, GetEngine)
 
 TEST (FlViewTest, StateUpdateDoesNotHappenInInit)
 
 TEST (FlViewTest, SemanticsUpdate)
 
 TEST (FlViewTest, SemanticsUpdateOtherView)
 
 TEST (FlViewTest, SecondaryView)
 
 TEST (FlViewTest, SecondaryViewError)
 
 TEST (FlViewTest, ViewDestroy)
 
 TEST (FlViewTest, ViewDestroyError)
 

Function Documentation

◆ TEST() [1/8]

TEST ( FlViewTest  ,
GetEngine   
)

Definition at line 22 of file fl_view_test.cc.

22 {
24 g_autoptr(FlDartProject) project = fl_dart_project_new();
25 FlView* view = fl_view_new(project);
26
27 // Check the engine is immediately available (i.e. before the widget is
28 // realized).
29 FlEngine* engine = fl_view_get_engine(view);
30 EXPECT_NE(engine, nullptr);
31}
FlutterEngine engine
Definition main.cc:84
FlView * view
g_autoptr(GMutexLocker) locker
G_MODULE_EXPORT FlDartProject * fl_dart_project_new()
G_MODULE_EXPORT FlView * fl_view_new(FlDartProject *project)
Definition fl_view.cc:763
G_MODULE_EXPORT FlEngine * fl_view_get_engine(FlView *self)
Definition fl_view.cc:790
void fl_ensure_gtk_init(GLogWriterFunc writer)
Ensures that GTK has been initialized and starts monitoring logs.

References engine, fl_dart_project_new(), flutter::testing::fl_ensure_gtk_init(), fl_view_get_engine(), fl_view_new(), g_autoptr(), and view.

◆ TEST() [2/8]

TEST ( FlViewTest  ,
SecondaryView   
)

Definition at line 124 of file fl_view_test.cc.

124 {
126
127 g_autoptr(FlDartProject) project = fl_dart_project_new();
128 FlView* implicit_view = fl_view_new(project);
129
130 FlEngine* engine = fl_view_get_engine(implicit_view);
131
134 AddView, ([&view_id](auto engine, const FlutterAddViewInfo* info) {
135 view_id = info->view_id;
136 FlutterAddViewResult result = {
138 .added = true,
139 .user_data = info->user_data};
140 info->add_view_callback(&result);
141 return kSuccess;
142 }));
143
144 g_autoptr(GError) error = nullptr;
145 EXPECT_TRUE(fl_engine_start(engine, &error));
146
147 FlView* secondary_view = fl_view_new_for_engine(engine);
148 EXPECT_EQ(view_id, fl_view_get_id(secondary_view));
149}
@ kSuccess
Definition embedder.h:73
int64_t FlutterViewId
Definition embedder.h:386
FlutterEngineProcTable * fl_engine_get_embedder_api(FlEngine *self)
Definition fl_engine.cc:868
gboolean fl_engine_start(FlEngine *self, GError **error)
Definition fl_engine.cc:726
const uint8_t uint32_t uint32_t GError ** error
G_MODULE_EXPORT FlView * fl_view_new_for_engine(FlEngine *engine)
Definition fl_view.cc:777
G_MODULE_EXPORT int64_t fl_view_get_id(FlView *self)
Definition fl_view.cc:796
G_BEGIN_DECLS FlutterViewId view_id
#define MOCK_ENGINE_PROC(proc, mock_impl)
FlutterAddViewCallback add_view_callback
Definition embedder.h:1117
FlutterViewId view_id
The identifier for the view to add. This must be unique.
Definition embedder.h:1097
FlutterEngineAddViewFnPtr AddView
Definition embedder.h:3748

References FlutterAddViewInfo::add_view_callback, FlutterEngineProcTable::AddView, engine, error, fl_dart_project_new(), fl_engine_get_embedder_api(), fl_engine_start(), flutter::testing::fl_ensure_gtk_init(), fl_view_get_engine(), fl_view_get_id(), fl_view_new(), fl_view_new_for_engine(), g_autoptr(), kSuccess, MOCK_ENGINE_PROC, FlutterAddViewResult::struct_size, user_data, FlutterAddViewInfo::user_data, FlutterAddViewInfo::view_id, and view_id.

◆ TEST() [3/8]

TEST ( FlViewTest  ,
SecondaryViewError   
)

Definition at line 152 of file fl_view_test.cc.

152 {
154
155 g_autoptr(FlDartProject) project = fl_dart_project_new();
156 FlView* implicit_view = fl_view_new(project);
157
158 FlEngine* engine = fl_view_get_engine(implicit_view);
159
162 AddView, ([&view_id](auto engine, const FlutterAddViewInfo* info) {
163 view_id = info->view_id;
164 return kInvalidArguments;
165 }));
166
167 g_autoptr(GError) error = nullptr;
168 EXPECT_TRUE(fl_engine_start(engine, &error));
169
170 FlView* secondary_view = fl_view_new_for_engine(engine);
171 EXPECT_EQ(view_id, fl_view_get_id(secondary_view));
172}
@ kInvalidArguments
Definition embedder.h:75

References FlutterEngineProcTable::AddView, engine, error, fl_dart_project_new(), fl_engine_get_embedder_api(), fl_engine_start(), flutter::testing::fl_ensure_gtk_init(), fl_view_get_engine(), fl_view_get_id(), fl_view_new(), fl_view_new_for_engine(), g_autoptr(), kInvalidArguments, MOCK_ENGINE_PROC, FlutterAddViewInfo::view_id, and view_id.

◆ TEST() [4/8]

TEST ( FlViewTest  ,
SemanticsUpdate   
)

Definition at line 75 of file fl_view_test.cc.

75 {
77
78 g_autoptr(FlDartProject) project = fl_dart_project_new();
79 FlView* view = fl_view_new(project);
80
81 FlEngine* engine = fl_view_get_engine(view);
82 g_autoptr(GError) error = nullptr;
83 EXPECT_TRUE(fl_engine_start(engine, &error));
84
85 FlutterSemanticsFlags flags = {};
86 FlutterSemanticsNode2 root_node = {
87 .id = 0, .label = "root", .flags2 = &flags};
88 FlutterSemanticsNode2* nodes[1] = {&root_node};
90 .node_count = 1, .nodes = nodes, .view_id = 0};
91 g_signal_emit_by_name(engine, "update-semantics", &update);
92
93 FlViewAccessible* accessible = fl_view_get_accessible(view);
94 EXPECT_EQ(atk_object_get_n_accessible_children(ATK_OBJECT(accessible)), 1);
95 AtkObject* root_object =
96 atk_object_ref_accessible_child(ATK_OBJECT(accessible), 0);
97 EXPECT_STREQ(atk_object_get_name(root_object), "root");
98}
FlViewAccessible * fl_view_get_accessible(FlView *self)
Definition fl_view.cc:808
int32_t id
The unique identifier for this node.
Definition embedder.h:1613
A batch of updates to semantics nodes and custom actions.
Definition embedder.h:1796
size_t node_count
The number of semantics node updates.
Definition embedder.h:1800

References engine, error, fl_dart_project_new(), fl_engine_start(), flutter::testing::fl_ensure_gtk_init(), fl_view_get_accessible(), fl_view_get_engine(), fl_view_new(), g_autoptr(), FlutterSemanticsNode2::id, FlutterSemanticsUpdate2::node_count, and view.

◆ TEST() [5/8]

TEST ( FlViewTest  ,
SemanticsUpdateOtherView   
)

Definition at line 101 of file fl_view_test.cc.

101 {
103
104 g_autoptr(FlDartProject) project = fl_dart_project_new();
105 FlView* view = fl_view_new(project);
106
107 FlEngine* engine = fl_view_get_engine(view);
108 g_autoptr(GError) error = nullptr;
109 EXPECT_TRUE(fl_engine_start(engine, &error));
110
111 FlutterSemanticsFlags flags = {};
112 FlutterSemanticsNode2 root_node = {
113 .id = 0, .label = "root", .flags2 = &flags};
114 FlutterSemanticsNode2* nodes[1] = {&root_node};
115 FlutterSemanticsUpdate2 update = {
116 .node_count = 1, .nodes = nodes, .view_id = 99};
117 g_signal_emit_by_name(engine, "update-semantics", &update);
118
119 FlViewAccessible* accessible = fl_view_get_accessible(view);
120 EXPECT_EQ(atk_object_get_n_accessible_children(ATK_OBJECT(accessible)), 0);
121}

References engine, error, fl_dart_project_new(), fl_engine_start(), flutter::testing::fl_ensure_gtk_init(), fl_view_get_accessible(), fl_view_get_engine(), fl_view_new(), g_autoptr(), FlutterSemanticsNode2::id, FlutterSemanticsUpdate2::node_count, and view.

◆ TEST() [6/8]

TEST ( FlViewTest  ,
StateUpdateDoesNotHappenInInit   
)

Definition at line 33 of file fl_view_test.cc.

33 {
35 g_autoptr(FlDartProject) project = fl_dart_project_new();
36 FlView* view = fl_view_new(project);
37 // Check that creating a view doesn't try to query the window state in
38 // initialization, causing a critical log to be issued.
39 EXPECT_EQ(
41 (GLogLevelFlags)0x0);
42
43 (void)view;
44}
GLogLevelFlags fl_get_received_gtk_log_levels()
Returns the recorded log levels.

References fl_dart_project_new(), flutter::testing::fl_ensure_gtk_init(), flutter::testing::fl_get_received_gtk_log_levels(), fl_view_new(), g_autoptr(), and view.

◆ TEST() [7/8]

TEST ( FlViewTest  ,
ViewDestroy   
)

Definition at line 175 of file fl_view_test.cc.

175 {
177
178 g_autoptr(FlDartProject) project = fl_dart_project_new();
179 FlView* implicit_view = fl_view_new(project);
180
181 FlEngine* engine = fl_view_get_engine(implicit_view);
182
183 g_autoptr(GPtrArray) removed_views = g_ptr_array_new();
185 RemoveView,
186 ([removed_views](auto engine, const FlutterRemoveViewInfo* info) {
187 g_ptr_array_add(removed_views, GINT_TO_POINTER(info->view_id));
188 return kSuccess;
189 }));
190
191 g_autoptr(GError) error = nullptr;
192 EXPECT_TRUE(fl_engine_start(engine, &error));
193
194 FlView* secondary_view = fl_view_new_for_engine(engine);
195
196 int64_t implicit_view_id = fl_view_get_id(implicit_view);
197 int64_t secondary_view_id = fl_view_get_id(secondary_view);
198
199 fl_gtk_widget_destroy(GTK_WIDGET(secondary_view));
200 fl_gtk_widget_destroy(GTK_WIDGET(implicit_view));
201
202 EXPECT_EQ(removed_views->len, 2u);
203 EXPECT_EQ(GPOINTER_TO_INT(g_ptr_array_index(removed_views, 0)),
204 secondary_view_id);
205 EXPECT_EQ(GPOINTER_TO_INT(g_ptr_array_index(removed_views, 1)),
206 implicit_view_id);
207}
void fl_gtk_widget_destroy(GtkWidget *widget)
Definition mock_gtk.cc:269
FlutterEngineRemoveViewFnPtr RemoveView
Definition embedder.h:3749
FlutterViewId view_id
Definition embedder.h:1148

References engine, error, fl_dart_project_new(), fl_engine_get_embedder_api(), fl_engine_start(), flutter::testing::fl_ensure_gtk_init(), fl_gtk_widget_destroy(), fl_view_get_engine(), fl_view_get_id(), fl_view_new(), fl_view_new_for_engine(), g_autoptr(), kSuccess, MOCK_ENGINE_PROC, FlutterEngineProcTable::RemoveView, and FlutterRemoveViewInfo::view_id.

◆ TEST() [8/8]

TEST ( FlViewTest  ,
ViewDestroyError   
)

Definition at line 210 of file fl_view_test.cc.

210 {
212
213 g_autoptr(FlDartProject) project = fl_dart_project_new();
214 FlView* implicit_view = fl_view_new(project);
215
216 FlEngine* engine = fl_view_get_engine(implicit_view);
217
219 RemoveView, ([](auto engine, const FlutterRemoveViewInfo* info) {
220 return kInvalidArguments;
221 }));
222
223 g_autoptr(GError) error = nullptr;
224 EXPECT_TRUE(fl_engine_start(engine, &error));
225
226 FlView* secondary_view = fl_view_new_for_engine(engine);
227
228 fl_gtk_widget_destroy(GTK_WIDGET(secondary_view));
229 fl_gtk_widget_destroy(GTK_WIDGET(implicit_view));
230}

References engine, error, fl_dart_project_new(), fl_engine_get_embedder_api(), fl_engine_start(), flutter::testing::fl_ensure_gtk_init(), fl_gtk_widget_destroy(), fl_view_get_engine(), fl_view_new(), fl_view_new_for_engine(), g_autoptr(), kInvalidArguments, MOCK_ENGINE_PROC, and FlutterEngineProcTable::RemoveView.