OLD | NEW |
(Empty) | |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "base/bind.h" |
| 6 #include "mojo/public/cpp/bindings/callback.h" |
| 7 #include "mojo/public/cpp/bindings/map.h" |
| 8 #include "mojo/public/cpp/bindings/string.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 |
| 11 namespace { |
| 12 |
| 13 struct RunnableNoArgs { |
| 14 RunnableNoArgs(int* calls) : calls(calls) {} |
| 15 void Run() const { (*calls)++; } |
| 16 |
| 17 int* calls; |
| 18 }; |
| 19 |
| 20 TEST(CallbackBindingTest, BaseBindToMojoCallbackNoParams) { |
| 21 mojo::Callback<void()> cb; |
| 22 int calls = 0; |
| 23 RunnableNoArgs r(&calls); |
| 24 cb = r; |
| 25 cb.Run(); |
| 26 EXPECT_EQ(1, calls); |
| 27 |
| 28 cb = base::Bind(&RunnableNoArgs::Run, base::Unretained(&r)); |
| 29 cb.Run(); |
| 30 EXPECT_EQ(2, calls); |
| 31 } |
| 32 |
| 33 struct RunnableOnePrimitiveArg { |
| 34 explicit RunnableOnePrimitiveArg(int* calls) : calls(calls) {} |
| 35 void Run(int a) const { (*calls)++; } |
| 36 |
| 37 int* calls; |
| 38 }; |
| 39 |
| 40 TEST(CallbackBindingTest, BaseBindToMojoCallbackPrimitiveParam) { |
| 41 mojo::Callback<void(int)> mojo_callback; |
| 42 int calls = 0; |
| 43 RunnableOnePrimitiveArg r(&calls); |
| 44 mojo_callback = r; |
| 45 mojo_callback.Run(0); |
| 46 EXPECT_EQ(1, calls); |
| 47 |
| 48 base::Callback<void(int)> base_callback = |
| 49 base::Bind(&RunnableOnePrimitiveArg::Run, base::Unretained(&r)); |
| 50 mojo_callback = base_callback; |
| 51 mojo_callback.Run(0); |
| 52 EXPECT_EQ(2, calls); |
| 53 } |
| 54 |
| 55 struct RunnableOneMojoStringParam { |
| 56 explicit RunnableOneMojoStringParam(int* calls) : calls(calls) {} |
| 57 void Run(const mojo::String& s) const { (*calls)++; } |
| 58 |
| 59 int* calls; |
| 60 }; |
| 61 |
| 62 TEST(CallbackBindingTest, BaseBindToMojoCallbackMojoStringParam) { |
| 63 // The mojo type is a callback on mojo::String, but it'll expect to invoke |
| 64 // callbacks with a parameter of type 'const Mojo::String&'. |
| 65 mojo::Callback<void(mojo::String)> mojo_callback; |
| 66 int calls = 0; |
| 67 RunnableOneMojoStringParam r(&calls); |
| 68 mojo_callback = r; |
| 69 mojo_callback.Run(0); |
| 70 EXPECT_EQ(1, calls); |
| 71 |
| 72 base::Callback<void(const mojo::String&)> base_callback = |
| 73 base::Bind(&RunnableOneMojoStringParam::Run, base::Unretained(&r)); |
| 74 mojo_callback = base_callback; |
| 75 mojo_callback.Run(0); |
| 76 EXPECT_EQ(2, calls); |
| 77 } |
| 78 |
| 79 using ExampleMoveOnlyType = mojo::Map<int, int>; |
| 80 |
| 81 struct RunnableOneMoveOnlyParam { |
| 82 explicit RunnableOneMoveOnlyParam(int* calls) : calls(calls) {} |
| 83 |
| 84 void Run(ExampleMoveOnlyType m) const { (*calls)++; } |
| 85 int* calls; |
| 86 }; |
| 87 |
| 88 TEST(CallbackBindingTest, BaseBindToMoveOnlyParam) { |
| 89 mojo::Callback<void(ExampleMoveOnlyType)> mojo_callback; |
| 90 int calls = 0; |
| 91 RunnableOneMoveOnlyParam r(&calls); |
| 92 mojo_callback = r; |
| 93 ExampleMoveOnlyType m; |
| 94 mojo_callback.Run(m.Clone()); |
| 95 EXPECT_EQ(1, calls); |
| 96 |
| 97 base::Callback<void(ExampleMoveOnlyType)> base_callback = |
| 98 base::Bind(&RunnableOneMoveOnlyParam::Run, base::Unretained(&r)); |
| 99 mojo_callback = base_callback; |
| 100 mojo_callback.Run(m.Clone()); |
| 101 EXPECT_EQ(2, calls); |
| 102 } |
| 103 |
| 104 } // namespace |
OLD | NEW |