7#include "gtest/gtest.h"
27 [](FlMockBinaryMessenger* messenger, GTask* task,
const gchar*
name,
29 EXPECT_STREQ(
name,
"Test");
39 FL_BINARY_MESSENGER(messenger),
"test", FL_METHOD_CODEC(codec));
44 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
49 EXPECT_NE(response,
nullptr);
50 EXPECT_EQ(
error,
nullptr);
53 EXPECT_NE(r,
nullptr);
54 EXPECT_EQ(
error,
nullptr);
59 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
63 g_main_loop_run(loop);
70 [](FlMockBinaryMessenger* messenger, GTask* task,
const gchar*
name,
72 EXPECT_STREQ(
name,
"Test");
80 FL_BINARY_MESSENGER(messenger),
"test", FL_METHOD_CODEC(codec));
83 channel,
"Test",
nullptr,
nullptr,
84 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
89 EXPECT_NE(response,
nullptr);
90 EXPECT_EQ(
error,
nullptr);
93 EXPECT_NE(r,
nullptr);
94 EXPECT_EQ(
error,
nullptr);
97 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
101 g_main_loop_run(loop);
108 [](FlMockBinaryMessenger* messenger, GTask* task,
const gchar*
name,
110 EXPECT_STREQ(
name,
"Test");
112 return FL_METHOD_RESPONSE(
119 FL_BINARY_MESSENGER(messenger),
"test", FL_METHOD_CODEC(codec));
122 channel,
"Test",
nullptr,
nullptr,
123 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
128 EXPECT_NE(response,
nullptr);
129 EXPECT_EQ(
error,
nullptr);
131 EXPECT_TRUE(FL_IS_METHOD_ERROR_RESPONSE(response));
133 FL_METHOD_ERROR_RESPONSE(response)),
136 FL_METHOD_ERROR_RESPONSE(response)),
139 FL_METHOD_ERROR_RESPONSE(response));
140 EXPECT_NE(details,
nullptr);
144 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
148 g_main_loop_run(loop);
155 [](FlMockBinaryMessenger* messenger, GTask* task,
const gchar*
name,
157 EXPECT_STREQ(
name,
"Test");
164 FL_BINARY_MESSENGER(messenger),
"test", FL_METHOD_CODEC(codec));
167 channel,
"Test",
nullptr,
nullptr,
168 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
173 EXPECT_NE(response,
nullptr);
174 EXPECT_EQ(
error,
nullptr);
176 EXPECT_TRUE(FL_IS_METHOD_NOT_IMPLEMENTED_RESPONSE(response));
178 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
182 g_main_loop_run(loop);
191 FL_BINARY_MESSENGER(messenger),
"test", FL_METHOD_CODEC(codec));
194 channel,
"Test",
nullptr,
nullptr,
195 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
200 EXPECT_EQ(response,
nullptr);
201 EXPECT_NE(
error,
nullptr);
203 EXPECT_EQ(
error->code, 42);
204 EXPECT_STREQ(
error->message,
"ERROR");
206 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
210 g_main_loop_run(loop);
217 FL_BINARY_MESSENGER(messenger),
"test", FL_METHOD_CODEC(codec));
232 EXPECT_EQ(
error,
nullptr);
238 gboolean called = FALSE;
240 messenger,
"test",
"Test",
args,
241 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
243 gboolean* called =
static_cast<gboolean*
>(
user_data);
246 EXPECT_TRUE(FL_IS_METHOD_SUCCESS_RESPONSE(response));
248 FL_METHOD_SUCCESS_RESPONSE(response));
260 FL_BINARY_MESSENGER(messenger),
"test", FL_METHOD_CODEC(codec));
275 EXPECT_EQ(
error,
nullptr);
281 gboolean called = FALSE;
283 messenger,
"test",
"Test",
args,
284 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
286 gboolean* called =
static_cast<gboolean*
>(
user_data);
289 EXPECT_TRUE(FL_IS_METHOD_ERROR_RESPONSE(response));
291 FL_METHOD_ERROR_RESPONSE(response)),
294 FL_METHOD_ERROR_RESPONSE(response)),
297 FL_METHOD_ERROR_RESPONSE(response));
309 FL_BINARY_MESSENGER(messenger),
"test", FL_METHOD_CODEC(codec));
323 EXPECT_EQ(
error,
nullptr);
329 gboolean called = FALSE;
331 messenger,
"test",
"Test",
args,
332 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
334 gboolean* called =
static_cast<gboolean*
>(
user_data);
337 EXPECT_TRUE(FL_IS_METHOD_NOT_IMPLEMENTED_RESPONSE(response));
350struct _TestMethodCodec {
351 FlMethodCodec parent_instance;
353 FlStandardMethodCodec* wrapped_codec;
356G_DEFINE_TYPE(TestMethodCodec, test_method_codec, fl_method_codec_get_type())
359 TestMethodCodec*
self = TEST_METHOD_CODEC(
object);
361 g_clear_object(&
self->wrapped_codec);
363 G_OBJECT_CLASS(test_method_codec_parent_class)->dispose(
object);
371 EXPECT_TRUE(TEST_IS_METHOD_CODEC(codec));
372 TestMethodCodec*
self = TEST_METHOD_CODEC(codec);
383 EXPECT_TRUE(TEST_IS_METHOD_CODEC(codec));
384 TestMethodCodec*
self = TEST_METHOD_CODEC(codec);
413 EXPECT_TRUE(TEST_IS_METHOD_CODEC(codec));
414 TestMethodCodec*
self = TEST_METHOD_CODEC(codec);
421 FL_METHOD_CODEC_CLASS(klass)->encode_method_call =
423 FL_METHOD_CODEC_CLASS(klass)->decode_method_call =
425 FL_METHOD_CODEC_CLASS(klass)->encode_success_envelope =
427 FL_METHOD_CODEC_CLASS(klass)->encode_error_envelope =
429 FL_METHOD_CODEC_CLASS(klass)->decode_response =
438 return TEST_METHOD_CODEC(g_object_new(test_method_codec_get_type(),
nullptr));
446 FL_BINARY_MESSENGER(messenger),
"test", FL_METHOD_CODEC(codec));
447 gboolean called = FALSE;
452 gboolean* called =
static_cast<gboolean*
>(
user_data);
456 g_autoptr(GError) response_error =
nullptr;
459 EXPECT_NE(response_error,
nullptr);
460 EXPECT_STREQ(response_error->message,
"Unsupported type");
469 messenger,
"test",
"Test",
nullptr,
470 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
482 FL_BINARY_MESSENGER(messenger),
"test", FL_METHOD_CODEC(codec));
483 gboolean called = FALSE;
488 gboolean* called =
static_cast<gboolean*
>(
user_data);
492 g_autoptr(GError) response_error =
nullptr;
494 details, &response_error));
495 EXPECT_NE(response_error,
nullptr);
496 EXPECT_STREQ(response_error->message,
"Unsupported type");
502 nullptr,
nullptr,
nullptr);
519 FL_BINARY_MESSENGER(messenger),
"test", FL_METHOD_CODEC(codec));
525 int* first_count =
static_cast<int*
>(
user_data);
531 &first_count,
nullptr);
534 messenger,
"test",
"Test",
nullptr,
535 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
538 EXPECT_EQ(first_count, 1);
541 g_object_unref(channel1);
545 FL_BINARY_MESSENGER(messenger),
"test", FL_METHOD_CODEC(codec));
546 int second_count = 0;
551 int* second_count =
static_cast<int*
>(
user_data);
557 &second_count,
nullptr);
560 messenger,
"test",
"Test",
nullptr,
561 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
564 EXPECT_EQ(first_count, 1);
565 EXPECT_EQ(second_count, 1);
580 FL_BINARY_MESSENGER(messenger),
"test", FL_METHOD_CODEC(codec));
586 int* first_count =
static_cast<int*
>(
user_data);
592 &first_count,
nullptr);
595 messenger,
"test",
"Test",
nullptr,
596 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
599 EXPECT_EQ(first_count, 1);
603 FL_BINARY_MESSENGER(messenger),
"test", FL_METHOD_CODEC(codec));
604 int second_count = 0;
609 int* second_count =
static_cast<int*
>(
user_data);
615 &second_count,
nullptr);
618 messenger,
"test",
"Test",
nullptr,
619 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
622 EXPECT_EQ(first_count, 1);
623 EXPECT_EQ(second_count, 1);
626 g_object_unref(channel1);
629 messenger,
"test",
"Test",
nullptr,
630 [](FlMockBinaryMessenger* messenger, FlMethodResponse* response,
633 EXPECT_EQ(first_count, 1);
634 EXPECT_EQ(second_count, 2);
641 [](FlMockBinaryMessenger* messenger, GTask* task,
const gchar*
name,
649 FL_BINARY_MESSENGER(messenger),
"test", FL_METHOD_CODEC(codec));
654 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
659 EXPECT_EQ(response,
nullptr);
660 EXPECT_NE(
error,
nullptr);
661 EXPECT_STREQ(
error->message,
"Custom value not implemented");
663 g_main_loop_quit(
static_cast<GMainLoop*
>(
user_data));
667 g_main_loop_run(loop);
TEST(AsciiTableTest, Simple)
FlMockBinaryMessenger * messenger
g_autoptr(FlEngine) engine
G_DEFINE_TYPE(FlBasicMessageChannelResponseHandle, fl_basic_message_channel_response_handle, G_TYPE_OBJECT) static void fl_basic_message_channel_response_handle_dispose(GObject *object)
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
@ FL_MESSAGE_CODEC_ERROR_FAILED
#define FL_MESSAGE_CODEC_ERROR
G_MODULE_EXPORT gboolean fl_method_call_respond_error(FlMethodCall *self, const gchar *code, const gchar *message, FlValue *details, GError **error)
G_MODULE_EXPORT const gchar * fl_method_call_get_name(FlMethodCall *self)
G_MODULE_EXPORT gboolean fl_method_call_respond_success(FlMethodCall *self, FlValue *result, GError **error)
G_MODULE_EXPORT gboolean fl_method_call_respond_not_implemented(FlMethodCall *self, GError **error)
G_MODULE_EXPORT FlValue * fl_method_call_get_args(FlMethodCall *self)
G_MODULE_EXPORT FlMethodResponse * fl_method_channel_invoke_method_finish(FlMethodChannel *self, GAsyncResult *result, GError **error)
G_MODULE_EXPORT FlMethodChannel * fl_method_channel_new(FlBinaryMessenger *messenger, const gchar *name, FlMethodCodec *codec)
G_MODULE_EXPORT void fl_method_channel_invoke_method(FlMethodChannel *self, const gchar *method, FlValue *args, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
G_MODULE_EXPORT void fl_method_channel_set_method_call_handler(FlMethodChannel *self, FlMethodChannelMethodCallHandler handler, gpointer user_data, GDestroyNotify destroy_notify)
G_BEGIN_DECLS G_MODULE_EXPORT FlMethodCall * method_call
static GBytes * test_method_codec_encode_method_call(FlMethodCodec *codec, const gchar *name, FlValue *args, GError **error)
static void test_method_codec_dispose(GObject *object)
TestMethodCodec * test_method_codec_new()
static GBytes * test_method_codec_encode_success_envelope(FlMethodCodec *codec, FlValue *result, GError **error)
static FlMethodResponse * test_method_codec_decode_response(FlMethodCodec *codec, GBytes *message, GError **error)
TEST_F(FlMethodChannelTest, InvokeMethod)
static gboolean test_method_codec_decode_method_call(FlMethodCodec *codec, GBytes *message, gchar **name, FlValue **args, GError **error)
static void test_method_codec_class_init(TestMethodCodecClass *klass)
static void test_method_codec_init(TestMethodCodec *self)
static GBytes * test_method_codec_encode_error_envelope(FlMethodCodec *codec, const gchar *code, const gchar *message, FlValue *details, GError **error)
G_DECLARE_FINAL_TYPE(TestMethodCodec, test_method_codec, TEST, METHOD_CODEC, FlMethodCodec) struct _TestMethodCodec
FlMethodResponse * fl_method_codec_decode_response(FlMethodCodec *self, GBytes *message, GError **error)
gboolean fl_method_codec_decode_method_call(FlMethodCodec *self, GBytes *message, gchar **name, FlValue **args, GError **error)
GBytes * fl_method_codec_encode_method_call(FlMethodCodec *self, const gchar *name, FlValue *args, GError **error)
G_MODULE_EXPORT FlValue * fl_method_response_get_result(FlMethodResponse *self, GError **error)
G_MODULE_EXPORT FlValue * fl_method_success_response_get_result(FlMethodSuccessResponse *self)
G_MODULE_EXPORT FlMethodErrorResponse * fl_method_error_response_new(const gchar *code, const gchar *message, FlValue *details)
G_MODULE_EXPORT const gchar * fl_method_error_response_get_message(FlMethodErrorResponse *self)
G_MODULE_EXPORT FlMethodSuccessResponse * fl_method_success_response_new(FlValue *result)
G_MODULE_EXPORT FlValue * fl_method_error_response_get_details(FlMethodErrorResponse *self)
G_MODULE_EXPORT const gchar * fl_method_error_response_get_code(FlMethodErrorResponse *self)
G_MODULE_EXPORT FlMethodNotImplementedResponse * fl_method_not_implemented_response_new()
void fl_mock_binary_messenger_invoke_standard_method(FlMockBinaryMessenger *self, const gchar *channel, const char *name, FlValue *args, FlMockBinaryMessengerMethodCallback callback, gpointer user_data)
void fl_mock_binary_messenger_set_standard_method_channel(FlMockBinaryMessenger *self, const gchar *channel, FlMockBinaryMessengerMethodChannelHandler handler, gpointer user_data)
void fl_mock_binary_messenger_set_error_channel(FlMockBinaryMessenger *self, const gchar *channel, gint code, const gchar *message)
FlMockBinaryMessenger * fl_mock_binary_messenger_new()
const uint8_t uint32_t uint32_t GError ** error
G_MODULE_EXPORT FlStandardMethodCodec * fl_standard_method_codec_new()
G_MODULE_EXPORT FlValue * fl_value_new_custom(int type, gconstpointer value, GDestroyNotify destroy_notify)
G_MODULE_EXPORT FlValueType fl_value_get_type(FlValue *self)
G_MODULE_EXPORT FlValue * fl_value_new_string(const gchar *value)
G_MODULE_EXPORT const gchar * fl_value_get_string(FlValue *self)
G_MODULE_EXPORT FlValue * fl_value_new_int(int64_t value)
typedefG_BEGIN_DECLS struct _FlValue FlValue