Chromium Code Reviews| Index: webrtc/base/callback_unittest.cc |
| diff --git a/webrtc/base/callback_unittest.cc b/webrtc/base/callback_unittest.cc |
| index 66c939140ee2ef9e99e93416c2720819f204e105..7615e6ae2437545d68c28d0a459ef7d593db50e7 100644 |
| --- a/webrtc/base/callback_unittest.cc |
| +++ b/webrtc/base/callback_unittest.cc |
| @@ -8,9 +8,11 @@ |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| +#include <webrtc/base/keep_ref_until_done.h> |
|
magjed_webrtc
2015/11/30 15:44:34
This is not sorted anymore. Did you pass presubmit
perkj_webrtc
2015/11/30 16:41:31
Done.
|
| #include "webrtc/base/bind.h" |
| #include "webrtc/base/callback.h" |
| #include "webrtc/base/gunit.h" |
| +#include "webrtc/base/refcount.h" |
| namespace rtc { |
| @@ -26,6 +28,21 @@ struct BindTester { |
| int b(int x) const { return x * x; } |
| }; |
| +class RefCountedBindTester : public RefCountInterface { |
| + public: |
| + RefCountedBindTester() : count_(0) {} |
| + int AddRef() const override { |
| + return ++count_; |
| + } |
| + int Release() const { |
| + return --count_; |
| + } |
| + int RefCount() const { return count_; } |
| + |
| + private: |
| + mutable int count_; |
| +}; |
| + |
| } // namespace |
| TEST(CallbackTest, VoidReturn) { |
| @@ -78,4 +95,32 @@ TEST(CallbackTest, WithBind) { |
| EXPECT_EQ(25, cb1()); |
| } |
| +TEST(KeepRefUntilDoneTest, simple) { |
| + RefCountedBindTester t; |
| + EXPECT_EQ(0, t.RefCount()); |
| + { |
| + Callback0<void> cb = KeepRefUntilDone(&t); |
| + EXPECT_EQ(1, t.RefCount()); |
| + cb(); |
| + EXPECT_EQ(1, t.RefCount()); |
| + cb(); |
| + EXPECT_EQ(1, t.RefCount()); |
| + } |
| + EXPECT_EQ(0, t.RefCount()); |
| +} |
| + |
| +TEST(KeepRefUntilDoneTest, copy) { |
| + RefCountedBindTester t; |
| + EXPECT_EQ(0, t.RefCount()); |
| + Callback0<void> cb2; |
| + { |
| + Callback0<void> cb = KeepRefUntilDone(&t); |
| + EXPECT_EQ(1, t.RefCount()); |
| + cb2 = cb; |
| + } |
| + EXPECT_EQ(1, t.RefCount()); |
| + cb2 = Callback0<void>(); |
| + EXPECT_EQ(0, t.RefCount()); |
| +} |
| + |
| } // namespace rtc |