浏览代码

Tests refactored (#76).

main
offa 7 年前
父节点
当前提交
b1ed444f1f
共有 2 个文件被更改,包括 71 次插入115 次删除
  1. +69
    -6
      test/CallMocks.h
  2. +2
    -109
      test/UniqueResourceTest.cpp

+ 69
- 6
test/CallMocks.h 查看文件

@@ -24,21 +24,29 @@

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


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


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

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


MAKE_CONST_MOCK0(deleter, void());

void operator()() const
@@ -55,9 +63,18 @@ namespace mock

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
{
@@ -74,12 +91,58 @@ namespace mock
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 查看文件

@@ -19,128 +19,21 @@
*/

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

using namespace mock;
using namespace trompeloeil;

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;

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

}

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

正在加载...
取消
保存