Index: tests/RefCntTest.cpp |
diff --git a/tests/RefCntTest.cpp b/tests/RefCntTest.cpp |
index 8914ccff49a092fc2ca8d337cf80a1f9090fb15a..f5345b6a54162354d782bf5466af19f4f1e83e1e 100644 |
--- a/tests/RefCntTest.cpp |
+++ b/tests/RefCntTest.cpp |
@@ -290,3 +290,21 @@ static sk_sp<FooAbstract> make_foo() { |
DEF_TEST(sk_make_sp, r) { |
auto x = make_foo(); |
} |
+ |
+// Test that reset() "adopts" ownership from the caller, even if we are given the same ptr twice |
+// |
+DEF_TEST(sk_sp_reset, r) { |
+ SkRefCnt* rc = new SkRefCnt; |
+ REPORTER_ASSERT(r, rc->unique()); |
+ |
+ sk_sp<SkRefCnt> sp; |
+ sp.reset(rc); |
+ // We have transfered our ownership over to sp |
+ REPORTER_ASSERT(r, rc->unique()); |
+ |
+ rc->ref(); // now "rc" is also an owner |
+ REPORTER_ASSERT(r, !rc->unique()); |
+ |
+ sp.reset(rc); // this should transfer our ownership over to sp |
+ REPORTER_ASSERT(r, rc->unique()); |
+} |