| @@ -0,0 +1,85 @@ | |||
| /* | |||
| * Scope Guard | |||
| * Copyright (C) 2017 offa | |||
| * | |||
| * This file is part of Scope Guard. | |||
| * | |||
| * Scope Guard is free software: you can redistribute it and/or modify | |||
| * it under the terms of the GNU General Public License as published by | |||
| * the Free Software Foundation, either version 3 of the License, or | |||
| * (at your option) any later version. | |||
| * | |||
| * Scope Guard is distributed in the hope that it will be useful, | |||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| * GNU General Public License for more details. | |||
| * | |||
| * You should have received a copy of the GNU General Public License | |||
| * along with Scope Guard. If not, see <http://www.gnu.org/licenses/>. | |||
| */ | |||
| #pragma once | |||
| #include <trompeloeil.hpp> | |||
| namespace | |||
| { | |||
| struct CallMock | |||
| { | |||
| MAKE_MOCK0(deleter, void()); | |||
| }; | |||
| struct ThrowOnCopyMock | |||
| { | |||
| ThrowOnCopyMock() { } | |||
| ThrowOnCopyMock(const ThrowOnCopyMock&) | |||
| { | |||
| throw std::exception{}; | |||
| } | |||
| MAKE_CONST_MOCK0(deleter, void()); | |||
| void operator()() const | |||
| { | |||
| this->deleter(); | |||
| } | |||
| ThrowOnCopyMock& operator=(const ThrowOnCopyMock&) | |||
| { | |||
| throw std::exception{}; | |||
| } | |||
| }; | |||
| 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) { } | |||
| void operator()() const | |||
| { | |||
| m_mock->deleter(); | |||
| } | |||
| NotNothrowMoveMock& operator=(const NotNothrowMoveMock&) | |||
| { | |||
| throw "Not implemented"; | |||
| } | |||
| NotNothrowMoveMock& operator=(NotNothrowMoveMock&&) | |||
| { | |||
| throw "Not implemented"; | |||
| } | |||
| CallMock* m_mock; | |||
| }; | |||
| } | |||
| @@ -19,71 +19,15 @@ | |||
| */ | |||
| #include "scope_exit.h" | |||
| #include "CallMocks.h" | |||
| #include <catch.hpp> | |||
| #include <trompeloeil.hpp> | |||
| using namespace trompeloeil; | |||
| namespace | |||
| { | |||
| struct CallMock | |||
| { | |||
| MAKE_MOCK0(deleter, void()); | |||
| }; | |||
| struct ThrowOnCopyMock | |||
| { | |||
| ThrowOnCopyMock() { } | |||
| ThrowOnCopyMock(const ThrowOnCopyMock&) | |||
| { | |||
| throw std::exception{}; | |||
| } | |||
| MAKE_CONST_MOCK0(deleter, void()); | |||
| void operator()() const | |||
| { | |||
| this->deleter(); | |||
| } | |||
| ThrowOnCopyMock& operator=(const ThrowOnCopyMock&) | |||
| { | |||
| throw std::exception{}; | |||
| } | |||
| }; | |||
| 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) { } | |||
| void operator()() const | |||
| { | |||
| m_mock->deleter(); | |||
| } | |||
| NotNothrowMoveMock& operator=(const NotNothrowMoveMock&) | |||
| { | |||
| throw "Not implemented"; | |||
| } | |||
| NotNothrowMoveMock& operator=(NotNothrowMoveMock&&) | |||
| { | |||
| throw "Not implemented"; | |||
| } | |||
| CallMock* m_mock; | |||
| }; | |||
| CallMock m; | |||
| void deleter() | |||
| { | |||
| m.deleter(); | |||
| @@ -113,7 +57,7 @@ TEST_CASE("exit function called and rethrow on copy exception", "[ScopeExit]") | |||
| REQUIRE_CALL(noMove, deleter()); | |||
| sr::scope_exit<decltype(noMove)> guard{noMove}; | |||
| }()); | |||
| }()); | |||
| } | |||
| TEST_CASE("exit function is not called if released", "[ScopeExit]") | |||
| @@ -19,71 +19,15 @@ | |||
| */ | |||
| #include "scope_fail.h" | |||
| #include "CallMocks.h" | |||
| #include <catch.hpp> | |||
| #include <trompeloeil.hpp> | |||
| using namespace trompeloeil; | |||
| namespace | |||
| { | |||
| struct CallMock | |||
| { | |||
| MAKE_MOCK0(deleter, void()); | |||
| }; | |||
| struct ThrowOnCopyMock | |||
| { | |||
| ThrowOnCopyMock() { } | |||
| ThrowOnCopyMock(const ThrowOnCopyMock&) | |||
| { | |||
| throw std::exception{}; | |||
| } | |||
| MAKE_CONST_MOCK0(deleter, void()); | |||
| void operator()() const | |||
| { | |||
| this->deleter(); | |||
| } | |||
| ThrowOnCopyMock& operator=(const ThrowOnCopyMock&) | |||
| { | |||
| throw std::exception{}; | |||
| } | |||
| }; | |||
| 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) { } | |||
| void operator()() const | |||
| { | |||
| m_mock->deleter(); | |||
| } | |||
| NotNothrowMoveMock& operator=(const NotNothrowMoveMock&) | |||
| { | |||
| throw "Not implemented"; | |||
| } | |||
| NotNothrowMoveMock& operator=(NotNothrowMoveMock&&) | |||
| { | |||
| throw "Not implemented"; | |||
| } | |||
| CallMock* m_mock; | |||
| }; | |||
| CallMock m; | |||
| void deleter() | |||
| { | |||
| m.deleter(); | |||
| @@ -113,7 +57,7 @@ TEST_CASE("exit function called and rethrow on copy exception", "[ScopeFail]") | |||
| REQUIRE_CALL(noMove, deleter()); | |||
| sr::scope_fail<decltype(noMove)> guard{noMove}; | |||
| }()); | |||
| }()); | |||
| } | |||
| TEST_CASE("exit function is not called if released", "[ScopeFail]") | |||
| @@ -19,71 +19,15 @@ | |||
| */ | |||
| #include "scope_success.h" | |||
| #include "CallMocks.h" | |||
| #include <catch.hpp> | |||
| #include <trompeloeil.hpp> | |||
| using namespace trompeloeil; | |||
| namespace | |||
| { | |||
| struct CallMock | |||
| { | |||
| MAKE_MOCK0(deleter, void()); | |||
| }; | |||
| struct ThrowOnCopyMock | |||
| { | |||
| ThrowOnCopyMock() { } | |||
| ThrowOnCopyMock(const ThrowOnCopyMock&) | |||
| { | |||
| throw std::exception{}; | |||
| } | |||
| MAKE_CONST_MOCK0(deleter, void()); | |||
| void operator()() const | |||
| { | |||
| this->deleter(); | |||
| } | |||
| ThrowOnCopyMock& operator=(const ThrowOnCopyMock&) | |||
| { | |||
| throw std::exception{}; | |||
| } | |||
| }; | |||
| 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) { } | |||
| void operator()() const | |||
| { | |||
| m_mock->deleter(); | |||
| } | |||
| NotNothrowMoveMock& operator=(const NotNothrowMoveMock&) | |||
| { | |||
| throw "Not implemented"; | |||
| } | |||
| NotNothrowMoveMock& operator=(NotNothrowMoveMock&&) | |||
| { | |||
| throw "Not implemented"; | |||
| } | |||
| CallMock* m_mock; | |||
| }; | |||
| CallMock m; | |||
| void deleter() | |||
| { | |||
| m.deleter(); | |||