Flutter Linux Embedder
fl_accessible_node_test.cc File Reference
#include "flutter/shell/platform/linux/testing/linux_test.h"
#include "gtest/gtest.h"
#include "flutter/shell/platform/linux/fl_accessible_node.h"
#include "flutter/shell/platform/linux/testing/mock_gtk.h"

Go to the source code of this file.

Classes

class  FlAccessibleNodeTest
 

Functions

 TEST_F (FlAccessibleNodeTest, BuildTree)
 
 TEST_F (FlAccessibleNodeTest, SetName)
 
 TEST_F (FlAccessibleNodeTest, SetExtents)
 
 TEST_F (FlAccessibleNodeTest, FocusedFlags)
 
 TEST_F (FlAccessibleNodeTest, CheckedAndToggledFlags)
 
 TEST_F (FlAccessibleNodeTest, SelectedFlags)
 
 TEST_F (FlAccessibleNodeTest, EnabledFlags)
 
 TEST_F (FlAccessibleNodeTest, ObscuredFlags)
 
 TEST_F (FlAccessibleNodeTest, HiddenFlags)
 
 TEST_F (FlAccessibleNodeTest, ReadOnlyFlags)
 
 TEST_F (FlAccessibleNodeTest, TextFieldFlags)
 
 TEST_F (FlAccessibleNodeTest, GetRole)
 
 TEST_F (FlAccessibleNodeTest, SetActions)
 
 TEST_F (FlAccessibleNodeTest, SurvivesEngineDestruction)
 
 TEST_F (FlAccessibleNodeTest, SurvivesParentDestruction)
 

Function Documentation

◆ TEST_F() [1/15]

TEST_F ( FlAccessibleNodeTest  ,
BuildTree   
)

Definition at line 18 of file fl_accessible_node_test.cc.

18  {
19  int64_t view_id = 123;
20  g_autoptr(FlAccessibleNode) root = fl_accessible_node_new(engine, view_id, 0);
21  g_autoptr(FlAccessibleNode) child1 =
22  fl_accessible_node_new(engine, view_id, 1);
23  fl_accessible_node_set_parent(child1, ATK_OBJECT(root), 0);
24  g_autoptr(FlAccessibleNode) child2 =
25  fl_accessible_node_new(engine, view_id, 1);
26  fl_accessible_node_set_parent(child2, ATK_OBJECT(root), 1);
27  g_autoptr(GPtrArray) children =
28  g_ptr_array_new_with_free_func(g_object_unref);
29  g_ptr_array_add(children, g_object_ref(child1));
30  g_ptr_array_add(children, g_object_ref(child2));
31  fl_accessible_node_set_children(root, children);
32 
33  EXPECT_EQ(atk_object_get_n_accessible_children(ATK_OBJECT(root)), 2);
34  EXPECT_EQ(atk_object_get_index_in_parent(ATK_OBJECT(root)), 0);
35  g_autoptr(AtkObject) c1 =
36  atk_object_ref_accessible_child(ATK_OBJECT(root), 0);
37  EXPECT_EQ(ATK_OBJECT(child1), c1);
38  g_autoptr(AtkObject) c2 =
39  atk_object_ref_accessible_child(ATK_OBJECT(root), 1);
40  EXPECT_EQ(ATK_OBJECT(child2), c2);
41  EXPECT_EQ(atk_object_get_parent(ATK_OBJECT(root)), nullptr);
42 
43  EXPECT_EQ(atk_object_get_parent(ATK_OBJECT(child1)), ATK_OBJECT(root));
44  EXPECT_EQ(atk_object_get_index_in_parent(ATK_OBJECT(child1)), 0);
45  EXPECT_EQ(atk_object_get_n_accessible_children(ATK_OBJECT(child1)), 0);
46 
47  EXPECT_EQ(atk_object_get_parent(ATK_OBJECT(child2)), ATK_OBJECT(root));
48  EXPECT_EQ(atk_object_get_index_in_parent(ATK_OBJECT(child2)), 1);
49  EXPECT_EQ(atk_object_get_n_accessible_children(ATK_OBJECT(child2)), 0);
50 }
g_autoptr(FlEngine) engine
void fl_accessible_node_set_children(FlAccessibleNode *self, GPtrArray *children)
void fl_accessible_node_set_parent(FlAccessibleNode *self, AtkObject *parent, gint index)
FlAccessibleNode * fl_accessible_node_new(FlEngine *engine, FlutterViewId view_id, int32_t node_id)
G_BEGIN_DECLS FlutterViewId view_id

References fl_accessible_node_new(), fl_accessible_node_set_children(), fl_accessible_node_set_parent(), g_autoptr(), and view_id.

◆ TEST_F() [2/15]

TEST_F ( FlAccessibleNodeTest  ,
CheckedAndToggledFlags   
)

Definition at line 106 of file fl_accessible_node_test.cc.

106  {
107  g_autoptr(FlAccessibleNode) node = fl_accessible_node_new(engine, 123, 0);
108 
109  FlutterSemanticsFlags flags1 = {};
110  flags1.is_checked = kFlutterCheckStateNone;
111  flags1.is_toggled = kFlutterTristateNone;
112  fl_accessible_node_set_flags(node, &flags1);
113  AtkStateSet* state1 = atk_object_ref_state_set(ATK_OBJECT(node));
114  EXPECT_FALSE(atk_state_set_contains_state(state1, ATK_STATE_CHECKABLE));
115  EXPECT_FALSE(atk_state_set_contains_state(state1, ATK_STATE_CHECKED));
116  g_object_unref(state1);
117 
118  FlutterSemanticsFlags flags2 = {};
119  flags2.is_checked = kFlutterCheckStateFalse;
120  flags2.is_toggled = kFlutterTristateFalse;
121  EXPECT_CALL(mock_gtk, atk_object_notify_state_change(
122  ::testing::_, ATK_STATE_CHECKABLE, TRUE));
123  fl_accessible_node_set_flags(node, &flags2);
124  AtkStateSet* state2 = atk_object_ref_state_set(ATK_OBJECT(node));
125  EXPECT_TRUE(atk_state_set_contains_state(state2, ATK_STATE_CHECKABLE));
126  EXPECT_FALSE(atk_state_set_contains_state(state2, ATK_STATE_CHECKED));
127  g_object_unref(state2);
128 
129  FlutterSemanticsFlags flags3 = {};
130  flags3.is_checked = kFlutterCheckStateTrue;
131  flags3.is_toggled = kFlutterTristateTrue;
132  EXPECT_CALL(mock_gtk, atk_object_notify_state_change(
133  ::testing::_, ATK_STATE_CHECKED, TRUE));
134  fl_accessible_node_set_flags(node, &flags3);
135  AtkStateSet* state3 = atk_object_ref_state_set(ATK_OBJECT(node));
136  EXPECT_TRUE(atk_state_set_contains_state(state3, ATK_STATE_CHECKABLE));
137  EXPECT_TRUE(atk_state_set_contains_state(state3, ATK_STATE_CHECKED));
138  g_object_unref(state3);
139 
140  FlutterSemanticsFlags flags4 = {};
141  flags4.is_checked = kFlutterCheckStateTrue;
142  flags4.is_toggled = kFlutterTristateNone;
143  fl_accessible_node_set_flags(node, &flags4);
144  AtkStateSet* state4 = atk_object_ref_state_set(ATK_OBJECT(node));
145  EXPECT_TRUE(atk_state_set_contains_state(state4, ATK_STATE_CHECKABLE));
146  EXPECT_TRUE(atk_state_set_contains_state(state4, ATK_STATE_CHECKED));
147  g_object_unref(state4);
148 
149  FlutterSemanticsFlags flags5 = {};
150  flags5.is_checked = kFlutterCheckStateNone;
151  flags5.is_toggled = kFlutterTristateTrue;
152  fl_accessible_node_set_flags(node, &flags5);
153  AtkStateSet* state5 = atk_object_ref_state_set(ATK_OBJECT(node));
154  EXPECT_TRUE(atk_state_set_contains_state(state5, ATK_STATE_CHECKABLE));
155  EXPECT_TRUE(atk_state_set_contains_state(state5, ATK_STATE_CHECKED));
156  g_object_unref(state5);
157 }
void fl_accessible_node_set_flags(FlAccessibleNode *self, FlutterSemanticsFlags *flags)
return TRUE

References fl_accessible_node_new(), fl_accessible_node_set_flags(), g_autoptr(), and TRUE.

◆ TEST_F() [3/15]

TEST_F ( FlAccessibleNodeTest  ,
EnabledFlags   
)

Definition at line 188 of file fl_accessible_node_test.cc.

188  {
189  g_autoptr(FlAccessibleNode) node = fl_accessible_node_new(engine, 123, 0);
190 
191  FlutterSemanticsFlags flags1 = {};
192  flags1.is_enabled = kFlutterTristateNone;
193  fl_accessible_node_set_flags(node, &flags1);
194  AtkStateSet* state1 = atk_object_ref_state_set(ATK_OBJECT(node));
195  EXPECT_FALSE(atk_state_set_contains_state(state1, ATK_STATE_SENSITIVE));
196  EXPECT_FALSE(atk_state_set_contains_state(state1, ATK_STATE_ENABLED));
197  g_object_unref(state1);
198 
199  FlutterSemanticsFlags flags2 = {};
200  flags2.is_enabled = kFlutterTristateFalse;
201  EXPECT_CALL(mock_gtk, atk_object_notify_state_change(
202  ::testing::_, ATK_STATE_SENSITIVE, TRUE));
203  fl_accessible_node_set_flags(node, &flags2);
204  AtkStateSet* state2 = atk_object_ref_state_set(ATK_OBJECT(node));
205  EXPECT_TRUE(atk_state_set_contains_state(state2, ATK_STATE_SENSITIVE));
206  EXPECT_FALSE(atk_state_set_contains_state(state2, ATK_STATE_ENABLED));
207  g_object_unref(state2);
208 
209  FlutterSemanticsFlags flags3 = {};
210  flags3.is_enabled = kFlutterTristateTrue;
211  EXPECT_CALL(mock_gtk, atk_object_notify_state_change(
212  ::testing::_, ATK_STATE_ENABLED, TRUE));
213  fl_accessible_node_set_flags(node, &flags3);
214  AtkStateSet* state3 = atk_object_ref_state_set(ATK_OBJECT(node));
215  EXPECT_TRUE(atk_state_set_contains_state(state3, ATK_STATE_SENSITIVE));
216  EXPECT_TRUE(atk_state_set_contains_state(state3, ATK_STATE_ENABLED));
217  g_object_unref(state3);
218 }

References fl_accessible_node_new(), fl_accessible_node_set_flags(), g_autoptr(), and TRUE.

◆ TEST_F() [4/15]

TEST_F ( FlAccessibleNodeTest  ,
FocusedFlags   
)

Definition at line 73 of file fl_accessible_node_test.cc.

73  {
74  g_autoptr(FlAccessibleNode) node = fl_accessible_node_new(engine, 123, 0);
75 
76  FlutterSemanticsFlags flags1 = {};
77  flags1.is_focused = kFlutterTristateNone;
78  fl_accessible_node_set_flags(node, &flags1);
79  AtkStateSet* state1 = atk_object_ref_state_set(ATK_OBJECT(node));
80  EXPECT_FALSE(atk_state_set_contains_state(state1, ATK_STATE_FOCUSABLE));
81  EXPECT_FALSE(atk_state_set_contains_state(state1, ATK_STATE_FOCUSED));
82  g_object_unref(state1);
83 
84  FlutterSemanticsFlags flags2 = {};
85  flags2.is_focused = kFlutterTristateFalse;
86  EXPECT_CALL(mock_gtk, atk_object_notify_state_change(
87  ::testing::_, ATK_STATE_FOCUSABLE, TRUE));
88  fl_accessible_node_set_flags(node, &flags2);
89  AtkStateSet* state2 = atk_object_ref_state_set(ATK_OBJECT(node));
90  EXPECT_TRUE(atk_state_set_contains_state(state2, ATK_STATE_FOCUSABLE));
91  EXPECT_FALSE(atk_state_set_contains_state(state2, ATK_STATE_FOCUSED));
92  g_object_unref(state2);
93 
94  FlutterSemanticsFlags flags3 = {};
95  flags3.is_focused = kFlutterTristateTrue;
96  EXPECT_CALL(mock_gtk, atk_object_notify_state_change(
97  ::testing::_, ATK_STATE_FOCUSED, TRUE));
98  fl_accessible_node_set_flags(node, &flags3);
99  AtkStateSet* state3 = atk_object_ref_state_set(ATK_OBJECT(node));
100  EXPECT_TRUE(atk_state_set_contains_state(state3, ATK_STATE_FOCUSABLE));
101  EXPECT_TRUE(atk_state_set_contains_state(state3, ATK_STATE_FOCUSED));
102  g_object_unref(state3);
103 }

References fl_accessible_node_new(), fl_accessible_node_set_flags(), g_autoptr(), and TRUE.

◆ TEST_F() [5/15]

TEST_F ( FlAccessibleNodeTest  ,
GetRole   
)

Definition at line 305 of file fl_accessible_node_test.cc.

305  {
306  g_autoptr(FlAccessibleNode) node = fl_accessible_node_new(engine, 123, 0);
307 
308  FlutterSemanticsFlags flags1 = {};
309  flags1.is_button = true;
310  fl_accessible_node_set_flags(node, &flags1);
311  EXPECT_EQ(atk_object_get_role(ATK_OBJECT(node)), ATK_ROLE_PUSH_BUTTON);
312 
313  FlutterSemanticsFlags flags2 = {};
314  flags2.is_checked = kFlutterCheckStateFalse;
315  fl_accessible_node_set_flags(node, &flags2);
316  EXPECT_EQ(atk_object_get_role(ATK_OBJECT(node)), ATK_ROLE_CHECK_BOX);
317 
318  FlutterSemanticsFlags flags3 = {};
319  flags3.is_checked = kFlutterCheckStateFalse;
320  flags3.is_in_mutually_exclusive_group = true;
321  fl_accessible_node_set_flags(node, &flags3);
322  EXPECT_EQ(atk_object_get_role(ATK_OBJECT(node)), ATK_ROLE_RADIO_BUTTON);
323 
324  FlutterSemanticsFlags flags4 = {};
325  flags4.is_toggled = kFlutterTristateFalse;
326  fl_accessible_node_set_flags(node, &flags4);
327  EXPECT_EQ(atk_object_get_role(ATK_OBJECT(node)), ATK_ROLE_TOGGLE_BUTTON);
328 
329  FlutterSemanticsFlags flags5 = {};
330  flags5.is_text_field = true;
331  fl_accessible_node_set_flags(node, &flags5);
332  EXPECT_EQ(atk_object_get_role(ATK_OBJECT(node)), ATK_ROLE_TEXT);
333 
334  FlutterSemanticsFlags flags6 = {};
335  flags6.is_text_field = true;
336  flags6.is_obscured = true;
337  fl_accessible_node_set_flags(node, &flags6);
338  EXPECT_EQ(atk_object_get_role(ATK_OBJECT(node)), ATK_ROLE_PASSWORD_TEXT);
339 }

References fl_accessible_node_new(), fl_accessible_node_set_flags(), and g_autoptr().

◆ TEST_F() [6/15]

TEST_F ( FlAccessibleNodeTest  ,
HiddenFlags   
)

Definition at line 242 of file fl_accessible_node_test.cc.

242  {
243  g_autoptr(FlAccessibleNode) node = fl_accessible_node_new(engine, 123, 0);
244 
245  FlutterSemanticsFlags flags1 = {};
246  flags1.is_hidden = true;
247  fl_accessible_node_set_flags(node, &flags1);
248  AtkStateSet* state1 = atk_object_ref_state_set(ATK_OBJECT(node));
249  EXPECT_FALSE(atk_state_set_contains_state(state1, ATK_STATE_VISIBLE));
250  g_object_unref(state1);
251 
252  FlutterSemanticsFlags flags2 = {};
253  flags2.is_hidden = false;
254  EXPECT_CALL(mock_gtk, atk_object_notify_state_change(
255  ::testing::_, ATK_STATE_VISIBLE, TRUE));
256  fl_accessible_node_set_flags(node, &flags2);
257  AtkStateSet* state2 = atk_object_ref_state_set(ATK_OBJECT(node));
258  EXPECT_TRUE(atk_state_set_contains_state(state2, ATK_STATE_VISIBLE));
259  g_object_unref(state2);
260 }

References fl_accessible_node_new(), fl_accessible_node_set_flags(), g_autoptr(), and TRUE.

◆ TEST_F() [7/15]

TEST_F ( FlAccessibleNodeTest  ,
ObscuredFlags   
)

Definition at line 221 of file fl_accessible_node_test.cc.

221  {
222  g_autoptr(FlAccessibleNode) node = fl_accessible_node_new(engine, 123, 0);
223 
224  FlutterSemanticsFlags flags1 = {};
225  flags1.is_obscured = true;
226  fl_accessible_node_set_flags(node, &flags1);
227  AtkStateSet* state1 = atk_object_ref_state_set(ATK_OBJECT(node));
228  EXPECT_FALSE(atk_state_set_contains_state(state1, ATK_STATE_SHOWING));
229  g_object_unref(state1);
230 
231  FlutterSemanticsFlags flags2 = {};
232  flags2.is_obscured = false;
233  EXPECT_CALL(mock_gtk, atk_object_notify_state_change(
234  ::testing::_, ATK_STATE_SHOWING, TRUE));
235  fl_accessible_node_set_flags(node, &flags2);
236  AtkStateSet* state2 = atk_object_ref_state_set(ATK_OBJECT(node));
237  EXPECT_TRUE(atk_state_set_contains_state(state2, ATK_STATE_SHOWING));
238  g_object_unref(state2);
239 }

References fl_accessible_node_new(), fl_accessible_node_set_flags(), g_autoptr(), and TRUE.

◆ TEST_F() [8/15]

TEST_F ( FlAccessibleNodeTest  ,
ReadOnlyFlags   
)

Definition at line 263 of file fl_accessible_node_test.cc.

263  {
264  g_autoptr(FlAccessibleNode) node = fl_accessible_node_new(engine, 123, 0);
265 
266  FlutterSemanticsFlags flags1 = {};
267  flags1.is_read_only = false;
268  fl_accessible_node_set_flags(node, &flags1);
269  AtkStateSet* state1 = atk_object_ref_state_set(ATK_OBJECT(node));
270  EXPECT_FALSE(atk_state_set_contains_state(state1, ATK_STATE_READ_ONLY));
271  g_object_unref(state1);
272 
273  FlutterSemanticsFlags flags2 = {};
274  flags2.is_read_only = true;
275  EXPECT_CALL(mock_gtk, atk_object_notify_state_change(
276  ::testing::_, ATK_STATE_READ_ONLY, TRUE));
277  fl_accessible_node_set_flags(node, &flags2);
278  AtkStateSet* state2 = atk_object_ref_state_set(ATK_OBJECT(node));
279  EXPECT_TRUE(atk_state_set_contains_state(state2, ATK_STATE_READ_ONLY));
280  g_object_unref(state2);
281 }

References fl_accessible_node_new(), fl_accessible_node_set_flags(), g_autoptr(), and TRUE.

◆ TEST_F() [9/15]

TEST_F ( FlAccessibleNodeTest  ,
SelectedFlags   
)

Definition at line 160 of file fl_accessible_node_test.cc.

160  {
161  g_autoptr(FlAccessibleNode) node = fl_accessible_node_new(engine, 123, 0);
162 
163  FlutterSemanticsFlags flags1 = {};
164  flags1.is_selected = kFlutterTristateNone;
165  fl_accessible_node_set_flags(node, &flags1);
166  AtkStateSet* state1 = atk_object_ref_state_set(ATK_OBJECT(node));
167  EXPECT_FALSE(atk_state_set_contains_state(state1, ATK_STATE_SELECTED));
168  g_object_unref(state1);
169 
170  FlutterSemanticsFlags flags2 = {};
171  flags2.is_selected = kFlutterTristateFalse;
172  fl_accessible_node_set_flags(node, &flags2);
173  AtkStateSet* state2 = atk_object_ref_state_set(ATK_OBJECT(node));
174  EXPECT_FALSE(atk_state_set_contains_state(state2, ATK_STATE_SELECTED));
175  g_object_unref(state2);
176 
177  FlutterSemanticsFlags flags3 = {};
178  flags3.is_selected = kFlutterTristateTrue;
179  EXPECT_CALL(mock_gtk, atk_object_notify_state_change(
180  ::testing::_, ATK_STATE_SELECTED, TRUE));
181  fl_accessible_node_set_flags(node, &flags3);
182  AtkStateSet* state3 = atk_object_ref_state_set(ATK_OBJECT(node));
183  EXPECT_TRUE(atk_state_set_contains_state(state3, ATK_STATE_SELECTED));
184  g_object_unref(state3);
185 }

References fl_accessible_node_new(), fl_accessible_node_set_flags(), g_autoptr(), and TRUE.

◆ TEST_F() [10/15]

TEST_F ( FlAccessibleNodeTest  ,
SetActions   
)

Definition at line 342 of file fl_accessible_node_test.cc.

342  {
343  g_autoptr(FlAccessibleNode) node = fl_accessible_node_new(engine, 123, 0);
345  node, static_cast<FlutterSemanticsAction>(
346  kFlutterSemanticsActionTap | kFlutterSemanticsActionLongPress));
347 
348  EXPECT_EQ(atk_action_get_n_actions(ATK_ACTION(node)), 2);
349  EXPECT_STREQ(atk_action_get_name(ATK_ACTION(node), 0), "Tap");
350  EXPECT_STREQ(atk_action_get_name(ATK_ACTION(node), 1), "LongPress");
351 }
void fl_accessible_node_set_actions(FlAccessibleNode *self, FlutterSemanticsAction actions)

References fl_accessible_node_new(), fl_accessible_node_set_actions(), and g_autoptr().

◆ TEST_F() [11/15]

TEST_F ( FlAccessibleNodeTest  ,
SetExtents   
)

Definition at line 60 of file fl_accessible_node_test.cc.

60  {
61  g_autoptr(FlAccessibleNode) node = fl_accessible_node_new(engine, 123, 0);
62  fl_accessible_node_set_extents(node, 1, 2, 3, 4);
63  gint x, y, width, height;
64  atk_component_get_extents(ATK_COMPONENT(node), &x, &y, &width, &height,
65  ATK_XY_PARENT);
66  EXPECT_EQ(x, 1);
67  EXPECT_EQ(y, 2);
68  EXPECT_EQ(width, 3);
69  EXPECT_EQ(height, 4);
70 }
void fl_accessible_node_set_extents(FlAccessibleNode *self, gint x, gint y, gint width, gint height)
FlFramebuffer double double int int height
FlFramebuffer double x
FlFramebuffer double double int width
FlFramebuffer double double y

References fl_accessible_node_new(), fl_accessible_node_set_extents(), g_autoptr(), height, width, x, and y.

◆ TEST_F() [12/15]

TEST_F ( FlAccessibleNodeTest  ,
SetName   
)

Definition at line 53 of file fl_accessible_node_test.cc.

53  {
54  g_autoptr(FlAccessibleNode) node = fl_accessible_node_new(engine, 123, 0);
55  fl_accessible_node_set_name(node, "test");
56  EXPECT_STREQ(atk_object_get_name(ATK_OBJECT(node)), "test");
57 }
void fl_accessible_node_set_name(FlAccessibleNode *self, const gchar *name)

References fl_accessible_node_new(), fl_accessible_node_set_name(), and g_autoptr().

◆ TEST_F() [13/15]

TEST_F ( FlAccessibleNodeTest  ,
SurvivesEngineDestruction   
)

Definition at line 356 of file fl_accessible_node_test.cc.

356  {
357  g_autoptr(FlDartProject) project = fl_dart_project_new();
358  FlEngine* local_engine = fl_engine_new(project);
359  g_autoptr(FlAccessibleNode) node =
360  fl_accessible_node_new(local_engine, 123, 0);
361  fl_accessible_node_set_actions(node, kFlutterSemanticsActionTap);
362 
363  // Destroy the engine while the node is still alive.
364  g_object_unref(local_engine);
365 
366  // Performing an action no longer reaches the engine, but does not crash.
367  EXPECT_FALSE(atk_action_do_action(ATK_ACTION(node), 0));
368 }
G_MODULE_EXPORT FlDartProject * fl_dart_project_new()
G_MODULE_EXPORT FlEngine * fl_engine_new(FlDartProject *project)
Definition: fl_engine.cc:730

References fl_accessible_node_new(), fl_accessible_node_set_actions(), fl_dart_project_new(), fl_engine_new(), and g_autoptr().

◆ TEST_F() [14/15]

TEST_F ( FlAccessibleNodeTest  ,
SurvivesParentDestruction   
)

Definition at line 372 of file fl_accessible_node_test.cc.

372  {
373  FlAccessibleNode* root = fl_accessible_node_new(engine, 123, 0);
374  g_autoptr(FlAccessibleNode) child = fl_accessible_node_new(engine, 123, 1);
375  fl_accessible_node_set_parent(child, ATK_OBJECT(root), 0);
376 
377  // Destroy the parent while the child is still alive.
378  g_object_unref(root);
379 
380  // The child no longer reports a parent, but does not crash.
381  EXPECT_EQ(atk_object_get_parent(ATK_OBJECT(child)), nullptr);
382  gint x = 0, y = 0, width = 0, height = 0;
383  atk_component_get_extents(ATK_COMPONENT(child), &x, &y, &width, &height,
384  ATK_XY_SCREEN);
385 }

References fl_accessible_node_new(), fl_accessible_node_set_parent(), g_autoptr(), height, width, x, and y.

◆ TEST_F() [15/15]

TEST_F ( FlAccessibleNodeTest  ,
TextFieldFlags   
)

Definition at line 284 of file fl_accessible_node_test.cc.

284  {
285  g_autoptr(FlAccessibleNode) node = fl_accessible_node_new(engine, 123, 0);
286 
287  FlutterSemanticsFlags flags1 = {};
288  flags1.is_text_field = false;
289  fl_accessible_node_set_flags(node, &flags1);
290  AtkStateSet* state1 = atk_object_ref_state_set(ATK_OBJECT(node));
291  EXPECT_FALSE(atk_state_set_contains_state(state1, ATK_STATE_EDITABLE));
292  g_object_unref(state1);
293 
294  FlutterSemanticsFlags flags2 = {};
295  flags2.is_text_field = true;
296  EXPECT_CALL(mock_gtk, atk_object_notify_state_change(
297  ::testing::_, ATK_STATE_EDITABLE, TRUE));
298  fl_accessible_node_set_flags(node, &flags2);
299  AtkStateSet* state2 = atk_object_ref_state_set(ATK_OBJECT(node));
300  EXPECT_TRUE(atk_state_set_contains_state(state2, ATK_STATE_EDITABLE));
301  g_object_unref(state2);
302 }

References fl_accessible_node_new(), fl_accessible_node_set_flags(), g_autoptr(), and TRUE.