Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Functions
fl_basic_message_channel_test.cc File Reference
#include "gtest/gtest.h"
#include "flutter/shell/platform/linux/public/flutter_linux/fl_basic_message_channel.h"
#include "flutter/shell/platform/embedder/embedder.h"
#include "flutter/shell/platform/embedder/test_utils/proc_table_replacement.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/public/flutter_linux/fl_message_codec.h"
#include "flutter/shell/platform/linux/public/flutter_linux/fl_standard_message_codec.h"
#include "flutter/shell/platform/linux/testing/fl_test.h"
#include "flutter/shell/platform/linux/testing/mock_renderer.h"

Go to the source code of this file.

Functions

 TEST (FlBasicMessageChannelTest, SendMessageWithoutResponse)
 
static void echo_response_cb (GObject *object, GAsyncResult *result, gpointer user_data)
 
 TEST (FlBasicMessageChannelTest, SendMessageWithResponse)
 
static void failure_response_cb (GObject *object, GAsyncResult *result, gpointer user_data)
 
 TEST (FlBasicMessageChannelTest, SendFailure)
 
static void message_cb (FlBasicMessageChannel *channel, FlValue *message, FlBasicMessageChannelResponseHandle *response_handle, gpointer user_data)
 
static void response_cb (FlBasicMessageChannel *channel, FlValue *message, FlBasicMessageChannelResponseHandle *response_handle, gpointer user_data)
 
 TEST (FlBasicMessageChannelTest, ReceiveMessage)
 
static void null_message_response_cb (GObject *object, GAsyncResult *result, gpointer user_data)
 
 TEST (FlBasicMessageChannelTest, SendNullMessageWithResponse)
 

Function Documentation

◆ echo_response_cb()

static void echo_response_cb ( GObject *  object,
GAsyncResult *  result,
gpointer  user_data 
)
static

Definition at line 67 of file fl_basic_message_channel_test.cc.

69 {
70 g_autoptr(GError) error = nullptr;
72 FL_BASIC_MESSAGE_CHANNEL(object), result, &error);
73 EXPECT_NE(message, nullptr);
74 EXPECT_EQ(error, nullptr);
75
77 EXPECT_STREQ(fl_value_get_string(message), "Hello World!");
78
79 g_main_loop_quit(static_cast<GMainLoop*>(user_data));
80}
G_MODULE_EXPORT FlValue * fl_basic_message_channel_send_finish(FlBasicMessageChannel *self, GAsyncResult *result, GError **error)
const uint8_t uint32_t uint32_t GError ** error
GAsyncResult * result
G_MODULE_EXPORT FlValueType fl_value_get_type(FlValue *self)
Definition fl_value.cc:466
G_MODULE_EXPORT const gchar * fl_value_get_string(FlValue *self)
Definition fl_value.cc:682
typedefG_BEGIN_DECLS struct _FlValue FlValue
Definition fl_value.h:42
@ FL_VALUE_TYPE_STRING
Definition fl_value.h:69
Win32Message message

◆ failure_response_cb()

static void failure_response_cb ( GObject *  object,
GAsyncResult *  result,
gpointer  user_data 
)
static

Definition at line 100 of file fl_basic_message_channel_test.cc.

102 {
103 g_autoptr(GError) error = nullptr;
105 FL_BASIC_MESSAGE_CHANNEL(object), result, &error);
106 EXPECT_EQ(message, nullptr);
107 EXPECT_NE(error, nullptr);
108
109 g_main_loop_quit(static_cast<GMainLoop*>(user_data));
110}

◆ message_cb()

static void message_cb ( FlBasicMessageChannel *  channel,
FlValue message,
FlBasicMessageChannelResponseHandle *  response_handle,
gpointer  user_data 
)
static

Definition at line 130 of file fl_basic_message_channel_test.cc.

133 {
134 EXPECT_NE(message, nullptr);
136 EXPECT_STREQ(fl_value_get_string(message), "Marco!");
137
138 g_autoptr(GError) error = nullptr;
139 g_autoptr(FlValue) response = fl_value_new_string("Polo!");
140 EXPECT_TRUE(fl_basic_message_channel_respond(channel, response_handle,
141 response, &error));
142 EXPECT_EQ(error, nullptr);
143}
G_MODULE_EXPORT gboolean fl_basic_message_channel_respond(FlBasicMessageChannel *self, FlBasicMessageChannelResponseHandle *response_handle, FlValue *message, GError **error)
G_MODULE_EXPORT FlValue * fl_value_new_string(const gchar *value)
Definition fl_value.cc:276
#define EXPECT_TRUE(handle)
Definition unit_test.h:685

◆ null_message_response_cb()

static void null_message_response_cb ( GObject *  object,
GAsyncResult *  result,
gpointer  user_data 
)
static

Definition at line 196 of file fl_basic_message_channel_test.cc.

198 {
199 g_autoptr(GError) error = nullptr;
201 FL_BASIC_MESSAGE_CHANNEL(object), result, &error);
202 EXPECT_NE(message, nullptr);
203 EXPECT_EQ(error, nullptr);
204
206
207 g_main_loop_quit(static_cast<GMainLoop*>(user_data));
208}
@ FL_VALUE_TYPE_NULL
Definition fl_value.h:65

◆ response_cb()

static void response_cb ( FlBasicMessageChannel *  channel,
FlValue message,
FlBasicMessageChannelResponseHandle *  response_handle,
gpointer  user_data 
)
static

Definition at line 147 of file fl_basic_message_channel_test.cc.

150 {
151 EXPECT_NE(message, nullptr);
153 EXPECT_STREQ(fl_value_get_string(message), "Polo!");
154
155 fl_basic_message_channel_respond(channel, response_handle, nullptr, nullptr);
156
157 g_main_loop_quit(static_cast<GMainLoop*>(user_data));
158}

◆ TEST() [1/5]

TEST ( FlBasicMessageChannelTest  ,
ReceiveMessage   
)

Definition at line 161 of file fl_basic_message_channel_test.cc.

161 {
162 g_autoptr(GMainLoop) loop = g_main_loop_new(nullptr, 0);
163
164 g_autoptr(FlEngine) engine = make_mock_engine();
165 FlBinaryMessenger* messenger = fl_binary_messenger_new(engine);
166
167 // Listen for messages from the engine.
168 g_autoptr(FlStandardMessageCodec) codec = fl_standard_message_codec_new();
169 g_autoptr(FlBasicMessageChannel) messages_channel =
170 fl_basic_message_channel_new(messenger, "test/messages",
171 FL_MESSAGE_CODEC(codec));
173 nullptr, nullptr);
174
175 // Listen for response from the engine.
176 g_autoptr(FlBasicMessageChannel) responses_channel =
177 fl_basic_message_channel_new(messenger, "test/responses",
178 FL_MESSAGE_CODEC(codec));
180 loop, nullptr);
181
182 // Triggger the engine to send a message.
183 g_autoptr(FlBasicMessageChannel) control_channel =
184 fl_basic_message_channel_new(messenger, "test/send-message",
185 FL_MESSAGE_CODEC(codec));
186 g_autoptr(FlValue) message = fl_value_new_string("Marco!");
187 fl_basic_message_channel_send(control_channel, message, nullptr, nullptr,
188 nullptr);
189
190 // Blocks here until response_cb is called.
191 g_main_loop_run(loop);
192}
FlutterEngine engine
Definition main.cc:68
G_MODULE_EXPORT FlBasicMessageChannel * fl_basic_message_channel_new(FlBinaryMessenger *messenger, const gchar *name, FlMessageCodec *codec)
G_MODULE_EXPORT void fl_basic_message_channel_set_message_handler(FlBasicMessageChannel *self, FlBasicMessageChannelMessageHandler handler, gpointer user_data, GDestroyNotify destroy_notify)
G_MODULE_EXPORT void fl_basic_message_channel_send(FlBasicMessageChannel *self, FlValue *message, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
static void message_cb(FlBasicMessageChannel *channel, FlValue *message, FlBasicMessageChannelResponseHandle *response_handle, gpointer user_data)
static void response_cb(FlBasicMessageChannel *channel, FlValue *message, FlBasicMessageChannelResponseHandle *response_handle, gpointer user_data)
FlBinaryMessenger * fl_binary_messenger_new(FlEngine *engine)
static FlEngine * make_mock_engine()
G_MODULE_EXPORT FlStandardMessageCodec * fl_standard_message_codec_new()

◆ TEST() [2/5]

TEST ( FlBasicMessageChannelTest  ,
SendFailure   
)

Definition at line 113 of file fl_basic_message_channel_test.cc.

113 {
114 g_autoptr(GMainLoop) loop = g_main_loop_new(nullptr, 0);
115
116 g_autoptr(FlEngine) engine = make_mock_engine();
117 FlBinaryMessenger* messenger = fl_binary_messenger_new(engine);
118 g_autoptr(FlStandardMessageCodec) codec = fl_standard_message_codec_new();
119 g_autoptr(FlBasicMessageChannel) channel = fl_basic_message_channel_new(
120 messenger, "test/failure", FL_MESSAGE_CODEC(codec));
121 g_autoptr(FlValue) message = fl_value_new_string("Hello World!");
123 loop);
124
125 // Blocks here until failure_response_cb is called.
126 g_main_loop_run(loop);
127}
static void failure_response_cb(GObject *object, GAsyncResult *result, gpointer user_data)

◆ TEST() [3/5]

TEST ( FlBasicMessageChannelTest  ,
SendMessageWithoutResponse   
)

Definition at line 22 of file fl_basic_message_channel_test.cc.

22 {
23 g_autoptr(GMainLoop) loop = g_main_loop_new(nullptr, 0);
24
25 g_autoptr(FlEngine) engine = make_mock_engine();
27
28 bool called = false;
30 embedder_api->SendPlatformMessage;
32 SendPlatformMessage,
33 ([&called, old_handler](auto engine,
35 if (strcmp(message->channel, "test") != 0) {
36 return old_handler(engine, message);
37 }
38
39 called = true;
40 EXPECT_EQ(message->response_handle, nullptr);
41
42 g_autoptr(GBytes) message_bytes =
43 g_bytes_new(message->message, message->message_size);
44 g_autoptr(FlStandardMessageCodec) codec =
47 FL_MESSAGE_CODEC(codec), message_bytes, nullptr);
48 EXPECT_EQ(fl_value_get_type(message_value), FL_VALUE_TYPE_STRING);
49 EXPECT_STREQ(fl_value_get_string(message_value), "Hello World!");
50
51 return kSuccess;
52 }));
53
54 FlBinaryMessenger* messenger = fl_binary_messenger_new(engine);
55 g_autoptr(FlStandardMessageCodec) codec = fl_standard_message_codec_new();
56 g_autoptr(FlBasicMessageChannel) channel =
57 fl_basic_message_channel_new(messenger, "test", FL_MESSAGE_CODEC(codec));
58 g_autoptr(FlValue) message = fl_value_new_string("Hello World!");
59 fl_basic_message_channel_send(channel, message, nullptr, nullptr, loop);
60
61 EXPECT_TRUE(called);
62}
FlutterEngineResult(* FlutterEngineSendPlatformMessageFnPtr)(FLUTTER_API_SYMBOL(FlutterEngine) engine, const FlutterPlatformMessage *message)
Definition embedder.h:3225
@ kSuccess
Definition embedder.h:73
FlutterEngineProcTable * fl_engine_get_embedder_api(FlEngine *self)
Definition fl_engine.cc:579
G_MODULE_EXPORT FlValue * fl_message_codec_decode_message(FlMessageCodec *self, GBytes *message, GError **error)
#define MOCK_ENGINE_PROC(proc, mock_impl)
Function-pointer-based versions of the APIs above.
Definition embedder.h:3317
FlutterEngineSendPlatformMessageFnPtr SendPlatformMessage
Definition embedder.h:3331

◆ TEST() [4/5]

TEST ( FlBasicMessageChannelTest  ,
SendMessageWithResponse   
)

Definition at line 83 of file fl_basic_message_channel_test.cc.

83 {
84 g_autoptr(GMainLoop) loop = g_main_loop_new(nullptr, 0);
85
86 g_autoptr(FlEngine) engine = make_mock_engine();
87 FlBinaryMessenger* messenger = fl_binary_messenger_new(engine);
88 g_autoptr(FlStandardMessageCodec) codec = fl_standard_message_codec_new();
89 g_autoptr(FlBasicMessageChannel) channel = fl_basic_message_channel_new(
90 messenger, "test/echo", FL_MESSAGE_CODEC(codec));
91 g_autoptr(FlValue) message = fl_value_new_string("Hello World!");
93 loop);
94
95 // Blocks here until echo_response_cb is called.
96 g_main_loop_run(loop);
97}
static void echo_response_cb(GObject *object, GAsyncResult *result, gpointer user_data)

◆ TEST() [5/5]

TEST ( FlBasicMessageChannelTest  ,
SendNullMessageWithResponse   
)

Definition at line 211 of file fl_basic_message_channel_test.cc.

211 {
212 g_autoptr(GMainLoop) loop = g_main_loop_new(nullptr, 0);
213
214 g_autoptr(FlEngine) engine = make_mock_engine();
215 FlBinaryMessenger* messenger = fl_binary_messenger_new(engine);
216 g_autoptr(FlStandardMessageCodec) codec = fl_standard_message_codec_new();
217 g_autoptr(FlBasicMessageChannel) channel = fl_basic_message_channel_new(
218 messenger, "test/echo", FL_MESSAGE_CODEC(codec));
219 fl_basic_message_channel_send(channel, nullptr, nullptr,
221
222 // Blocks here until null_message_response_cb is called.
223 g_main_loop_run(loop);
224}
static void null_message_response_cb(GObject *object, GAsyncResult *result, gpointer user_data)