Explorar el Código

Test updated to use ctor directly.

main
offa hace 7 años
padre
commit
47f5e75fd8
Se han modificado 1 ficheros con 10 adiciones y 10 borrados
  1. +10
    -10
      test/ScopeSuccessTest.cpp

+ 10
- 10
test/ScopeSuccessTest.cpp Ver fichero

TEST_CASE("exit function 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::scope_success{deleter};
static_cast<void>(guard); static_cast<void>(guard);
} }


{ {
CallMock cm; CallMock cm;
REQUIRE_CALL(cm, deleter()); REQUIRE_CALL(cm, deleter());
auto guard = sr::make_scope_success([&cm] { cm.deleter(); });
auto guard = sr::scope_success{[&cm] { cm.deleter(); }};
static_cast<void>(guard); static_cast<void>(guard);
} }


REQUIRE_THROWS([] { REQUIRE_THROWS([] {
const ThrowOnCopyMock noMove; const ThrowOnCopyMock noMove;
REQUIRE_CALL(noMove, deleter()); REQUIRE_CALL(noMove, deleter());
sr::scope_success<decltype(noMove)> guard{noMove};
sr::scope_success guard{noMove};
}()); }());
} }


TEST_CASE("exit function 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::scope_success{deleter};
guard.release(); guard.release();
} }


TEST_CASE("move releases moved-from object", "[ScopeSuccess]") TEST_CASE("move releases moved-from object", "[ScopeSuccess]")
{ {
REQUIRE_CALL(m, deleter()); REQUIRE_CALL(m, deleter());
auto movedFrom = sr::make_scope_success(deleter);
auto movedFrom = sr::scope_success{deleter};
auto guard = std::move(movedFrom); auto guard = std::move(movedFrom);
static_cast<void>(guard); static_cast<void>(guard);
} }
CallMock mock; CallMock mock;
const NotNothrowMoveMock notNothrow{&mock}; const NotNothrowMoveMock notNothrow{&mock};
REQUIRE_CALL(mock, deleter()); REQUIRE_CALL(mock, deleter());
sr::scope_success<decltype(notNothrow)> movedFrom{notNothrow};
sr::scope_success movedFrom{notNothrow};
auto guard = std::move(movedFrom); auto guard = std::move(movedFrom);
} }


TEST_CASE("move transfers state", "[ScopeSuccess]") TEST_CASE("move transfers state", "[ScopeSuccess]")
{ {
REQUIRE_CALL(m, deleter()); REQUIRE_CALL(m, deleter());
auto movedFrom = sr::make_scope_success(deleter);
auto movedFrom = sr::scope_success{deleter};
auto guard = std::move(movedFrom); auto guard = std::move(movedFrom);
static_cast<void>(guard); static_cast<void>(guard);
} }
TEST_CASE("move transfers state if released", "[ScopeSuccess]") TEST_CASE("move transfers state if released", "[ScopeSuccess]")
{ {
REQUIRE_CALL(m, deleter()).TIMES(0); REQUIRE_CALL(m, deleter()).TIMES(0);
auto movedFrom = sr::make_scope_success(deleter);
auto movedFrom = sr::scope_success{deleter};
movedFrom.release(); movedFrom.release();
auto guard = std::move(movedFrom); auto guard = std::move(movedFrom);
static_cast<void>(guard); static_cast<void>(guard);
{ {
try try
{ {
auto guard = sr::make_scope_success(deleter);
auto guard = sr::scope_success{deleter};
static_cast<void>(guard); static_cast<void>(guard);
throw 3; throw 3;
} }
catch( ... ) catch( ... )
{ {
REQUIRE_CALL(m, deleter()); REQUIRE_CALL(m, deleter());
auto guard = sr::make_scope_success(deleter);
auto guard = sr::scope_success{deleter};
static_cast<void>(guard); static_cast<void>(guard);
} }
} }

Cargando…
Cancelar
Guardar