Bug Bug 1355739 - Part2: Add a test case by passing a lvalue callable object. draft
authorJames Cheng <jacheng@mozilla.com>
Wed, 12 Apr 2017 16:33:23 +0800
changeset 561237 647c14f3d183dab9c1d3aef273d3b96b2f7cfb38
parent 561110 d2d4217fe7f99a54b1652dcf50a33b648efd65e6
child 623910 3f4213b3ef28afed810495b47dad1a5fdc6a9b73
push id53661
push userbmo:jacheng@mozilla.com
push dateWed, 12 Apr 2017 10:01:11 +0000
bugs1355739
milestone55.0a1
Bug Bug 1355739 - Part2: Add a test case by passing a lvalue callable object. MozReview-Commit-ID: JMltRmDnWFf
mfbt/tests/TestScopeExit.cpp
--- a/mfbt/tests/TestScopeExit.cpp
+++ b/mfbt/tests/TestScopeExit.cpp
@@ -13,38 +13,53 @@ using mozilla::MakeScopeExit;
   do { \
     bool cond = !!(c); \
     MOZ_RELEASE_ASSERT(cond, "Failed assertion: " #c); \
     if (!cond) { \
       return false; \
     } \
   } while (false)
 
+class Functor
+{
+public:
+  MOZ_IMPLICIT Functor(int& aValue) : mValue(aValue) { }
+  int operator()() { return --mValue; }
+
+private:
+  int& mValue;
+};
+
 static bool
 Test()
 {
   int a = 1;
   int b = 1;
-
+  int c = 1;
   {
     a++;
     auto guardA = MakeScopeExit([&] {
       a--;
     });
 
     b++;
     auto guardB = MakeScopeExit([&] {
       b--;
     });
 
     guardB.release();
+
+    c++;
+    Functor lValueFunctor(c);
+    auto guardC = MakeScopeExit(lValueFunctor);
   }
 
   CHECK(a == 1);
   CHECK(b == 2);
+  CHECK(c == 1);
 
   return true;
 }
 
 int
 main()
 {
   if (!Test()) {