Bug 1363676. P2 - add a gtest to ensure we don't break ResolveOrRejectValue during refactoring. draft
authorJW Wang <jwwang@mozilla.com>
Wed, 10 May 2017 17:41:08 +0800
changeset 575348 d328237d65d674e1567a7f726a212ad6d5e0f75a
parent 575347 03c098991e9614434525ae133a051fd5964d6758
child 576020 3abce5d5687f9b80f7e8491ff79dd63c7b030a5f
push id58038
push userjwwang@mozilla.com
push dateWed, 10 May 2017 10:03:39 +0000
bugs1363676
milestone55.0a1
Bug 1363676. P2 - add a gtest to ensure we don't break ResolveOrRejectValue during refactoring. MozReview-Commit-ID: A1ftwJMYgGw
dom/media/gtest/TestMozPromise.cpp
--- a/dom/media/gtest/TestMozPromise.cpp
+++ b/dom/media/gtest/TestMozPromise.cpp
@@ -286,9 +286,32 @@ TEST(MozPromise, Chaining)
       }
     }
     // We will hit the assertion if we don't disconnect the leaf Request
     // in the promise chain.
     p->Then(queue, __func__, [] () {}, [] () {})->Track(holder);
   });
 }
 
+TEST(MozPromise, ResolveOrRejectValue)
+{
+  using MyPromise = MozPromise<UniquePtr<int>, bool, false>;
+  using RRValue = MyPromise::ResolveOrRejectValue;
+
+  RRValue val;
+  EXPECT_TRUE(val.IsNothing());
+  EXPECT_FALSE(val.IsResolve());
+  EXPECT_FALSE(val.IsReject());
+
+  val.SetResolve(MakeUnique<int>(87));
+  EXPECT_FALSE(val.IsNothing());
+  EXPECT_TRUE(val.IsResolve());
+  EXPECT_FALSE(val.IsReject());
+  EXPECT_EQ(87, *val.ResolveValue());
+
+  // 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);
+}
+
 #undef DO_FAIL