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..876206ac517b0680ac6c947de9231c8fbbe89ddd 100644 |
| --- a/webrtc/base/callback_unittest.cc |
| +++ b/webrtc/base/callback_unittest.cc |
| @@ -11,6 +11,8 @@ |
| #include "webrtc/base/bind.h" |
| #include "webrtc/base/callback.h" |
| #include "webrtc/base/gunit.h" |
| +#include "webrtc/base/refcount.h" |
| +#include "webrtc/base/release_when_done_callback.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(ReleaseWhenDoneCallbackTest, simple) { |
| + RefCountedBindTester t; |
| + EXPECT_EQ(0, t.RefCount()); |
| + { |
| + Callback0<void> cb = ReleaseWhenDoneCallback(&t); |
| + EXPECT_EQ(1, t.RefCount()); |
| + cb(); |
| + EXPECT_EQ(1, t.RefCount()); |
| + cb(); |
| + EXPECT_EQ(1, t.RefCount()); |
| + } |
| + EXPECT_EQ(0, t.RefCount()); |
| +} |
| + |
| +TEST(ReleaseWhenDoneCallbackTest, copy) { |
| + RefCountedBindTester t; |
| + EXPECT_EQ(0, t.RefCount()); |
| + Callback0<void> cb2; |
| + { |
| + Callback0<void> cb = ReleaseWhenDoneCallback(&t); |
| + EXPECT_EQ(1, t.RefCount()); |
| + cb2 = cb; |
|
tommi
2015/11/30 08:45:51
add EXPECT_EQ(2, t.RefCount()); ?
perkj_webrtc
2015/11/30 12:54:19
Actually no - it is still one. See callback. Each
tommi
2015/11/30 13:05:01
Brilliant
|
| + } |
| + EXPECT_EQ(1, t.RefCount()); |
| + cb2 = Callback0<void>(); |
| + EXPECT_EQ(0, t.RefCount()); |
| +} |
| + |
| } // namespace rtc |