Bug 1362910. P3 - add a gtest to test move-only types with MozPromise.
MozReview-Commit-ID: 5LP7POyxNt3
--- a/dom/media/gtest/TestMozPromise.cpp
+++ b/dom/media/gtest/TestMozPromise.cpp
@@ -309,9 +309,42 @@ TEST(MozPromise, ResolveOrRejectValue)
// IsResolve() should remain true after Move().
UniquePtr<int> i = Move(val.ResolveValue());
EXPECT_EQ(87, *i);
EXPECT_TRUE(val.IsResolve());
EXPECT_EQ(val.ResolveValue().get(), nullptr);
}
+TEST(MozPromise, MoveOnlyType)
+{
+ using MyPromise = MozPromise<UniquePtr<int>, bool, true>;
+ using RRValue = MyPromise::ResolveOrRejectValue;
+
+ AutoTaskQueue atq;
+ RefPtr<TaskQueue> queue = atq.Queue();
+
+ MyPromise::CreateAndResolve(MakeUnique<int>(87), __func__)
+ ->Then(queue, __func__,
+ [](UniquePtr<int> aVal) {
+ EXPECT_EQ(87, *aVal);
+ },
+ []() { EXPECT_TRUE(false); });
+
+ MyPromise::CreateAndResolve(MakeUnique<int>(87), __func__)
+ ->Then(queue, __func__,
+ [queue](RRValue&& aVal) {
+ EXPECT_FALSE(aVal.IsNothing());
+ EXPECT_TRUE(aVal.IsResolve());
+ EXPECT_FALSE(aVal.IsReject());
+ EXPECT_EQ(87, *aVal.ResolveValue());
+
+ // Move() shouldn't change the resolve/reject state of aVal.
+ RRValue val = Move(aVal);
+ EXPECT_TRUE(aVal.IsResolve());
+ EXPECT_EQ(nullptr, aVal.ResolveValue().get());
+ EXPECT_EQ(87, *val.ResolveValue());
+
+ queue->BeginShutdown();
+ });
+}
+
#undef DO_FAIL