|
|
@@ -22,8 +22,6 @@ |
|
|
|
#include <catch.hpp> |
|
|
|
#include <trompeloeil.hpp> |
|
|
|
|
|
|
|
#include <type_traits> |
|
|
|
|
|
|
|
using namespace trompeloeil; |
|
|
|
|
|
|
|
namespace |
|
|
@@ -37,13 +35,6 @@ namespace |
|
|
|
MAKE_MOCK1(deleter, void(Handle)); |
|
|
|
}; |
|
|
|
|
|
|
|
CallMock m; |
|
|
|
|
|
|
|
void deleter(Handle h) |
|
|
|
{ |
|
|
|
m.deleter(h); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
struct ThrowOnCopyMock |
|
|
|
{ |
|
|
@@ -87,14 +78,22 @@ namespace |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
CallMock m; |
|
|
|
|
|
|
|
void deleter(Handle h) |
|
|
|
{ |
|
|
|
m.deleter(h); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
TEST_CASE("construction with move", "[UniqueResource]") |
|
|
|
{ |
|
|
|
REQUIRE_CALL(m, deleter(3)); |
|
|
|
auto guard = sr::make_unique_resource(Handle{3}, deleter); |
|
|
|
static_cast<void>(guard); |
|
|
|
} |
|
|
|
// TODO: Missing constrion with copy successful |
|
|
|
|
|
|
|
TEST_CASE("construction with copy calls deleter and rethrows on failed copy", "[UniqueResource]") |
|
|
|
{ |
|
|
@@ -110,6 +109,7 @@ TEST_CASE("construction with copy calls deleter and rethrows on failed copy", "[ |
|
|
|
|
|
|
|
TEST_CASE("move-construction with move", "[UniqueResource]") |
|
|
|
{ |
|
|
|
REQUIRE_CALL(m, deleter(3)); |
|
|
|
auto movedFrom = sr::make_unique_resource(Handle{3}, deleter); |
|
|
|
auto guard = std::move(movedFrom); |
|
|
|
static_cast<void>(guard); |
|
|
@@ -119,6 +119,7 @@ TEST_CASE("move-construction with move", "[UniqueResource]") |
|
|
|
TEST_CASE("move-construction with copy", "[UniqueResource]") |
|
|
|
{ |
|
|
|
CallMock mock; |
|
|
|
REQUIRE_CALL(mock, deleter(3)); |
|
|
|
const NotNothrowMoveMock notNothrow{&mock}; |
|
|
|
Handle h{3}; |
|
|
|
sr::unique_resource<Handle, decltype(notNothrow)> movedFrom{h, notNothrow}; |
|
|
@@ -128,3 +129,10 @@ TEST_CASE("move-construction with copy", "[UniqueResource]") |
|
|
|
} |
|
|
|
|
|
|
|
// TODO: Implement move assignment |
|
|
|
|
|
|
|
TEST_CASE("deleter called on destruction", "[UniqueResource]") |
|
|
|
{ |
|
|
|
REQUIRE_CALL(m, deleter(3)); |
|
|
|
auto guard = sr::make_unique_resource(Handle{3}, deleter); |
|
|
|
static_cast<void>(guard); |
|
|
|
} |