// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/fuchsia/test_interface_impl.h" #include #include "base/memory/weak_ptr.h" #include "base/run_loop.h" #include "testing/gtest/include/gtest/gtest.h" namespace base { TestInterfaceImpl::TestInterfaceImpl() = default; TestInterfaceImpl::~TestInterfaceImpl() = default; void TestInterfaceImpl::Add(int32_t a, int32_t b, AddCallback callback) { callback(a + b); } zx_status_t VerifyTestInterface( fidl::InterfacePtr& ptr) { // Call the service and wait for response. RunLoop run_loop; zx_status_t result = ZX_ERR_INTERNAL; base::WeakPtrFactory weak_result(&result); ptr.set_error_handler( [quit = run_loop.QuitClosure(), weak_result = weak_result.GetWeakPtr()](zx_status_t status) { if (weak_result) *weak_result = status; std::move(quit).Run(); }); ptr->Add(2, 2, [quit = run_loop.QuitClosure(), weak_result = weak_result.GetWeakPtr()](int32_t value) { EXPECT_EQ(value, 4); if (weak_result) *weak_result = ZX_OK; std::move(quit).Run(); }); run_loop.Run(); // Reset error handler because the current one captures |run_loop| and // |error| references which are about to be destroyed. ptr.set_error_handler(nullptr); return result; } } // namespace base