Selaa lähdekoodia

Tests refactored (#76).

main
offa 7 vuotta sitten
vanhempi
commit
b1ed444f1f
2 muutettua tiedostoa jossa 71 lisäystä ja 115 poistoa
  1. +69
    -6
      test/CallMocks.h
  2. +2
    -109
      test/UniqueResourceTest.cpp

+ 69
- 6
test/CallMocks.h Näytä tiedosto



namespace mock namespace mock
{ {
using Handle = int;
using PtrHandle = std::add_pointer_t<Handle>;


struct CallMock struct CallMock
{ {
MAKE_MOCK0(deleter, void()); MAKE_MOCK0(deleter, void());
MAKE_MOCK1(deleter, void(Handle));
}; };




struct ThrowOnCopyMock struct ThrowOnCopyMock
{ {
ThrowOnCopyMock() { }
ThrowOnCopyMock()
{
}


ThrowOnCopyMock(const ThrowOnCopyMock&) ThrowOnCopyMock(const ThrowOnCopyMock&)
{ {
throw std::exception{}; throw std::exception{};
} }



MAKE_CONST_MOCK0(deleter, void()); MAKE_CONST_MOCK0(deleter, void());


void operator()() const void operator()() const


struct NotNothrowMoveMock struct NotNothrowMoveMock
{ {
NotNothrowMoveMock(CallMock* m) : m_mock(m) { }
NotNothrowMoveMock(const NotNothrowMoveMock& other) : m_mock(other.m_mock) { }
NotNothrowMoveMock(NotNothrowMoveMock&& other) noexcept(false) : m_mock(other.m_mock) { }
NotNothrowMoveMock(CallMock* m) : m_mock(m)
{
}

NotNothrowMoveMock(const NotNothrowMoveMock& other) : m_mock(other.m_mock)
{
}

NotNothrowMoveMock(NotNothrowMoveMock&& other) noexcept(false) : m_mock(other.m_mock)
{
}



void operator()() const void operator()() const
{ {
throw "Not implemented"; throw "Not implemented";
} }


CallMock* m_mock;


CallMock* m_mock;
}; };




}
struct ConditialThrowOnCopyMock
{
explicit ConditialThrowOnCopyMock(Handle h, bool shouldThrow) : m_handle(h),
m_shouldThrow(shouldThrow)
{
}

ConditialThrowOnCopyMock(const ConditialThrowOnCopyMock& other) : m_handle(other.m_handle),
m_shouldThrow(other.m_shouldThrow)
{
if( m_shouldThrow == true )
{
throw std::exception{};
}
}

ConditialThrowOnCopyMock(ConditialThrowOnCopyMock&&) = default;

ConditialThrowOnCopyMock& operator=(const ConditialThrowOnCopyMock& other)
{
if( &other != this )
{
m_handle = other.m_handle;
m_shouldThrow = other.m_shouldThrow;

if( m_shouldThrow == true )
{
throw std::exception{};
}
}

return *this;
}


ConditialThrowOnCopyMock& operator=(ConditialThrowOnCopyMock&&) = default;




Handle m_handle;
bool m_shouldThrow;
};


struct CopyMock
{
CopyMock() {}
CopyMock(const CopyMock&) { }
};

}


+ 2
- 109
test/UniqueResourceTest.cpp Näytä tiedosto

*/ */


#include "unique_resource.h" #include "unique_resource.h"
#include "CallMocks.h"
#include <catch.hpp> #include <catch.hpp>
#include <trompeloeil.hpp> #include <trompeloeil.hpp>


using namespace mock;
using namespace trompeloeil; using namespace trompeloeil;


namespace namespace
{ {
using Handle = int;
using PtrHandle = std::add_pointer_t<Handle>;


struct CallMock
{
MAKE_MOCK1(deleter, void(Handle));
};


struct ThrowOnCopyMock
{
ThrowOnCopyMock()
{
}

ThrowOnCopyMock(const ThrowOnCopyMock&) noexcept(false)
{
throw std::exception{};
}

ThrowOnCopyMock(ThrowOnCopyMock&&) = delete;


ThrowOnCopyMock& operator=(const ThrowOnCopyMock&) noexcept(false)
{
throw std::exception{};
}

ThrowOnCopyMock& operator=(ThrowOnCopyMock&&) = delete;

};

struct NotNothrowMoveMock
{
NotNothrowMoveMock(CallMock* mo) : m_mock(mo)
{
}

NotNothrowMoveMock(const NotNothrowMoveMock& other) : m_mock(other.m_mock)
{
throw std::exception{};
}

NotNothrowMoveMock(NotNothrowMoveMock&& other) noexcept(false) : m_mock(other.m_mock)
{
}


NotNothrowMoveMock& operator=(const NotNothrowMoveMock&)
{
throw "Not implemented";
}

NotNothrowMoveMock& operator=(NotNothrowMoveMock&&)
{
throw "Not implemented";
}

CallMock* m_mock;
};

struct ConditialThrowOnCopyMock
{
explicit ConditialThrowOnCopyMock(Handle h, bool shouldThrow) : m_handle(h), m_shouldThrow(shouldThrow)
{
}

ConditialThrowOnCopyMock(const ConditialThrowOnCopyMock& other) : m_handle(other.m_handle), m_shouldThrow(other.m_shouldThrow)
{
if( m_shouldThrow == true )
{
throw std::exception{};
}
}

ConditialThrowOnCopyMock(ConditialThrowOnCopyMock&&) = default;

ConditialThrowOnCopyMock& operator=(const ConditialThrowOnCopyMock& other)
{
if( &other != this )
{
m_handle = other.m_handle;
m_shouldThrow = other.m_shouldThrow;

if( m_shouldThrow == true )
{
throw std::exception{};
}
}

return *this;
}

ConditialThrowOnCopyMock& operator=(ConditialThrowOnCopyMock&&) = default;

Handle m_handle;
bool m_shouldThrow;
};

struct CopyMock
{
CopyMock() {}
CopyMock(const CopyMock&) { }
};



CallMock m; CallMock m;


void deleter(Handle h) void deleter(Handle h)
{ {
m.deleter(h); m.deleter(h);
} }

} }


TEST_CASE("construction with move", "[UniqueResource]") TEST_CASE("construction with move", "[UniqueResource]")

Loading…
Peruuta
Tallenna