Skip to content

Commit 2d06fab

Browse files
feat: migrate unit tests to doctest
1 parent c4646be commit 2d06fab

File tree

5 files changed

+42
-59
lines changed

5 files changed

+42
-59
lines changed

CMakeLists.txt

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,24 @@ set(CXX_STANDARD 17)
66
set(CXX_STANDARD_REQUIRED ON)
77

88
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
9-
9+
include(CPM)
1010
option(EVENTBUS_BUILD_TESTS "Build unit tests." ON)
1111

12+
# set up warnings interface project to re-use
1213
include(CompilerWarnings)
1314
add_library(project_warnings INTERFACE)
1415
set_project_warnings(project_warnings)
1516

17+
# set up options interface project to re-use
1618
add_library(project_options INTERFACE)
19+
# this project requires C++17
1720
target_compile_features(project_options INTERFACE cxx_std_17)
1821

1922
if(EVENTBUS_BUILD_TESTS)
20-
set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM.cmake")
21-
set(CPM_VERSION 0.27.3)
22-
23-
if(NOT EXISTS ${CPM_DOWNLOAD_LOCATION})
24-
message(STATUS "Downloading CPM.cmake")
25-
file(DOWNLOAD https://raw.githubusercontent.com/TheLartians/CPM/v${CPM_VERSION}/cmake/CPM.cmake ${CPM_DOWNLOAD_LOCATION})
26-
endif(NOT EXISTS ${CPM_DOWNLOAD_LOCATION})
27-
28-
include(${CPM_DOWNLOAD_LOCATION})
29-
3023
CPMAddPackage(
31-
NAME googletest
32-
GITHUB_REPOSITORY google/googletest
33-
GIT_TAG release-1.8.1
34-
VERSION 1.8.1
35-
OPTIONS
36-
"INSTALL_GTEST OFF"
37-
"gtest_force_shared_crt ON"
24+
NAME doctest
25+
GITHUB_REPOSITORY onqtam/doctest
26+
VERSION 2.4.11
3827
)
3928

4029
# this needs to be in the top level directory

cmake/CPM.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
set(CPM_DOWNLOAD_VERSION 0.36.0)
1+
set(CPM_DOWNLOAD_VERSION 0.40.2)
22

33
if(CPM_SOURCE_CACHE)
44
# Expand relative path. This is important if the provided path contains a tilde (~)

eventbus/CMakeLists.txt

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ set(project_headers
1111
# Required for multithreading testing
1212
find_package(Threads REQUIRED)
1313

14+
# create library and aliases
1415
add_library(${PROJECT_NAME} INTERFACE)
1516
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
1617
add_library(dp::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
@@ -19,27 +20,17 @@ target_include_directories(${PROJECT_NAME} INTERFACE include)
1920

2021
target_link_libraries(${PROJECT_NAME} INTERFACE project_options Threads::Threads)
2122

22-
if(MSVC_IDE)
23-
add_custom_target(${PROJECT_NAME}.headers SOURCES ${project_headers})
24-
endif()
25-
2623
if(EVENTBUS_BUILD_TESTS)
27-
set(project_test_sources
28-
test/event_bus_tests.cpp
29-
)
24+
file(GLOB_RECURSE project_test_sources CONFIGURE_DEPENDS test/*.cpp)
3025
set(project_test_name ${PROJECT_NAME}.tests)
3126
add_executable(${project_test_name} ${project_test_sources})
3227
target_link_libraries(${project_test_name}
3328
PUBLIC
34-
gtest
35-
gtest_main
36-
gmock
29+
doctest::doctest
3730
${PROJECT_NAME}
3831
)
3932

40-
include(GoogleTest)
41-
gtest_add_tests(
42-
TARGET ${project_test_name}
43-
SOURCES ${project_test_sources}
44-
)
33+
# Note: doctest and similar testing frameworks can automatically configure CMake tests. For other
34+
include(${doctest_SOURCE_DIR}/scripts/cmake/doctest.cmake)
35+
doctest_discover_tests(${project_test_name})
4536
endif()

eventbus/test/event_bus_tests.cpp

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
#include <gtest/gtest.h>
1+
#include <doctest/doctest.h>
22

33
#include <atomic>
44
#include <eventbus/event_bus.hpp>
5+
#include <iostream>
56
#include <thread>
67

78
struct test_event_type {
@@ -28,7 +29,7 @@ void free_function_callback(const test_event_type& type_event) {
2829
std::cout << "Free function callback : " << type_event << "\n";
2930
}
3031

31-
TEST(EventBus, LambdaRegistrationAndDeregistration) {
32+
TEST_CASE("lambda registration and de-registration") {
3233
dp::event_bus evt_bus;
3334
event_handler_counter counter;
3435
auto registration =
@@ -39,41 +40,41 @@ TEST(EventBus, LambdaRegistrationAndDeregistration) {
3940
evt_bus.register_handler<test_event_type>([]() { std::cout << "Lambda 1\n"; });
4041
const auto lambda_two_reg =
4142
evt_bus.register_handler<test_event_type>([&test_event](const test_event_type& evt) {
42-
EXPECT_EQ(evt.id, test_event.id);
43-
EXPECT_EQ(evt.event_message, test_event.event_message);
44-
EXPECT_EQ(evt.data_value, test_event.data_value);
43+
CHECK_EQ(evt.id, test_event.id);
44+
CHECK_EQ(evt.event_message, test_event.event_message);
45+
CHECK_EQ(evt.data_value, test_event.data_value);
4546
});
4647

4748
const auto lambda_three_reg = evt_bus.register_handler<test_event_type>(
4849
[](test_event_type) { std::cout << "Lambda 3 take by copy.\n"; });
4950

5051
// should be 4 because we register a handler in the test fixture SetUp
51-
ASSERT_EQ(evt_bus.handler_count(), 4);
52+
REQUIRE_EQ(evt_bus.handler_count(), 4);
5253
evt_bus.fire_event(test_event);
53-
EXPECT_EQ(counter.get_count(), 1);
54+
CHECK_EQ(counter.get_count(), 1);
5455
evt_bus.fire_event(test_event);
55-
EXPECT_EQ(counter.get_count(), 2);
56+
CHECK_EQ(counter.get_count(), 2);
5657

5758
evt_bus.remove_handler(lambda_one_reg);
5859

5960
evt_bus.fire_event(test_event);
60-
EXPECT_EQ(counter.get_count(), 3);
61-
EXPECT_EQ(evt_bus.handler_count(), 3);
61+
CHECK_EQ(counter.get_count(), 3);
62+
CHECK_EQ(evt_bus.handler_count(), 3);
6263

6364
evt_bus.remove_handler(lambda_two_reg);
6465

6566
evt_bus.fire_event(test_event);
66-
EXPECT_EQ(counter.get_count(), 4);
67-
EXPECT_EQ(evt_bus.handler_count(), 2);
67+
CHECK_EQ(counter.get_count(), 4);
68+
CHECK_EQ(evt_bus.handler_count(), 2);
6869

6970
evt_bus.remove_handler(lambda_three_reg);
7071

7172
evt_bus.fire_event(test_event);
72-
EXPECT_EQ(counter.get_count(), 5);
73-
EXPECT_EQ(evt_bus.handler_count(), 1);
73+
CHECK_EQ(counter.get_count(), 5);
74+
CHECK_EQ(evt_bus.handler_count(), 1);
7475
}
7576

76-
TEST(EventBus, DeregisterWhileDispatching) {
77+
TEST_CASE("deregister while dispatching") {
7778
dp::event_bus evt_bus;
7879
event_handler_counter counter;
7980
auto registration =
@@ -106,18 +107,18 @@ TEST(EventBus, DeregisterWhileDispatching) {
106107
for (auto i = 0; i < 40; ++i) {
107108
evt_bus.fire_event(test_event_type{3, "test event", 3.4});
108109
// add 1 because of the test fixture.
109-
EXPECT_EQ(evt_bus.handler_count(), listeners.size() + 1);
110+
CHECK_EQ(evt_bus.handler_count(), listeners.size() + 1);
110111
}
111112

112113
// remove all the registrations
113114
for (auto& reg : registrations) {
114-
EXPECT_TRUE(evt_bus.remove_handler(reg));
115+
CHECK(evt_bus.remove_handler(reg));
115116
}
116117

117-
EXPECT_EQ(evt_bus.handler_count(), 1);
118+
CHECK_EQ(evt_bus.handler_count(), 1);
118119
}
119120

120-
TEST(EventBus, MultiThreaded) {
121+
TEST_CASE("multi-threaded event dispatch") {
121122
class simple_listener {
122123
int index_;
123124

@@ -158,22 +159,22 @@ TEST(EventBus, MultiThreaded) {
158159
thread_two.join();
159160

160161
// include the event counter
161-
EXPECT_EQ(evt_bus.handler_count(), 3);
162+
CHECK_EQ(evt_bus.handler_count(), 3);
162163

163-
EXPECT_EQ(event_counter.get_count(), 10);
164+
CHECK_EQ(event_counter.get_count(), 10);
164165
}
165166

166-
TEST(EventBus, AutoDeregisterInDtor) {
167+
TEST_CASE("auto de-register in destructor") {
167168
dp::event_bus evt_bus;
168169
event_handler_counter counter;
169170
{
170171
auto registration = evt_bus.register_handler<test_event_type>(
171172
&counter, &event_handler_counter::on_test_event);
172173
}
173174

174-
EXPECT_EQ(evt_bus.handler_count(), 0);
175+
CHECK_EQ(evt_bus.handler_count(), 0);
175176
evt_bus.fire_event(test_event_type{});
176177
evt_bus.fire_event(test_event_type{});
177178
evt_bus.fire_event(test_event_type{});
178-
EXPECT_EQ(counter.get_count(), 0);
179-
}
179+
CHECK_EQ(counter.get_count(), 0);
180+
}

eventbus/test/main.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
2+
#include <doctest/doctest.h>

0 commit comments

Comments
 (0)