| // 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. | |
| #include <lib/sys/cpp/service_directory.h> | |
| #include <lib/sys/cpp/testing/test_with_environment.h> | |
| namespace sys { | |
| namespace testing { | |
| TestWithEnvironment::TestWithEnvironment() | |
| : real_services_(sys::ServiceDirectory::CreateFromNamespace()) { | |
| real_services_->Connect(real_env_.NewRequest()); | |
| real_env_->GetLauncher(real_launcher_.NewRequest()); | |
| } | |
| void TestWithEnvironment::CreateComponentInCurrentEnvironment( | |
| fuchsia::sys::LaunchInfo launch_info, | |
| fidl::InterfaceRequest<fuchsia::sys::ComponentController> request) { | |
| real_launcher_.CreateComponent(std::move(launch_info), std::move(request)); | |
| } | |
| bool TestWithEnvironment::RunComponentUntilTerminated( | |
| fuchsia::sys::ComponentControllerPtr component_controller, | |
| TerminationResult* termination_result) { | |
| bool is_terminated = false; | |
| component_controller.events().OnTerminated = [&](int64_t return_code, | |
| fuchsia::sys::TerminationReason reason) { | |
| is_terminated = true; | |
| if (termination_result != nullptr) { | |
| *termination_result = { | |
| .return_code = return_code, | |
| .reason = reason, | |
| }; | |
| } | |
| }; | |
| RunLoopUntil([&]() { return is_terminated; }); | |
| return is_terminated; | |
| } | |
| } // namespace testing | |
| } // namespace sys |