| @@ -2,9 +2,12 @@ | |||
| add_library(Catch INTERFACE) | |||
| target_include_directories(Catch INTERFACE "catch") | |||
| add_library(Trompeloeil INTERFACE) | |||
| target_include_directories(Trompeloeil INTERFACE "trompeloeil") | |||
| add_library(TestMain TestMain.cpp) | |||
| target_link_libraries(TestMain Catch) | |||
| target_link_libraries(TestMain Catch Trompeloeil) | |||
| function(add_test_suite name) | |||
| @@ -20,17 +20,33 @@ | |||
| #include "scope_guard.h" | |||
| #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]") | |||
| @@ -20,3 +20,30 @@ | |||
| #define CATCH_CONFIG_MAIN | |||
| #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()); | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,23 @@ | |||
| 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. | |||