mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
81 lines
2.7 KiB
C++
81 lines
2.7 KiB
C++
// 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 <cassert>
|
|
#include <functional>
|
|
#include <map>
|
|
#include <string>
|
|
|
|
#include "flutter/shell/platform/common/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<void(const std::string& channel,
|
|
const uint8_t* message,
|
|
size_t message_size,
|
|
BinaryReply reply)>;
|
|
|
|
// 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<std::string, BinaryMessageHandler> registered_handlers_;
|
|
};
|
|
|
|
} // namespace flutter
|
|
|
|
#endif // FLUTTER_SHELL_PLATFORM_WINDOWS_TESTING_TEST_BINARY_MESSENGER_H_
|