add_library(Catch INTERFACE) | add_library(Catch INTERFACE) | ||||
target_include_directories(Catch INTERFACE "catch") | target_include_directories(Catch INTERFACE "catch") | ||||
add_library(Trompeloeil INTERFACE) | |||||
target_include_directories(Trompeloeil INTERFACE "trompeloeil") | |||||
add_library(TestMain TestMain.cpp) | add_library(TestMain TestMain.cpp) | ||||
target_link_libraries(TestMain Catch) | |||||
target_link_libraries(TestMain Catch Trompeloeil) | |||||
function(add_test_suite name) | function(add_test_suite name) |
#include "scope_guard.h" | #include "scope_guard.h" | ||||
#include <catch.hpp> | #include <catch.hpp> | ||||
#include <trompeloeil.hpp> | |||||
TEST_CASE("deleter called on destruction", "[ScopeGuard]") | |||||
using namespace trompeloeil; | |||||
struct CallMock | |||||
{ | { | ||||
std::size_t calls{0}; | |||||
MAKE_MOCK0(deleter, void()); | |||||
}; | |||||
namespace | |||||
{ | |||||
CallMock m; | |||||
void deleter() | |||||
{ | { | ||||
auto guard = sr::scope_guard([&calls] { ++calls; }); | |||||
static_cast<void>(guard); | |||||
m.deleter(); | |||||
} | } | ||||
} | |||||
REQUIRE(calls == 1); | |||||
TEST_CASE("deleter called on destruction", "[ScopeGuard]") | |||||
{ | |||||
{ | |||||
REQUIRE_CALL(m, deleter()); | |||||
auto guard = sr::scope_guard(deleter); | |||||
static_cast<void>(guard); | |||||
} | |||||
} | } | ||||
TEST_CASE("deleter is not called if released", "[ScopeGuard]") | TEST_CASE("deleter is not called if released", "[ScopeGuard]") |
#define CATCH_CONFIG_MAIN | #define CATCH_CONFIG_MAIN | ||||
#include <catch.hpp> | #include <catch.hpp> | ||||
#include <trompeloeil.hpp> | |||||
namespace trompeloeil | |||||
{ | |||||
template <> | |||||
void reporter<specialized>::send( | |||||
severity s, | |||||
const char* file, | |||||
unsigned long line, | |||||
const char* msg) | |||||
{ | |||||
std::ostringstream os; | |||||
if (line) os << file << ':' << line << '\n'; | |||||
os << msg; | |||||
auto failure = os.str(); | |||||
if (s == severity::fatal) | |||||
{ | |||||
FAIL(failure); | |||||
} | |||||
else | |||||
{ | |||||
CAPTURE(failure); | |||||
CHECK(failure.empty()); | |||||
} | |||||
} | |||||
} |
Boost Software License - Version 1.0 - August 17th, 2003 | |||||
Permission is hereby granted, free of charge, to any person or organization | |||||
obtaining a copy of the software and accompanying documentation covered by | |||||
this license (the "Software") to use, reproduce, display, distribute, | |||||
execute, and transmit the Software, and to prepare derivative works of the | |||||
Software, and to permit third-parties to whom the Software is furnished to | |||||
do so, all subject to the following: | |||||
The copyright notices in the Software and this entire statement, including | |||||
the above license grant, this restriction and the following disclaimer, | |||||
must be included in all copies of the Software, in whole or in part, and | |||||
all derivative works of the Software, unless such copies or derivative | |||||
works are solely in the form of machine-executable object code generated by | |||||
a source language processor. | |||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT | |||||
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE | |||||
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, | |||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | |||||
DEALINGS IN THE SOFTWARE. |