Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Unified Diff: mojo/public/cpp/bindings/tests/sync_method_unittest.cc

Issue 2062333002: mojo::Callback -> base::Callback (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/public/cpp/bindings/tests/sync_method_unittest.cc
diff --git a/mojo/public/cpp/bindings/tests/sync_method_unittest.cc b/mojo/public/cpp/bindings/tests/sync_method_unittest.cc
index 65a098ad626e8bac1eac286353f59388b943d826..10a8bda205667ba6cd80ba98eb724829df4da1d0 100644
--- a/mojo/public/cpp/bindings/tests/sync_method_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/sync_method_unittest.cc
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <utility>
+
#include "base/bind.h"
#include "base/logging.h"
#include "base/macros.h"
@@ -17,30 +19,59 @@ namespace mojo {
namespace test {
namespace {
+template <typename... Args>
+struct LambdaBinder {
yzshen1 2016/06/18 00:01:18 optional: Can this be shared with other tests? I l
Ken Rockot(use gerrit already) 2016/06/18 03:24:26 I would like to think so but decided against it fo
+ using CallbackType = base::Callback<void(Args...)>;
+
+ template <typename Func>
+ static void RunLambda(Func func, Args... args) {
+ func(std::move(args)...);
+ }
+
+ template <typename Func>
+ static CallbackType BindLambda(Func func) {
+ return base::Bind(&LambdaBinder::RunLambda<Func>, func);
+ }
+};
+
class TestSyncCommonImpl {
public:
TestSyncCommonImpl() {}
using PingHandler = Callback<void(const Callback<void()>&)>;
- void set_ping_handler(const PingHandler& handler) { ping_handler_ = handler; }
+ using PingBinder = LambdaBinder<const Callback<void()>&>;
+ template <typename Func>
+ void set_ping_handler(Func handler) {
+ ping_handler_ = PingBinder::BindLambda(handler);
+ }
using EchoHandler = Callback<void(int32_t, const Callback<void(int32_t)>&)>;
- void set_echo_handler(const EchoHandler& handler) { echo_handler_ = handler; }
+ using EchoBinder = LambdaBinder<int32_t, const Callback<void(int32_t)>&>;
+ template <typename Func>
+ void set_echo_handler(Func handler) {
+ echo_handler_ = EchoBinder::BindLambda(handler);
+ }
using AsyncEchoHandler =
Callback<void(int32_t, const Callback<void(int32_t)>&)>;
- void set_async_echo_handler(const AsyncEchoHandler& handler) {
- async_echo_handler_ = handler;
+ using AsyncEchoBinder = LambdaBinder<int32_t, const Callback<void(int32_t)>&>;
+ template <typename Func>
+ void set_async_echo_handler(Func handler) {
+ async_echo_handler_ = AsyncEchoBinder::BindLambda(handler);
}
using SendInterfaceHandler = Callback<void(TestSyncAssociatedPtrInfo)>;
- void set_send_interface_handler(const SendInterfaceHandler& handler) {
- send_interface_handler_ = handler;
+ using SendInterfaceBinder = LambdaBinder<TestSyncAssociatedPtrInfo>;
+ template <typename Func>
+ void set_send_interface_handler(Func handler) {
+ send_interface_handler_ = SendInterfaceBinder::BindLambda(handler);
}
using SendRequestHandler = Callback<void(TestSyncAssociatedRequest)>;
- void set_send_request_handler(const SendRequestHandler& handler) {
- send_request_handler_ = handler;
+ using SendRequestBinder = LambdaBinder<TestSyncAssociatedRequest>;
+ template <typename Func>
+ void set_send_request_handler(Func handler) {
+ send_request_handler_ = SendRequestBinder::BindLambda(handler);
}
void PingImpl(const Callback<void()>& callback) {
@@ -278,6 +309,28 @@ class SyncMethodAssociatedTest : public SyncMethodTest {
TestSyncAssociatedRequest opposite_asso_request_;
};
+void SetFlagAndRunClosure(bool* flag, const base::Closure& closure) {
+ *flag = true;
+ closure.Run();
+}
+
+void ExpectValueAndRunClosure(int32_t expected_value,
+ const base::Closure& closure,
+ int32_t value) {
+ EXPECT_EQ(expected_value, value);
+ closure.Run();
+}
+
+template <typename Func>
+void CallAsyncEchoCallback(Func func, int32_t value) {
+ func(value);
+}
+
+template <typename Func>
+TestSync::AsyncEchoCallback BindAsyncEchoCallback(Func func) {
+ return base::Bind(&CallAsyncEchoCallback<Func>, func);
+}
+
// TestSync and TestSyncMaster exercise Router and MultiplexRouter,
// respectively.
using InterfaceTypes = testing::Types<TestSync, TestSyncMaster>;
@@ -288,10 +341,8 @@ TYPED_TEST(SyncMethodCommonTest, CallSyncMethodAsynchronously) {
typename ImplTraits<TypeParam>::Type impl(GetProxy(&ptr));
base::RunLoop run_loop;
- ptr->Echo(123, [&run_loop](int32_t result) {
- EXPECT_EQ(123, result);
- run_loop.Quit();
- });
+ ptr->Echo(123, base::Bind(&ExpectValueAndRunClosure, 123,
+ run_loop.QuitClosure()));
run_loop.Run();
}
@@ -429,12 +480,14 @@ TYPED_TEST(SyncMethodCommonTest, AsyncResponseQueuedDuringSyncCall) {
bool async_echo_response_dispatched = false;
base::RunLoop run_loop2;
- ptr->AsyncEcho(123,
- [&async_echo_response_dispatched, &run_loop2](int32_t result) {
- async_echo_response_dispatched = true;
- EXPECT_EQ(123, result);
- run_loop2.Quit();
- });
+ ptr->AsyncEcho(
+ 123,
+ BindAsyncEchoCallback(
+ [&async_echo_response_dispatched, &run_loop2](int32_t result) {
+ async_echo_response_dispatched = true;
+ EXPECT_EQ(123, result);
+ run_loop2.Quit();
+ }));
// Run until the AsyncEcho request reaches the service side.
run_loop1.Run();
@@ -479,12 +532,14 @@ TYPED_TEST(SyncMethodCommonTest, AsyncRequestQueuedDuringSyncCall) {
bool async_echo_response_dispatched = false;
base::RunLoop run_loop;
- ptr->AsyncEcho(123,
- [&async_echo_response_dispatched, &run_loop](int32_t result) {
- async_echo_response_dispatched = true;
- EXPECT_EQ(123, result);
- run_loop.Quit();
- });
+ ptr->AsyncEcho(
+ 123,
+ BindAsyncEchoCallback(
+ [&async_echo_response_dispatched, &run_loop](int32_t result) {
+ async_echo_response_dispatched = true;
+ EXPECT_EQ(123, result);
+ run_loop.Quit();
+ }));
impl.set_echo_handler([&async_echo_request_dispatched](
int32_t value, const TestSync::EchoCallback& callback) {
@@ -534,16 +589,18 @@ TYPED_TEST(SyncMethodCommonTest,
bool connection_error_dispatched = false;
base::RunLoop run_loop2;
ptr->AsyncEcho(
- 123, [&async_echo_response_dispatched, &connection_error_dispatched, &ptr,
- &run_loop2](int32_t result) {
- async_echo_response_dispatched = true;
- // At this point, error notification should not be dispatched
- // yet.
- EXPECT_FALSE(connection_error_dispatched);
- EXPECT_FALSE(ptr.encountered_error());
- EXPECT_EQ(123, result);
- run_loop2.Quit();
- });
+ 123,
+ BindAsyncEchoCallback(
+ [&async_echo_response_dispatched, &connection_error_dispatched, &ptr,
+ &run_loop2](int32_t result) {
+ async_echo_response_dispatched = true;
+ // At this point, error notification should not be dispatched
+ // yet.
+ EXPECT_FALSE(connection_error_dispatched);
+ EXPECT_FALSE(ptr.encountered_error());
+ EXPECT_EQ(123, result);
+ run_loop2.Quit();
+ }));
// Run until the AsyncEcho request reaches the service side.
run_loop1.Run();
@@ -559,10 +616,8 @@ TYPED_TEST(SyncMethodCommonTest,
base::RunLoop run_loop3;
ptr.set_connection_error_handler(
- [&connection_error_dispatched, &run_loop3]() {
- connection_error_dispatched = true;
- run_loop3.Quit();
- });
+ base::Bind(&SetFlagAndRunClosure, &connection_error_dispatched,
+ run_loop3.QuitClosure()));
int32_t result_value = -1;
ASSERT_FALSE(ptr->Echo(456, &result_value));
@@ -614,10 +669,9 @@ TYPED_TEST(SyncMethodCommonTest, InvalidMessageDuringSyncCall) {
bool connection_error_dispatched = false;
base::RunLoop run_loop;
- ptr.set_connection_error_handler([&connection_error_dispatched, &run_loop]() {
- connection_error_dispatched = true;
- run_loop.Quit();
- });
+ ptr.set_connection_error_handler(
+ base::Bind(&SetFlagAndRunClosure, &connection_error_dispatched,
+ run_loop.QuitClosure()));
int32_t result_value = -1;
ASSERT_FALSE(ptr->Echo(456, &result_value));

Powered by Google App Engine
This is Rietveld 408576698