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:
parent
1eec21c679
commit
6c0762bbf2
@ -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
31
ext/gtest/CMakeLists.txt
Normal 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
28
tests/CMakeLists.txt
Normal 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
45
tests/PacketableTest.cpp
Normal 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);
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user