diff --git a/shell/platform/tizen/flutter_tizen_engine_unittest.cc b/shell/platform/tizen/flutter_tizen_engine_unittest.cc index 2ffd863c03a10..dc7bb1d5b68b2 100644 --- a/shell/platform/tizen/flutter_tizen_engine_unittest.cc +++ b/shell/platform/tizen/flutter_tizen_engine_unittest.cc @@ -143,5 +143,88 @@ TEST_F(FlutterTizenEngineTest, RunDoesExpectedInitialization) { modifier.embedder_api().Shutdown = [](auto engine) { return kSuccess; }; } +TEST_F(FlutterTizenEngineTest, SendPlatformMessageWithoutResponse) { + EngineModifier modifier(engine_); + + const char* channel = "test"; + const std::vector test_message = {1, 2, 3, 4}; + + // Without a response, SendPlatformMessage should be a simple pass-through. + bool called = false; + modifier.embedder_api().SendPlatformMessage = MOCK_ENGINE_PROC( + SendPlatformMessage, ([&called, test_message](auto engine, auto message) { + called = true; + EXPECT_STREQ(message->channel, "test"); + EXPECT_EQ(message->message_size, test_message.size()); + EXPECT_EQ(memcmp(message->message, test_message.data(), + message->message_size), + 0); + EXPECT_EQ(message->response_handle, nullptr); + return kSuccess; + })); + + engine_->SendPlatformMessage(channel, test_message.data(), + test_message.size(), nullptr, nullptr); + EXPECT_TRUE(called); +} + +TEST_F(FlutterTizenEngineTest, SendPlatformMessageWithResponse) { + EngineModifier modifier(engine_); + + const char* channel = "test"; + const std::vector test_message = {1, 2, 3, 4}; + auto* dummy_response_handle = + reinterpret_cast(5); + const FlutterDesktopBinaryReply reply_handler = [](auto... args) {}; + void* reply_user_data = reinterpret_cast(6); + + // When a response is requested, a handle should be created, passed as part + // of the message, and then released. + bool create_response_handle_called = false; + modifier.embedder_api().PlatformMessageCreateResponseHandle = + MOCK_ENGINE_PROC( + PlatformMessageCreateResponseHandle, + ([&create_response_handle_called, &reply_handler, reply_user_data, + dummy_response_handle](auto engine, auto reply, auto user_data, + auto response_handle) { + create_response_handle_called = true; + EXPECT_EQ(reply, reply_handler); + EXPECT_EQ(user_data, reply_user_data); + EXPECT_NE(response_handle, nullptr); + *response_handle = dummy_response_handle; + return kSuccess; + })); + bool release_response_handle_called = false; + modifier.embedder_api().PlatformMessageReleaseResponseHandle = + MOCK_ENGINE_PROC( + PlatformMessageReleaseResponseHandle, + ([&release_response_handle_called, dummy_response_handle]( + auto engine, auto response_handle) { + release_response_handle_called = true; + EXPECT_EQ(response_handle, dummy_response_handle); + return kSuccess; + })); + bool send_message_called = false; + modifier.embedder_api().SendPlatformMessage = MOCK_ENGINE_PROC( + SendPlatformMessage, ([&send_message_called, test_message, + dummy_response_handle](auto engine, auto message) { + send_message_called = true; + EXPECT_STREQ(message->channel, "test"); + EXPECT_EQ(message->message_size, test_message.size()); + EXPECT_EQ(memcmp(message->message, test_message.data(), + message->message_size), + 0); + EXPECT_EQ(message->response_handle, dummy_response_handle); + return kSuccess; + })); + + engine_->SendPlatformMessage(channel, test_message.data(), + test_message.size(), reply_handler, + reply_user_data); + EXPECT_TRUE(create_response_handle_called); + EXPECT_TRUE(release_response_handle_called); + EXPECT_TRUE(send_message_called); +} + } // namespace testing } // namespace flutter