Update Catch and trompeloeil
This updates Catch from 1.x to 2.y, so there's a bunch of
incompatibilities.
Change-Id: I7e03bdd57fb73d786d38349d2c46361e6636890c
Depends-on: https://gerrit.cesnet.cz/c/CzechLight/dependencies/+/1567
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 75f0e7d..a6e7050 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -129,25 +129,17 @@
include(CTest)
if(BUILD_TESTING)
enable_testing()
- find_path(TROMPELOEIL_PATH trompeloeil.hpp PATH_SUFFIXES trompeloeil/)
- if("${TROMPELOEIL_PATH}" STREQUAL "TROMPELOEIL_PATH-NOTFOUND")
- message(FATAL_ERROR "Cannot find the \"trompeloeil.hpp\" file provided by <https://github.com/rollbear/trompeloeil>. "
- "Please set TROMPELOEIL_PATH to where it is available.")
- endif()
-
- find_path(CATCH_PATH catch.hpp PATH_SUFFIXES catch/)
- if("${CATCH_PATH}" STREQUAL "CATCH_PATH-NOTFOUND")
- message(FATAL_ERROR "Cannot find the \"catch.hpp\" file provided by <http://catch-lib.net/>. "
- "Please set CATCH_PATH to where it is available.")
- endif()
+ find_package(trompeloeil 33 REQUIRED)
+ find_package(Catch2 2.7.0 REQUIRED)
add_library(TestCatchIntegration STATIC
tests/catch_integration.cpp
tests/trompeloeil_catch.h
+ tests/wait-a-bit-longer.cpp
)
- target_include_directories(TestCatchIntegration SYSTEM PUBLIC ${TROMPELOEIL_PATH} ${CATCH_PATH})
target_include_directories(TestCatchIntegration PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/tests/ ${CMAKE_CURRENT_SOURCE_DIR}/src/)
- target_link_libraries(TestCatchIntegration spdlog::spdlog)
+ target_link_libraries(TestCatchIntegration Catch2::Catch2 trompeloeil spdlog::spdlog)
+ target_compile_definitions(TestCatchIntegration PUBLIC CATCH_CONFIG_FAST_COMPILE)
if (NOT SYSREPOCTL_EXECUTABLE)
find_program(SYSREPOCTL_EXECUTABLE sysrepoctl)
diff --git a/submodules/dependencies b/submodules/dependencies
index 6eb582a..1ca9427 160000
--- a/submodules/dependencies
+++ b/submodules/dependencies
@@ -1 +1 @@
-Subproject commit 6eb582a01f055d7d7f78f3cd87cca9336420338b
+Subproject commit 1ca9427e987725a154c8dfcfe6f3af849cf19762
diff --git a/tests/catch_integration.cpp b/tests/catch_integration.cpp
index b3143fb..e1b18db 100644
--- a/tests/catch_integration.cpp
+++ b/tests/catch_integration.cpp
@@ -1,2 +1,29 @@
#define CATCH_CONFIG_MAIN
-#include <catch.hpp>
+#include <catch2/catch.hpp>
+#include <sstream>
+#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());
+ }
+ }
+ }
diff --git a/tests/cd.cpp b/tests/cd.cpp
index 71eb6bb..44d87dd 100644
--- a/tests/cd.cpp
+++ b/tests/cd.cpp
@@ -291,6 +291,6 @@
input = "cd example:twoKeyList[number=4][name=abcd]";
}
}
- REQUIRE_THROWS_AS(parser.parseCommand(input, errorStream), InvalidCommandException&);
+ REQUIRE_THROWS_AS(parser.parseCommand(input, errorStream), InvalidCommandException);
}
}
diff --git a/tests/leaf_editing.cpp b/tests/leaf_editing.cpp
index 274d171..f18af1c 100644
--- a/tests/leaf_editing.cpp
+++ b/tests/leaf_editing.cpp
@@ -183,6 +183,6 @@
input = "set leafBinary db=ahj";
}
- REQUIRE_THROWS_AS(parser.parseCommand(input, errorStream), InvalidCommandException&);
+ REQUIRE_THROWS_AS(parser.parseCommand(input, errorStream), InvalidCommandException);
}
}
diff --git a/tests/ls.cpp b/tests/ls.cpp
index a19add2..3e8fd52 100644
--- a/tests/ls.cpp
+++ b/tests/ls.cpp
@@ -202,6 +202,6 @@
input = "lssecond:a";
}
- REQUIRE_THROWS_AS(parser.parseCommand(input, errorStream), InvalidCommandException&);
+ REQUIRE_THROWS_AS(parser.parseCommand(input, errorStream), InvalidCommandException);
}
}
diff --git a/tests/presence_containers.cpp b/tests/presence_containers.cpp
index 6872d1b..91b3e95 100644
--- a/tests/presence_containers.cpp
+++ b/tests/presence_containers.cpp
@@ -106,7 +106,7 @@
input = "list[quote='lol']";
}
- REQUIRE_THROWS_AS(parser.parseCommand("create " + input, errorStream), InvalidCommandException&);
- REQUIRE_THROWS_AS(parser.parseCommand("delete " + input, errorStream), InvalidCommandException&);
+ REQUIRE_THROWS_AS(parser.parseCommand("create " + input, errorStream), InvalidCommandException);
+ REQUIRE_THROWS_AS(parser.parseCommand("delete " + input, errorStream), InvalidCommandException);
}
}
diff --git a/tests/trompeloeil_catch.h b/tests/trompeloeil_catch.h
index c6d1131..3de799b 100644
--- a/tests/trompeloeil_catch.h
+++ b/tests/trompeloeil_catch.h
@@ -1,67 +1,8 @@
#pragma once
-#ifdef REQUIRE
-# error This file needs to be included prior to including anything from Catch.
-#endif
-
-// clang-format off
-
-#include <ostream>
-#include <thread>
-#include <catch.hpp>
+#include <catch2/catch.hpp>
#include <trompeloeil.hpp>
-// this is copy-paste from https://github.com/rollbear/trompeloeil/blob/master/docs/CookBook.md/#unit_test_frameworks
-namespace trompeloeil {
+extern template struct trompeloeil::reporter<trompeloeil::specialized>;
-/** @short Pass reports from the Trompeloeil mocker to Catch for processing as test failures */
-template <>
-struct reporter<trompeloeil::specialized>
-{
- static void send(trompeloeil::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());
- }
- }
-};
-}
-
-/** @short Wait until a given sequence of expectation is matched, and then a bit more to ensure that there's silence afterwards */
-void waitForCompletionAndBitMore(const trompeloeil::sequence& seq)
-{
- using namespace std::literals;
- using clock = std::chrono::steady_clock;
-
- // We're busy-waiting a bit
- const auto waitingStep = 30ms;
- // Timeout after this much
- const auto completionTimeout = 5000ms;
- // When checking for silence afterwards, wait at least this long.
- // We'll also wait as long as it originally took to process everything.
- const auto minExtraWait = 100ms;
-
- auto start = clock::now();
- while (!seq.is_completed()) {
- std::this_thread::sleep_for(waitingStep);
- if (clock::now() - start > completionTimeout) {
- break;
- }
- }
- REQUIRE(seq.is_completed());
- auto duration = std::chrono::duration<double>(clock::now() - start);
- std::this_thread::sleep_for(std::max(duration, decltype(duration)(minExtraWait)));
-}
+void waitForCompletionAndBitMore(const trompeloeil::sequence& seq);
diff --git a/tests/wait-a-bit-longer.cpp b/tests/wait-a-bit-longer.cpp
new file mode 100644
index 0000000..029e36f
--- /dev/null
+++ b/tests/wait-a-bit-longer.cpp
@@ -0,0 +1,30 @@
+#include <catch2/catch.hpp>
+#include <chrono>
+#include <thread>
+#include <trompeloeil.hpp>
+
+/** @short Wait until a given sequence of expectation is matched, and then a bit more to ensure that there's silence afterwards */
+void waitForCompletionAndBitMore(const trompeloeil::sequence& seq)
+{
+ using namespace std::literals;
+ using clock = std::chrono::steady_clock;
+
+ // We're busy-waiting a bit
+ const auto waitingStep = 30ms;
+ // Timeout after this much
+ const auto completionTimeout = 5000ms;
+ // When checking for silence afterwards, wait at least this long.
+ // We'll also wait as long as it originally took to process everything.
+ const auto minExtraWait = 100ms;
+
+ auto start = clock::now();
+ while (!seq.is_completed()) {
+ std::this_thread::sleep_for(waitingStep);
+ if (clock::now() - start > completionTimeout) {
+ break;
+ }
+ }
+ REQUIRE(seq.is_completed());
+ auto duration = std::chrono::duration<double>(clock::now() - start);
+ std::this_thread::sleep_for(std::max(duration, decltype(duration)(minExtraWait)));
+}