X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2Ftest%2FScopeGuardTest.cpp;h=93507da2d55aa5fb9873bbe3853eeacf0699e153;hb=a3bd593ad9374cd3a1db31066874b9bad1cf74b4;hp=790484f9eff5314b548a8de0c0d0888d6ead425c;hpb=321542683a01c3f334047531e9b487f047129775;p=folly.git diff --git a/folly/test/ScopeGuardTest.cpp b/folly/test/ScopeGuardTest.cpp index 790484f9..93507da2 100644 --- a/folly/test/ScopeGuardTest.cpp +++ b/folly/test/ScopeGuardTest.cpp @@ -17,7 +17,6 @@ #include #include -#include #include #include @@ -291,8 +290,21 @@ TEST(ScopeGuard, TEST_SCOPE_SUCCESS_THROW) { EXPECT_THROW(lambda(), std::runtime_error); } -int main(int argc, char** argv) { - testing::InitGoogleTest(&argc, argv); - gflags::ParseCommandLineFlags(&argc, &argv, true); - return RUN_ALL_TESTS(); +TEST(ScopeGuard, TEST_THROWING_CLEANUP_ACTION) { + struct ThrowingCleanupAction { + explicit ThrowingCleanupAction(int& scopeExitExecuted) + : scopeExitExecuted_(scopeExitExecuted) {} + ThrowingCleanupAction(const ThrowingCleanupAction& other) + : scopeExitExecuted_(other.scopeExitExecuted_) { + throw std::runtime_error("whoa"); + } + void operator()() { ++scopeExitExecuted_; } + + private: + int& scopeExitExecuted_; + }; + int scopeExitExecuted = 0; + ThrowingCleanupAction onExit(scopeExitExecuted); + EXPECT_THROW(makeGuard(onExit), std::runtime_error); + EXPECT_EQ(scopeExitExecuted, 1); }