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
|
||||
option(USE_SSL "Use SSL" 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.")
|
||||
|
||||
if(USE_SSL)
|
||||
@ -66,6 +67,13 @@ if(USE_SSL)
|
||||
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
|
||||
if(BUILD_EXAMPLES)
|
||||
add_subdirectory(examples)
|
||||
@ -81,4 +89,4 @@ install(
|
||||
install(
|
||||
DIRECTORY include
|
||||
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