Chromium Code Reviews| Index: base/memory/ref_counted_unittest.cc |
| diff --git a/base/memory/ref_counted_unittest.cc b/base/memory/ref_counted_unittest.cc |
| index 7e73bde1155db44e11eb2bdf071091782a648ce6..f75cd38f19c86d530237200e37792a2cde9480eb 100644 |
| --- a/base/memory/ref_counted_unittest.cc |
| +++ b/base/memory/ref_counted_unittest.cc |
| @@ -10,9 +10,19 @@ |
| namespace { |
| class SelfAssign : public base::RefCounted<SelfAssign> { |
| + protected: |
| + virtual ~SelfAssign() {} |
| + |
| + private: |
| friend class base::RefCounted<SelfAssign>; |
| +}; |
| + |
| +class Derived : public SelfAssign { |
| + protected: |
| + ~Derived() override {} |
| - ~SelfAssign() {} |
| + private: |
| + friend class base::RefCounted<Derived>; |
| }; |
| class CheckDerivedMemberAccess : public scoped_refptr<SelfAssign> { |
| @@ -72,3 +82,34 @@ TEST(RefCountedUnitTest, ScopedRefPtrToOpaque) { |
| base::TestOpaqueRefCounted(p); |
| base::TestOpaqueRefCounted(q); |
| } |
| + |
| +TEST(RefCountedUnitTest, BooleanTesting) { |
| + scoped_refptr<SelfAssign> p; |
| + EXPECT_FALSE(p); |
| + p = new SelfAssign; |
| + EXPECT_TRUE(p); |
| +} |
| + |
| +TEST(RefCountedUnitTest, Equality) { |
| + scoped_refptr<SelfAssign> p1(new SelfAssign); |
| + scoped_refptr<SelfAssign> p2(new SelfAssign); |
| + |
| + EXPECT_EQ(p1, p1); |
| + EXPECT_EQ(p2, p2); |
| + |
| + EXPECT_NE(p1, p2); |
|
dcheng
2014/11/25 08:44:36
This is primarily to ensure that we're not inadver
|
| + EXPECT_NE(p2, p1); |
| +} |
| + |
| +TEST(RefCountedUnitTest, ConvertibleEquality) { |
|
dcheng
2014/11/25 08:44:36
shared_ptr allows comparisons between convertible
|
| + scoped_refptr<Derived> p1(new Derived); |
| + scoped_refptr<SelfAssign> p2; |
| + |
| + EXPECT_NE(p1, p2); |
| + EXPECT_NE(p2, p1); |
| + |
| + p2 = p1; |
| + |
| + EXPECT_EQ(p1, p2); |
| + EXPECT_EQ(p2, p1); |
| +} |