// Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef FLUTTER_SHELL_PLATFORM_WINDOWS_TESTING_TEST_BINARY_MESSENGER_H_ #define FLUTTER_SHELL_PLATFORM_WINDOWS_TESTING_TEST_BINARY_MESSENGER_H_ #include #include #include #include #include "flutter/shell/platform/common/cpp/client_wrapper/include/flutter/binary_messenger.h" namespace flutter { // A trivial BinaryMessenger implementation for use in tests. class TestBinaryMessenger : public BinaryMessenger { public: using SendHandler = std::function; // Creates a new messenge that forwards all calls to |send_handler|. explicit TestBinaryMessenger(SendHandler send_handler = nullptr) : send_handler_(std::move(send_handler)) {} virtual ~TestBinaryMessenger() = default; // Prevent copying. TestBinaryMessenger(TestBinaryMessenger const&) = delete; TestBinaryMessenger& operator=(TestBinaryMessenger const&) = delete; // Simulates a message from the engine on the given channel. // // Returns false if no handler is registered on that channel. bool SimulateEngineMessage(const std::string& channel, const uint8_t* message, size_t message_size, BinaryReply reply) { auto handler = registered_handlers_.find(channel); if (handler == registered_handlers_.end()) { return false; } (handler->second)(message, message_size, reply); return true; } // |flutter::BinaryMessenger| void Send(const std::string& channel, const uint8_t* message, size_t message_size, BinaryReply reply) const override { // If something under test sends a message, the test should be handling it. assert(send_handler_); send_handler_(channel, message, message_size, reply); } // |flutter::BinaryMessenger| void SetMessageHandler(const std::string& channel, BinaryMessageHandler handler) override { if (handler) { registered_handlers_[channel] = handler; } else { registered_handlers_.erase(channel); } } private: // Handler to call for SendMessage. SendHandler send_handler_; // Mapping of channel name to registered handlers. std::map registered_handlers_; }; } // namespace flutter #endif // FLUTTER_SHELL_PLATFORM_WINDOWS_TESTING_TEST_BINARY_MESSENGER_H_