} | } | ||||
TEST_CASE("deleter called on destruction", "[ScopeExit]") | |||||
TEST_CASE("exit function called on destruction", "[ScopeExit]") | |||||
{ | { | ||||
REQUIRE_CALL(m, deleter()); | REQUIRE_CALL(m, deleter()); | ||||
auto guard = sr::make_scope_exit(deleter); | auto guard = sr::make_scope_exit(deleter); | ||||
static_cast<void>(guard); | static_cast<void>(guard); | ||||
} | } | ||||
TEST_CASE("deleter lambda called on destruction", "[ScopeExit]") | |||||
TEST_CASE("exit function lambda called on destruction", "[ScopeExit]") | |||||
{ | { | ||||
CallMock cm; | CallMock cm; | ||||
REQUIRE_CALL(cm, deleter()); | REQUIRE_CALL(cm, deleter()); | ||||
static_cast<void>(guard); | static_cast<void>(guard); | ||||
} | } | ||||
TEST_CASE("deleter called and rethrow on copy exception", "[ScopeExit]") | |||||
TEST_CASE("exit function called and rethrow on copy exception", "[ScopeExit]") | |||||
{ | { | ||||
REQUIRE_THROWS([] { | REQUIRE_THROWS([] { | ||||
const ThrowOnCopyMock noMove; | const ThrowOnCopyMock noMove; | ||||
}()); | }()); | ||||
} | } | ||||
TEST_CASE("deleter is not called if released", "[ScopeExit]") | |||||
TEST_CASE("exit function is not called if released", "[ScopeExit]") | |||||
{ | { | ||||
REQUIRE_CALL(m, deleter()).TIMES(0); | REQUIRE_CALL(m, deleter()).TIMES(0); | ||||
auto guard = sr::make_scope_exit(deleter); | auto guard = sr::make_scope_exit(deleter); |
} | } | ||||
TEST_CASE("deleter called on destruction", "[ScopeFail]") | |||||
TEST_CASE("exit function called on destruction", "[ScopeFail]") | |||||
{ | { | ||||
REQUIRE_CALL(m, deleter()).TIMES(0); | REQUIRE_CALL(m, deleter()).TIMES(0); | ||||
auto guard = sr::make_scope_fail(deleter); | auto guard = sr::make_scope_fail(deleter); | ||||
static_cast<void>(guard); | static_cast<void>(guard); | ||||
} | } | ||||
TEST_CASE("deleter lambda called on destruction", "[ScopeFail]") | |||||
TEST_CASE("exit function lambda called on destruction", "[ScopeFail]") | |||||
{ | { | ||||
CallMock cm; | CallMock cm; | ||||
REQUIRE_CALL(cm, deleter()).TIMES(0); | REQUIRE_CALL(cm, deleter()).TIMES(0); | ||||
static_cast<void>(guard); | static_cast<void>(guard); | ||||
} | } | ||||
TEST_CASE("deleter called and rethrow on copy exception", "[ScopeFail]") | |||||
TEST_CASE("exit function called and rethrow on copy exception", "[ScopeFail]") | |||||
{ | { | ||||
REQUIRE_THROWS([] { | REQUIRE_THROWS([] { | ||||
const ThrowOnCopyMock noMove; | const ThrowOnCopyMock noMove; | ||||
}()); | }()); | ||||
} | } | ||||
TEST_CASE("deleter is not called if released", "[ScopeFail]") | |||||
TEST_CASE("exit function is not called if released", "[ScopeFail]") | |||||
{ | { | ||||
REQUIRE_CALL(m, deleter()).TIMES(0); | REQUIRE_CALL(m, deleter()).TIMES(0); | ||||
auto guard = sr::make_scope_fail(deleter); | auto guard = sr::make_scope_fail(deleter); | ||||
static_cast<void>(guard); | static_cast<void>(guard); | ||||
} | } | ||||
TEST_CASE("deleter called on exception", "[ScopeFail]") | |||||
TEST_CASE("exit function called on exception", "[ScopeFail]") | |||||
{ | { | ||||
try | try | ||||
{ | { | ||||
} | } | ||||
} | } | ||||
TEST_CASE("deleter not called on pending exception", "[ScopeFail]") | |||||
TEST_CASE("exit function not called on pending exception", "[ScopeFail]") | |||||
{ | { | ||||
try | try | ||||
{ | { |
} | } | ||||
TEST_CASE("deleter called on destruction", "[ScopeSuccess]") | |||||
TEST_CASE("exit function called on destruction", "[ScopeSuccess]") | |||||
{ | { | ||||
REQUIRE_CALL(m, deleter()); | REQUIRE_CALL(m, deleter()); | ||||
auto guard = sr::make_scope_success(deleter); | auto guard = sr::make_scope_success(deleter); | ||||
static_cast<void>(guard); | static_cast<void>(guard); | ||||
} | } | ||||
TEST_CASE("deleter lambda called on destruction", "[ScopeSuccess]") | |||||
TEST_CASE("exit function lambda called on destruction", "[ScopeSuccess]") | |||||
{ | { | ||||
CallMock cm; | CallMock cm; | ||||
REQUIRE_CALL(cm, deleter()); | REQUIRE_CALL(cm, deleter()); | ||||
static_cast<void>(guard); | static_cast<void>(guard); | ||||
} | } | ||||
TEST_CASE("deleter not called and rethrow on copy exception", "[ScopeSuccess]") | |||||
TEST_CASE("exit function not called and rethrow on copy exception", "[ScopeSuccess]") | |||||
{ | { | ||||
REQUIRE_THROWS([] { | REQUIRE_THROWS([] { | ||||
const ThrowOnCopyMock noMove; | const ThrowOnCopyMock noMove; | ||||
}()); | }()); | ||||
} | } | ||||
TEST_CASE("deleter is not called if released", "[ScopeSuccess]") | |||||
TEST_CASE("exit function is not called if released", "[ScopeSuccess]") | |||||
{ | { | ||||
REQUIRE_CALL(m, deleter()).TIMES(0); | REQUIRE_CALL(m, deleter()).TIMES(0); | ||||
auto guard = sr::make_scope_success(deleter); | auto guard = sr::make_scope_success(deleter); | ||||
static_cast<void>(guard); | static_cast<void>(guard); | ||||
} | } | ||||
TEST_CASE("deleter not called on exception", "[ScopeFail]") | |||||
TEST_CASE("exit function not called on exception", "[ScopeFail]") | |||||
{ | { | ||||
try | try | ||||
{ | { | ||||
} | } | ||||
} | } | ||||
TEST_CASE("deleter called on pending exception", "[ScopeFail]") | |||||
TEST_CASE("exit function called on pending exception", "[ScopeFail]") | |||||
{ | { | ||||
try | try | ||||
{ | { |