| // Copyright 2018 The Fuchsia 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 LIB_SYS_CPP_TESTING_FAKE_LAUNCHER_H_ |
| #define LIB_SYS_CPP_TESTING_FAKE_LAUNCHER_H_ |
| |
| #include <fuchsia/sys/cpp/fidl.h> |
| #include <lib/async/dispatcher.h> |
| #include <lib/fidl/cpp/binding_set.h> |
| #include <lib/fidl/cpp/interface_request.h> |
| #include <lib/fit/function.h> |
| |
| namespace sys { |
| namespace testing { |
| |
| // A fake |Launcher| for testing. |
| // Used to intercept component component launch from code under test. |
| class FakeLauncher : public fuchsia::sys::Launcher { |
| public: |
| FakeLauncher(); |
| ~FakeLauncher() override; |
| |
| FakeLauncher(const FakeLauncher&) = delete; |
| FakeLauncher& operator=(const FakeLauncher&) = delete; |
| |
| using ComponentConnector = fit::function<void( |
| fuchsia::sys::LaunchInfo, fidl::InterfaceRequest<fuchsia::sys::ComponentController>)>; |
| |
| // Registers a component located at "url" with a connector. When someone |
| // tries to CreateComponent() with this |url|, the supplied |connector| is |
| // called with the the LaunchInfo and associated ComponentController request. |
| // The connector may implement the |LaunchInfo.services| and |
| // |ComponentController| interfaces to communicate with its connector and |
| // listen for component signals. |
| void RegisterComponent(std::string url, ComponentConnector connector); |
| |
| // Forwards this |CreateComponent| request to a registered connector, if an |
| // associated one exists. If one is not registered for |launch_info.url|, then |
| // this call is dropped. |
| void CreateComponent( |
| fuchsia::sys::LaunchInfo launch_info, |
| fidl::InterfaceRequest<fuchsia::sys::ComponentController> controller) override; |
| |
| fidl::InterfaceRequestHandler<fuchsia::sys::Launcher> GetHandler( |
| async_dispatcher_t* dispatcher = nullptr); |
| |
| private: |
| std::map<std::string, ComponentConnector> connectors_; |
| fidl::BindingSet<Launcher> binding_set_; |
| }; |
| |
| } // namespace testing |
| } // namespace sys |
| |
| #endif // LIB_SYS_CPP_TESTING_FAKE_LAUNCHER_H_ |