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); |
+ EXPECT_NE(p2, p1); |
+} |
+ |
+TEST(RefCountedUnitTest, ConvertibleEquality) { |
+ 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); |
+} |