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

Unified Diff: mojo/common/callback_binding_unittest.cc

Issue 1841863002: Update monet. (Closed) Base URL: https://github.com/domokit/monet.git@master
Patch Set: Created 4 years, 9 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
« no previous file with comments | « mojo/common/binding_set_unittest.cc ('k') | mojo/common/common_type_converters.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/common/callback_binding_unittest.cc
diff --git a/mojo/common/callback_binding_unittest.cc b/mojo/common/callback_binding_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..aa59856dcc27a285377072dfb9ad8869a9a06266
--- /dev/null
+++ b/mojo/common/callback_binding_unittest.cc
@@ -0,0 +1,104 @@
+// Copyright 2013 The Chromium 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 "base/bind.h"
+#include "mojo/public/cpp/bindings/callback.h"
+#include "mojo/public/cpp/bindings/map.h"
+#include "mojo/public/cpp/bindings/string.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+struct RunnableNoArgs {
+ RunnableNoArgs(int* calls) : calls(calls) {}
+ void Run() const { (*calls)++; }
+
+ int* calls;
+};
+
+TEST(CallbackBindingTest, BaseBindToMojoCallbackNoParams) {
+ mojo::Callback<void()> cb;
+ int calls = 0;
+ RunnableNoArgs r(&calls);
+ cb = r;
+ cb.Run();
+ EXPECT_EQ(1, calls);
+
+ cb = base::Bind(&RunnableNoArgs::Run, base::Unretained(&r));
+ cb.Run();
+ EXPECT_EQ(2, calls);
+}
+
+struct RunnableOnePrimitiveArg {
+ explicit RunnableOnePrimitiveArg(int* calls) : calls(calls) {}
+ void Run(int a) const { (*calls)++; }
+
+ int* calls;
+};
+
+TEST(CallbackBindingTest, BaseBindToMojoCallbackPrimitiveParam) {
+ mojo::Callback<void(int)> mojo_callback;
+ int calls = 0;
+ RunnableOnePrimitiveArg r(&calls);
+ mojo_callback = r;
+ mojo_callback.Run(0);
+ EXPECT_EQ(1, calls);
+
+ base::Callback<void(int)> base_callback =
+ base::Bind(&RunnableOnePrimitiveArg::Run, base::Unretained(&r));
+ mojo_callback = base_callback;
+ mojo_callback.Run(0);
+ EXPECT_EQ(2, calls);
+}
+
+struct RunnableOneMojoStringParam {
+ explicit RunnableOneMojoStringParam(int* calls) : calls(calls) {}
+ void Run(const mojo::String& s) const { (*calls)++; }
+
+ int* calls;
+};
+
+TEST(CallbackBindingTest, BaseBindToMojoCallbackMojoStringParam) {
+ // The mojo type is a callback on mojo::String, but it'll expect to invoke
+ // callbacks with a parameter of type 'const Mojo::String&'.
+ mojo::Callback<void(mojo::String)> mojo_callback;
+ int calls = 0;
+ RunnableOneMojoStringParam r(&calls);
+ mojo_callback = r;
+ mojo_callback.Run(0);
+ EXPECT_EQ(1, calls);
+
+ base::Callback<void(const mojo::String&)> base_callback =
+ base::Bind(&RunnableOneMojoStringParam::Run, base::Unretained(&r));
+ mojo_callback = base_callback;
+ mojo_callback.Run(0);
+ EXPECT_EQ(2, calls);
+}
+
+using ExampleMoveOnlyType = mojo::Map<int, int>;
+
+struct RunnableOneMoveOnlyParam {
+ explicit RunnableOneMoveOnlyParam(int* calls) : calls(calls) {}
+
+ void Run(ExampleMoveOnlyType m) const { (*calls)++; }
+ int* calls;
+};
+
+TEST(CallbackBindingTest, BaseBindToMoveOnlyParam) {
+ mojo::Callback<void(ExampleMoveOnlyType)> mojo_callback;
+ int calls = 0;
+ RunnableOneMoveOnlyParam r(&calls);
+ mojo_callback = r;
+ ExampleMoveOnlyType m;
+ mojo_callback.Run(m.Clone());
+ EXPECT_EQ(1, calls);
+
+ base::Callback<void(ExampleMoveOnlyType)> base_callback =
+ base::Bind(&RunnableOneMoveOnlyParam::Run, base::Unretained(&r));
+ mojo_callback = base_callback;
+ mojo_callback.Run(m.Clone());
+ EXPECT_EQ(2, calls);
+}
+
+} // namespace
« no previous file with comments | « mojo/common/binding_set_unittest.cc ('k') | mojo/common/common_type_converters.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698