| // 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_FUCHSIA_TESTS_FAKES_PLATFORM_MESSAGE_H_ |
| #define FLUTTER_SHELL_PLATFORM_FUCHSIA_TESTS_FAKES_PLATFORM_MESSAGE_H_ |
| |
| #include <gtest/gtest.h> |
| #include <optional> |
| |
| #include "flutter/lib/ui/window/platform_message.h" |
| #include "third_party/rapidjson/include/rapidjson/document.h" |
| |
| using PlatformMessageResponse = flutter::PlatformMessageResponse; |
| using PlatformMessage = flutter::PlatformMessage; |
| |
| namespace flutter_runner::testing { |
| |
| class FakePlatformMessageResponse : public PlatformMessageResponse { |
| public: |
| static fml::RefPtr<FakePlatformMessageResponse> Create() { |
| return fml::AdoptRef(new FakePlatformMessageResponse()); |
| } |
| |
| void ExpectCompleted(std::string expected) { |
| EXPECT_TRUE(is_complete_); |
| if (is_complete_) { |
| EXPECT_EQ(expected, response_); |
| } |
| } |
| |
| std::unique_ptr<PlatformMessage> WithMessage(std::string channel, |
| std::string message) { |
| return std::make_unique<PlatformMessage>( |
| channel, |
| fml::MallocMapping::Copy(message.c_str(), |
| message.c_str() + message.size()), |
| fml::RefPtr<FakePlatformMessageResponse>(this)); |
| } |
| |
| void Complete(std::unique_ptr<fml::Mapping> data) override { |
| response_ = |
| std::string(data->GetMapping(), data->GetMapping() + data->GetSize()); |
| FinalizeComplete(); |
| }; |
| |
| void CompleteEmpty() override { FinalizeComplete(); }; |
| |
| private: |
| // Private constructors. |
| FakePlatformMessageResponse() {} |
| |
| void FinalizeComplete() { |
| EXPECT_FALSE(std::exchange(is_complete_, true)) |
| << "Platform message responses can only be completed once!"; |
| } |
| |
| std::string response_; |
| }; |
| |
| } // namespace flutter_runner::testing |
| |
| #endif // FLUTTER_SHELL_PLATFORM_FUCHSIA_TESTS_FAKES_PLATFORM_MESSAGE_H_ |