summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cmake/googletest-download.cmake20
-rw-r--r--src/cmake/googletest.cmake32
-rw-r--r--src/cmake/showoptions.cmake6
-rw-r--r--src/test/CMakeLists.txt23
-rw-r--r--src/test/server/game/Miscellaneous/FormulasTest.cpp13
5 files changed, 94 insertions, 0 deletions
diff --git a/src/cmake/googletest-download.cmake b/src/cmake/googletest-download.cmake
new file mode 100644
index 0000000000..0da8335896
--- /dev/null
+++ b/src/cmake/googletest-download.cmake
@@ -0,0 +1,20 @@
+# code copied from https://crascit.com/2015/07/25/cmake-gtest/
+cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
+
+project(googletest-download NONE)
+
+include(ExternalProject)
+
+ExternalProject_Add(
+ googletest
+ SOURCE_DIR "@GOOGLETEST_DOWNLOAD_ROOT@/googletest-src"
+ BINARY_DIR "@GOOGLETEST_DOWNLOAD_ROOT@/googletest-build"
+ GIT_REPOSITORY
+ https://github.com/google/googletest.git
+ GIT_TAG
+ release-1.10.0
+ CONFIGURE_COMMAND ""
+ BUILD_COMMAND ""
+ INSTALL_COMMAND ""
+ TEST_COMMAND ""
+)
diff --git a/src/cmake/googletest.cmake b/src/cmake/googletest.cmake
new file mode 100644
index 0000000000..de0c3bbb4c
--- /dev/null
+++ b/src/cmake/googletest.cmake
@@ -0,0 +1,32 @@
+# the following code to fetch googletest
+# is inspired by and adapted after https://crascit.com/2015/07/25/cmake-gtest/
+# download and unpack googletest at configure time
+
+macro(fetch_googletest _download_module_path _download_root)
+ set(GOOGLETEST_DOWNLOAD_ROOT ${_download_root})
+ configure_file(
+ ${_download_module_path}/googletest-download.cmake
+ ${_download_root}/CMakeLists.txt
+ @ONLY
+ )
+ unset(GOOGLETEST_DOWNLOAD_ROOT)
+
+ execute_process(
+ COMMAND
+ "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
+ WORKING_DIRECTORY
+ ${_download_root}
+ )
+ execute_process(
+ COMMAND
+ "${CMAKE_COMMAND}" --build .
+ WORKING_DIRECTORY
+ ${_download_root}
+ )
+
+ # adds the targers: gtest, gtest_main, gmock, gmock_main
+ add_subdirectory(
+ ${_download_root}/googletest-src
+ ${_download_root}/googletest-build
+ )
+endmacro()
diff --git a/src/cmake/showoptions.cmake b/src/cmake/showoptions.cmake
index 7d10b7f706..f5fb5c4e19 100644
--- a/src/cmake/showoptions.cmake
+++ b/src/cmake/showoptions.cmake
@@ -40,6 +40,12 @@ else()
message("* Build map/vmap tools : No (default)")
endif()
+if( UNIT_TESTS )
+ message("* Build unit tests : Yes")
+else()
+ message("* Build unit tests : No (default)")
+endif()
+
if( USE_COREPCH )
message("* Build core w/PCH : Yes (default)")
else()
diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt
new file mode 100644
index 0000000000..8ecff19c28
--- /dev/null
+++ b/src/test/CMakeLists.txt
@@ -0,0 +1,23 @@
+CollectSourceFiles(
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ PRIVATE_SOURCES
+)
+
+add_executable(
+ unit_tests
+ ${PRIVATE_SOURCES}
+)
+
+target_link_libraries(
+ unit_tests
+ gtest_main
+ game
+ game-interface
+)
+
+add_test(
+ NAME
+ unit
+ COMMAND
+ ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/unit_tests
+)
diff --git a/src/test/server/game/Miscellaneous/FormulasTest.cpp b/src/test/server/game/Miscellaneous/FormulasTest.cpp
new file mode 100644
index 0000000000..74df50f6f6
--- /dev/null
+++ b/src/test/server/game/Miscellaneous/FormulasTest.cpp
@@ -0,0 +1,13 @@
+#include "gtest/gtest.h"
+#include "Formulas.h"
+
+TEST(FormulasTest, hk_honor_at_level)
+{
+ EXPECT_EQ(acore::Honor::hk_honor_at_level(80), 124);
+ EXPECT_EQ(acore::Honor::hk_honor_at_level(80, 2), 248);
+ EXPECT_EQ(acore::Honor::hk_honor_at_level(80, 0.5), 62);
+ EXPECT_EQ(acore::Honor::hk_honor_at_level(1), 2);
+ EXPECT_EQ(acore::Honor::hk_honor_at_level(1, 10), 16);
+ EXPECT_EQ(acore::Honor::hk_honor_at_level(2), 4);
+ EXPECT_EQ(acore::Honor::hk_honor_at_level(3), 5);
+}