Integrated googletest into the project

The plan is to add unit tests, to completely test library functionality, alongside continuous integration on GitHub.
This commit is contained in:
Unknown 2017-05-29 22:55:17 +01:00
parent 1eec21c679
commit 6c0762bbf2
4 changed files with 113 additions and 1 deletions

View File

@ -7,6 +7,7 @@ set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake_mo
#User options #User options
option(USE_SSL "Use SSL" ON) option(USE_SSL "Use SSL" ON)
option(BUILD_EXAMPLES "Build frnetlib examples" ON) option(BUILD_EXAMPLES "Build frnetlib examples" ON)
option(BUILD_TESTS "Build frnetlib tests" ON)
set(FRNETLIB_BUILD_SHARED_LIBS false CACHE BOOL "Build shared library.") set(FRNETLIB_BUILD_SHARED_LIBS false CACHE BOOL "Build shared library.")
if(USE_SSL) if(USE_SSL)
@ -66,6 +67,13 @@ if(USE_SSL)
endif() endif()
endif() endif()
#Build Tests if needbe
if(BUILD_TESTS)
set(EXT_PROJECTS_DIR ${PROJECT_SOURCE_DIR}/ext)
add_subdirectory(${EXT_PROJECTS_DIR}/gtest)
add_subdirectory(tests)
endif()
#Build examples if needbe #Build examples if needbe
if(BUILD_EXAMPLES) if(BUILD_EXAMPLES)
add_subdirectory(examples) add_subdirectory(examples)
@ -81,4 +89,4 @@ install(
install( install(
DIRECTORY include DIRECTORY include
DESTINATION . DESTINATION .
) )

31
ext/gtest/CMakeLists.txt Normal file
View File

@ -0,0 +1,31 @@
cmake_minimum_required(VERSION 2.8.8)
project(gtest_builder C CXX)
include(ExternalProject)
set(GTEST_FORCE_SHARED_CRT ON)
set(GTEST_DISABLE_PTHREADS OFF)
if(MINGW)
set(GTEST_DISABLE_PTHREADS ON)
endif()
ExternalProject_Add(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs
-DCMAKE_CXX_FLAGS=${MSVC_COMPILER_DEFS}
-Dgtest_force_shared_crt=${GTEST_FORCE_SHARED_CRT}
-Dgtest_disable_pthreads=${GTEST_DISABLE_PTHREADS}
-DBUILD_GTEST=ON
PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
# Disable install step
INSTALL_COMMAND ""
)
# Specify include dir
ExternalProject_Get_Property(googletest source_dir)
set(GTEST_INCLUDE_DIRS ${source_dir}/googletest/include PARENT_SCOPE)
# Specify MainTest's link libraries
ExternalProject_Get_Property(googletest binary_dir)
set(GTEST_LIBS_DIR ${binary_dir}/googlemock/gtest PARENT_SCOPE)

28
tests/CMakeLists.txt Normal file
View File

@ -0,0 +1,28 @@
enable_testing()
set(FRNETLIB_TEST ${FRNETLIB_TEST_STR}_test)
include_directories(${GTEST_INCLUDE_DIRS} ${COMMON_INCLUDES})
file(GLOB TEST_SRC_FILES ${PROJECT_SOURCE_DIR}/tests/*.cpp)
add_executable(${FRNETLIB_TEST} ${TEST_SRC_FILES})
add_dependencies(${FRNETLIB_TEST} googletest)
if(NOT WIN32 OR MINGW)
target_link_libraries(${FRNETLIB_TEST}
${GTEST_LIBS_DIR}/libgtest.a
${GTEST_LIBS_DIR}/libgtest_main.a
)
else()
target_link_libraries(${FRNETLIB_TEST}
debug ${GTEST_LIBS_DIR}/DebugLibs/${CMAKE_FIND_LIBRARY_PREFIXES}gtest${CMAKE_FIND_LIBRARY_SUFFIXES}
optimized ${GTEST_LIBS_DIR}/ReleaseLibs/${CMAKE_FIND_LIBRARY_PREFIXES}gtest${CMAKE_FIND_LIBRARY_SUFFIXES}
)
target_link_libraries(${FRNETLIB_TEST}
debug ${GTEST_LIBS_DIR}/DebugLibs/${CMAKE_FIND_LIBRARY_PREFIXES}gtest_main${CMAKE_FIND_LIBRARY_SUFFIXES}
optimized ${GTEST_LIBS_DIR}/ReleaseLibs/${CMAKE_FIND_LIBRARY_PREFIXES}gtest_main${CMAKE_FIND_LIBRARY_SUFFIXES}
)
endif()
target_link_libraries(${FRNETLIB_TEST} ${CMAKE_THREAD_LIBS_INIT})
add_test(test1 ${FRNETLIB_TEST})

45
tests/PacketableTest.cpp Normal file
View File

@ -0,0 +1,45 @@
#include <algorithm>
#include "gtest/gtest.h"
#include <frnetlib/Packetable.h>
#include <frnetlib/Packet.h>
class CustomClass : public fr::Packetable
{
public:
CustomClass()
{
member1 = "hello";
member2 = 7;
}
bool operator==(const CustomClass &o) const
{
return o.member1 == member1 && o.member2 == member2;
}
virtual void pack(fr::Packet &destination) const
{
destination << member1 << member2;
}
virtual void unpack(fr::Packet &source)
{
source >> member1 >> member2;
}
private:
std::string member1;
int member2;
};
TEST(PacketableTest, pack_and_unpack)
{
fr::Packet packet;
CustomClass custom;
packet << custom;
CustomClass custom2;
packet >> custom2;
ASSERT_EQ(custom, custom2);
}