summaryrefslogtreecommitdiff
path: root/Tools/TestWebKitAPI/Tests/WTF/RefPtr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/TestWebKitAPI/Tests/WTF/RefPtr.cpp')
-rw-r--r--Tools/TestWebKitAPI/Tests/WTF/RefPtr.cpp58
1 files changed, 49 insertions, 9 deletions
diff --git a/Tools/TestWebKitAPI/Tests/WTF/RefPtr.cpp b/Tools/TestWebKitAPI/Tests/WTF/RefPtr.cpp
index bc1e1e484..172efa762 100644
--- a/Tools/TestWebKitAPI/Tests/WTF/RefPtr.cpp
+++ b/Tools/TestWebKitAPI/Tests/WTF/RefPtr.cpp
@@ -26,6 +26,8 @@
#include "config.h"
#include "RefLogger.h"
+#include <wtf/NeverDestroyed.h>
+#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
namespace TestWebKitAPI {
@@ -69,7 +71,7 @@ TEST(WTF_RefPtr, Basic)
{
RefPtr<RefLogger> p1 = &a;
- RefPtr<RefLogger> p2 = std::move(p1);
+ RefPtr<RefLogger> p2 = WTFMove(p1);
ASSERT_EQ(nullptr, p1.get());
ASSERT_EQ(&a, p2.get());
}
@@ -77,7 +79,7 @@ TEST(WTF_RefPtr, Basic)
{
RefPtr<RefLogger> p1 = &a;
- RefPtr<RefLogger> p2(std::move(p1));
+ RefPtr<RefLogger> p2(WTFMove(p1));
ASSERT_EQ(nullptr, p1.get());
ASSERT_EQ(&a, p2.get());
}
@@ -93,7 +95,7 @@ TEST(WTF_RefPtr, Basic)
{
RefPtr<DerivedRefLogger> p1 = &a;
- RefPtr<RefLogger> p2 = std::move(p1);
+ RefPtr<RefLogger> p2 = WTFMove(p1);
ASSERT_EQ(nullptr, p1.get());
ASSERT_EQ(&a, p2.get());
}
@@ -102,7 +104,7 @@ TEST(WTF_RefPtr, Basic)
{
RefPtr<RefLogger> ptr(&a);
ASSERT_EQ(&a, ptr.get());
- ptr.clear();
+ ptr = nullptr;
ASSERT_EQ(nullptr, ptr.get());
}
ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
@@ -120,8 +122,8 @@ TEST(WTF_RefPtr, AssignPassRefToRefPtr)
{
DerivedRefLogger a("a");
{
- PassRef<RefLogger> passRef(a);
- RefPtr<RefLogger> ptr = std::move(passRef);
+ Ref<RefLogger> passRef(a);
+ RefPtr<RefLogger> ptr = WTFMove(passRef);
ASSERT_EQ(&a, ptr.get());
ptr.release();
ASSERT_EQ(nullptr, ptr.get());
@@ -204,7 +206,7 @@ TEST(WTF_RefPtr, Assignment)
ASSERT_EQ(&a, p1.get());
ASSERT_EQ(&b, p2.get());
log() << "| ";
- p1 = std::move(p2);
+ p1 = WTFMove(p2);
ASSERT_EQ(&b, p1.get());
ASSERT_EQ(nullptr, p2.get());
log() << "| ";
@@ -250,7 +252,7 @@ TEST(WTF_RefPtr, Assignment)
ASSERT_EQ(&a, p1.get());
ASSERT_EQ(&c, p2.get());
log() << "| ";
- p1 = std::move(p2);
+ p1 = WTFMove(p2);
ASSERT_EQ(&c, p1.get());
ASSERT_EQ(nullptr, p2.get());
log() << "| ";
@@ -270,7 +272,15 @@ TEST(WTF_RefPtr, Assignment)
{
RefPtr<RefLogger> ptr(&a);
ASSERT_EQ(&a, ptr.get());
- ptr = std::move(ptr);
+#if COMPILER(CLANG)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunknown-pragmas"
+#pragma clang diagnostic ignored "-Wself-move"
+#endif
+ ptr = WTFMove(ptr);
+#if COMPILER(CLANG)
+#pragma clang diagnostic pop
+#endif
ASSERT_EQ(&a, ptr.get());
}
ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
@@ -395,4 +405,34 @@ TEST(WTF_RefPtr, ReturnValue)
ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
}
+
+struct ConstRefCounted : RefCounted<ConstRefCounted> {
+ static Ref<ConstRefCounted> create() { return adoptRef(*new ConstRefCounted); }
+};
+
+const ConstRefCounted& returnConstRefCountedRef()
+{
+ static NeverDestroyed<ConstRefCounted> instance;
+ return instance.get();
+}
+ConstRefCounted& returnRefCountedRef()
+{
+ static NeverDestroyed<ConstRefCounted> instance;
+ return instance.get();
+}
+
+TEST(WTF_RefPtr, Const)
+{
+ // This test passes if it compiles without an error.
+ auto a = ConstRefCounted::create();
+ Ref<const ConstRefCounted> b = WTFMove(a);
+ RefPtr<const ConstRefCounted> c = b.ptr();
+ Ref<const ConstRefCounted> d = returnConstRefCountedRef();
+ RefPtr<const ConstRefCounted> e = &returnConstRefCountedRef();
+ RefPtr<ConstRefCounted> f = ConstRefCounted::create();
+ RefPtr<const ConstRefCounted> g = f;
+ RefPtr<const ConstRefCounted> h(f);
+ Ref<const ConstRefCounted> i(returnRefCountedRef());
+}
+
} // namespace TestWebKitAPI