| // 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 <utility> |
| |
| #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<testfidl::TestInterface>& ptr) { |
| // Call the service and wait for response. |
| RunLoop run_loop; |
| zx_status_t result = ZX_ERR_INTERNAL; |
| base::WeakPtrFactory<zx_status_t> 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 |