// 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_COMMON_CLIENT_WRAPPER_TESTING_STUB_FLUTTER_API_H_ #define FLUTTER_SHELL_PLATFORM_COMMON_CLIENT_WRAPPER_TESTING_STUB_FLUTTER_API_H_ #include #include "flutter/shell/platform/common/public/flutter_messenger.h" #include "flutter/shell/platform/common/public/flutter_plugin_registrar.h" namespace flutter { namespace testing { // Base class for a object that provides test implementations of the APIs in // the headers in platform/common/public/. // Linking this class into a test binary will provide dummy forwarding // implementantions of that C API, so that the wrapper can be tested separately // from the actual library. class StubFlutterApi { public: // Used by the callers to simulate a result from the engine when sending a // message. bool message_engine_result = true; // Sets |stub| as the instance to which calls to the Flutter library C APIs // will be forwarded. static void SetTestStub(StubFlutterApi* stub); // Returns the current stub, as last set by SetTestFluttterStub. static StubFlutterApi* GetTestStub(); virtual ~StubFlutterApi() {} // Called for FlutterDesktopPluginRegistrarSetDestructionHandler. virtual void PluginRegistrarSetDestructionHandler( FlutterDesktopOnPluginRegistrarDestroyed callback) {} // Called for FlutterDesktopMessengerSend. virtual bool MessengerSend(const char* channel, const uint8_t* message, const size_t message_size) { return message_engine_result; } // Called for FlutterDesktopMessengerSendWithReply. virtual bool MessengerSendWithReply(const char* channel, const uint8_t* message, const size_t message_size, const FlutterDesktopBinaryReply reply, void* user_data) { return message_engine_result; } // Called for FlutterDesktopMessengerSendResponse. virtual void MessengerSendResponse( const FlutterDesktopMessageResponseHandle* handle, const uint8_t* data, size_t data_length) {} // Called for FlutterDesktopMessengerSetCallback. virtual void MessengerSetCallback(const char* channel, FlutterDesktopMessageCallback callback, void* user_data) {} // Called for FlutterDesktopRegisterExternalTexture. virtual int64_t TextureRegistrarRegisterExternalTexture( const FlutterDesktopTextureInfo* info) { return -1; } // Called for FlutterDesktopUnregisterExternalTexture. virtual bool TextureRegistrarUnregisterExternalTexture(int64_t texture_id) { return false; } // Called for FlutterDesktopMarkExternalTextureFrameAvailable. virtual bool TextureRegistrarMarkTextureFrameAvailable(int64_t texture_id) { return false; } }; // A test helper that owns a stub implementation, making it the test stub for // the lifetime of the object, then restoring the previous value. class ScopedStubFlutterApi { public: // Calls SetTestFlutterStub with |stub|. ScopedStubFlutterApi(std::unique_ptr stub); // Restores the previous test stub. ~ScopedStubFlutterApi(); StubFlutterApi* stub() { return stub_.get(); } private: std::unique_ptr stub_; // The previous stub. StubFlutterApi* previous_stub_; }; } // namespace testing } // namespace flutter #endif // FLUTTER_SHELL_PLATFORM_COMMON_CLIENT_WRAPPER_TESTING_STUB_FLUTTER_API_H_