Flutter Linux Embedder
fl_accessibility_handler_test.cc File Reference
#include <atk/atk.h>
#include "flutter/shell/platform/linux/fl_accessibility_handler.h"
#include "flutter/shell/platform/linux/fl_binary_messenger_private.h"
#include "flutter/shell/platform/linux/fl_engine_private.h"
#include "flutter/shell/platform/linux/fl_view_private.h"
#include "flutter/shell/platform/linux/testing/fl_mock_binary_messenger.h"
#include "flutter/shell/platform/linux/testing/fl_test_gtk_logs.h"
#include "flutter/testing/testing.h"
#include "flutter/shell/platform/linux/testing/linux_test.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"

Go to the source code of this file.

Classes

class  FlAccessibilityHandlerTest
 

Enumerations

enum  FlAtkLive {
  FL_ATK_LIVE_NONE ,
  FL_ATK_LIVE_POLITE ,
  FL_ATK_LIVE_ASSERTIVE ,
  FL_ATK_LIVE_NONE ,
  FL_ATK_LIVE_POLITE ,
  FL_ATK_LIVE_ASSERTIVE
}
 

Functions

static void announcement_cb (FlViewAccessible *accessible, const gchar *message, gpointer user_data)
 
static void notification_polite_cb (FlViewAccessible *accessible, const gchar *message, FlAtkLive politeness, gpointer user_data)
 
static void notification_assertive_cb (FlViewAccessible *accessible, const gchar *message, FlAtkLive politeness, gpointer user_data)
 
static gboolean atk_supports_announce ()
 
static void subscribe_signal (FlViewAccessible *accessible, gboolean *signalled, gboolean assertive)
 
 TEST_F (FlAccessibilityHandlerTest, Announce)
 
 TEST_F (FlAccessibilityHandlerTest, AnnounceAssertive)
 
 TEST_F (FlAccessibilityHandlerTest, AnnounceUnknownView)
 
 TEST_F (FlAccessibilityHandlerTest, UnknownType)
 

Variables

static constexpr int64_t kTextDirectionLtr = 0
 
static constexpr int64_t kAssertivenessAssertive = 1
 

Enumeration Type Documentation

◆ FlAtkLive

enum FlAtkLive
Enumerator
FL_ATK_LIVE_NONE 
FL_ATK_LIVE_POLITE 
FL_ATK_LIVE_ASSERTIVE 
FL_ATK_LIVE_NONE 
FL_ATK_LIVE_POLITE 
FL_ATK_LIVE_ASSERTIVE 

Definition at line 28 of file fl_accessibility_handler_test.cc.

Function Documentation

◆ announcement_cb()

static void announcement_cb ( FlViewAccessible *  accessible,
const gchar *  message,
gpointer  user_data 
)
static

Definition at line 34 of file fl_accessibility_handler_test.cc.

36  {
37  EXPECT_STREQ(message, "MESSAGE");
38  gboolean* signalled = static_cast<gboolean*>(user_data);
39  *signalled = TRUE;
40 }
const char * message
const char FlTextDirection FlAssertiveness gpointer user_data
return TRUE

References message, TRUE, and user_data.

Referenced by subscribe_signal().

◆ atk_supports_announce()

static gboolean atk_supports_announce ( )
static

Definition at line 62 of file fl_accessibility_handler_test.cc.

62  {
63  return atk_get_major_version() == 2 && atk_get_minor_version() >= 46;
64 }

Referenced by subscribe_signal(), and TEST_F().

◆ notification_assertive_cb()

static void notification_assertive_cb ( FlViewAccessible *  accessible,
const gchar *  message,
FlAtkLive  politeness,
gpointer  user_data 
)
static

Definition at line 52 of file fl_accessibility_handler_test.cc.

55  {
56  EXPECT_STREQ(message, "MESSAGE");
57  EXPECT_EQ(politeness, FL_ATK_LIVE_ASSERTIVE);
58  gboolean* signalled = static_cast<gboolean*>(user_data);
59  *signalled = TRUE;
60 }

References FL_ATK_LIVE_ASSERTIVE, message, TRUE, and user_data.

Referenced by subscribe_signal().

◆ notification_polite_cb()

static void notification_polite_cb ( FlViewAccessible *  accessible,
const gchar *  message,
FlAtkLive  politeness,
gpointer  user_data 
)
static

Definition at line 42 of file fl_accessibility_handler_test.cc.

45  {
46  EXPECT_STREQ(message, "MESSAGE");
47  EXPECT_EQ(politeness, FL_ATK_LIVE_POLITE);
48  gboolean* signalled = static_cast<gboolean*>(user_data);
49  *signalled = TRUE;
50 }

References FL_ATK_LIVE_POLITE, message, TRUE, and user_data.

Referenced by subscribe_signal().

◆ subscribe_signal()

static void subscribe_signal ( FlViewAccessible *  accessible,
gboolean *  signalled,
gboolean  assertive 
)
static

Definition at line 66 of file fl_accessibility_handler_test.cc.

68  {
69  if (!atk_supports_announce()) {
70  return;
71  }
72 
73  if (atk_get_major_version() == 2 && atk_get_minor_version() < 50) {
74  g_signal_connect(accessible, "announcement", G_CALLBACK(announcement_cb),
75  signalled);
76  } else {
77  g_signal_connect(accessible, "notification",
78  G_CALLBACK(assertive ? notification_assertive_cb
80  signalled);
81  }
82 }
FlViewAccessible * accessible
static void announcement_cb(FlViewAccessible *accessible, const gchar *message, gpointer user_data)
static void notification_polite_cb(FlViewAccessible *accessible, const gchar *message, FlAtkLive politeness, gpointer user_data)
static void notification_assertive_cb(FlViewAccessible *accessible, const gchar *message, FlAtkLive politeness, gpointer user_data)
static gboolean atk_supports_announce()

References accessible, announcement_cb(), atk_supports_announce(), notification_assertive_cb(), and notification_polite_cb().

Referenced by TEST_F().

◆ TEST_F() [1/4]

TEST_F ( FlAccessibilityHandlerTest  ,
Announce   
)

Definition at line 104 of file fl_accessibility_handler_test.cc.

104  {
105  gboolean signalled = FALSE;
106  subscribe_signal(fl_view_get_accessible(view), &signalled, FALSE);
107 
111  fl_value_set_string(message, "data", data);
112  fl_value_set_string_take(data, "viewId",
114  fl_value_set_string_take(data, "message", fl_value_new_string("MESSAGE"));
115  fl_value_set_string_take(data, "textDirection",
117 
118  gboolean called = FALSE;
119  fl_mock_binary_messenger_send_standard_message(
120  messenger, "flutter/accessibility", message,
121  [](FlMockBinaryMessenger* messenger, FlValue* response,
122  gpointer user_data) {
123  EXPECT_EQ(fl_value_get_type(response), FL_VALUE_TYPE_NULL);
124  gboolean* called = static_cast<gboolean*>(user_data);
125  *called = TRUE;
126  },
127  &called);
128  EXPECT_TRUE(called);
129  if (atk_supports_announce()) {
130  EXPECT_TRUE(signalled);
131  }
132 }
FlView * view
g_autoptr(FlEngine) engine
static void subscribe_signal(FlViewAccessible *accessible, gboolean *signalled, gboolean assertive)
static constexpr int64_t kTextDirectionLtr
G_MODULE_EXPORT void fl_value_set_string(FlValue *self, const gchar *key, FlValue *value)
Definition: fl_value.cc:639
G_MODULE_EXPORT void fl_value_set_string_take(FlValue *self, const gchar *key, FlValue *value)
Definition: fl_value.cc:650
G_MODULE_EXPORT FlValue * fl_value_new_string(const gchar *value)
Definition: fl_value.cc:276
G_MODULE_EXPORT FlValueType fl_value_get_type(FlValue *self)
Definition: fl_value.cc:466
G_MODULE_EXPORT FlValue * fl_value_new_int(int64_t value)
Definition: fl_value.cc:262
G_MODULE_EXPORT FlValue * fl_value_new_map()
Definition: fl_value.cc:366
typedefG_BEGIN_DECLS struct _FlValue FlValue
Definition: fl_value.h:42
@ FL_VALUE_TYPE_NULL
Definition: fl_value.h:64
FlViewAccessible * fl_view_get_accessible(FlView *self)
Definition: fl_view.cc:770
G_MODULE_EXPORT int64_t fl_view_get_id(FlView *self)
Definition: fl_view.cc:759

References atk_supports_announce(), fl_value_get_type(), fl_value_new_int(), fl_value_new_map(), fl_value_new_string(), fl_value_set_string(), fl_value_set_string_take(), FL_VALUE_TYPE_NULL, fl_view_get_accessible(), fl_view_get_id(), g_autoptr(), kTextDirectionLtr, message, subscribe_signal(), TRUE, user_data, and view.

◆ TEST_F() [2/4]

TEST_F ( FlAccessibilityHandlerTest  ,
AnnounceAssertive   
)

Definition at line 134 of file fl_accessibility_handler_test.cc.

134  {
135  gboolean signalled = FALSE;
137 
141  fl_value_set_string(message, "data", data);
142  fl_value_set_string_take(data, "viewId",
144  fl_value_set_string_take(data, "message", fl_value_new_string("MESSAGE"));
145  fl_value_set_string_take(data, "textDirection",
147  // Add optional assertiveness (not used in ATK)
148  fl_value_set_string_take(data, "assertiveness",
150 
151  gboolean called = FALSE;
152  fl_mock_binary_messenger_send_standard_message(
153  messenger, "flutter/accessibility", message,
154  [](FlMockBinaryMessenger* messenger, FlValue* response,
155  gpointer user_data) {
156  EXPECT_EQ(fl_value_get_type(response), FL_VALUE_TYPE_NULL);
157  gboolean* called = static_cast<gboolean*>(user_data);
158  *called = TRUE;
159  },
160  &called);
161  EXPECT_TRUE(called);
162  if (atk_supports_announce()) {
163  EXPECT_TRUE(signalled);
164  }
165 }
static constexpr int64_t kAssertivenessAssertive

References atk_supports_announce(), fl_value_get_type(), fl_value_new_int(), fl_value_new_map(), fl_value_new_string(), fl_value_set_string(), fl_value_set_string_take(), FL_VALUE_TYPE_NULL, fl_view_get_accessible(), fl_view_get_id(), g_autoptr(), kAssertivenessAssertive, kTextDirectionLtr, message, subscribe_signal(), TRUE, user_data, and view.

◆ TEST_F() [3/4]

TEST_F ( FlAccessibilityHandlerTest  ,
AnnounceUnknownView   
)

Definition at line 167 of file fl_accessibility_handler_test.cc.

167  {
168  gboolean signalled = FALSE;
169  subscribe_signal(fl_view_get_accessible(view), &signalled, FALSE);
170 
174  fl_value_set_string(message, "data", data);
175  fl_value_set_string_take(data, "viewId", fl_value_new_int(999));
176  fl_value_set_string_take(data, "message", fl_value_new_string("MESSAGE"));
177  fl_value_set_string_take(data, "textDirection",
179  // Add optional assertiveness (not used in ATK)
180  fl_value_set_string_take(data, "assertiveness",
182 
183  gboolean called = FALSE;
184  fl_mock_binary_messenger_send_standard_message(
185  messenger, "flutter/accessibility", message,
186  [](FlMockBinaryMessenger* messenger, FlValue* response,
187  gpointer user_data) {
188  EXPECT_EQ(fl_value_get_type(response), FL_VALUE_TYPE_NULL);
189  gboolean* called = static_cast<gboolean*>(user_data);
190  *called = TRUE;
191  },
192  &called);
193  EXPECT_TRUE(called);
194  EXPECT_FALSE(signalled);
195 }

References fl_value_get_type(), fl_value_new_int(), fl_value_new_map(), fl_value_new_string(), fl_value_set_string(), fl_value_set_string_take(), FL_VALUE_TYPE_NULL, fl_view_get_accessible(), g_autoptr(), kAssertivenessAssertive, kTextDirectionLtr, message, subscribe_signal(), TRUE, user_data, and view.

◆ TEST_F() [4/4]

TEST_F ( FlAccessibilityHandlerTest  ,
UnknownType   
)

Definition at line 197 of file fl_accessibility_handler_test.cc.

197  {
198  gboolean signalled = FALSE;
199  subscribe_signal(fl_view_get_accessible(view), &signalled, FALSE);
200 
201  // Unknown type, ignored by embedder.
205 
206  gboolean called = FALSE;
207  fl_mock_binary_messenger_send_standard_message(
208  messenger, "flutter/accessibility", message,
209  [](FlMockBinaryMessenger* messenger, FlValue* response,
210  gpointer user_data) {
211  EXPECT_EQ(fl_value_get_type(response), FL_VALUE_TYPE_NULL);
212  gboolean* called = static_cast<gboolean*>(user_data);
213  *called = TRUE;
214  },
215  &called);
216  EXPECT_TRUE(called);
217  EXPECT_FALSE(signalled);
218 }

References fl_value_get_type(), fl_value_new_map(), fl_value_new_string(), fl_value_set_string_take(), FL_VALUE_TYPE_NULL, fl_view_get_accessible(), g_autoptr(), message, subscribe_signal(), TRUE, user_data, and view.

Variable Documentation

◆ kAssertivenessAssertive

constexpr int64_t kAssertivenessAssertive = 1
staticconstexpr

Definition at line 24 of file fl_accessibility_handler_test.cc.

Referenced by TEST_F().

◆ kTextDirectionLtr

constexpr int64_t kTextDirectionLtr = 0
staticconstexpr

Definition at line 23 of file fl_accessibility_handler_test.cc.

Referenced by TEST_F().