2018-10-20 12:37:19 -07:00
|
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
# Macros for generating google unit tests.
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
set(GOOGLETESTDIR ${CMAKE_CURRENT_LIST_DIR})
|
|
|
|
|
2019-08-04 08:24:09 -07:00
|
|
|
find_package(GTest)
|
|
|
|
|
2018-10-20 12:37:19 -07:00
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
# gtest_suite_begin(name)
|
|
|
|
# Begin defining a unit test suite.
|
|
|
|
#
|
2022-01-24 09:18:18 -08:00
|
|
|
function(gtest_suite_begin name)
|
2018-10-20 12:37:19 -07:00
|
|
|
if (UNITTESTS)
|
|
|
|
set(options NO_TEMPLATE)
|
|
|
|
set(oneValueArgs TEMPLATE)
|
|
|
|
set(multiValueArgs)
|
|
|
|
cmake_parse_arguments(${name} "${options}" "${oneValueArgs}" "" ${ARGN})
|
|
|
|
|
|
|
|
if (${name}_UNPARSED_ARGUMENTS)
|
|
|
|
message(FATAL_ERROR "gtest_suite_begin(): called with invalid args '${${name}_UNPARSED_ARGUMENTS}'")
|
|
|
|
endif()
|
|
|
|
set_property(GLOBAL PROPERTY ${name}_Sources "")
|
2022-03-30 10:28:35 -07:00
|
|
|
set_property(GLOBAL PROPERTY ${name}_Files "")
|
|
|
|
set_property(GLOBAL PROPERTY ${name}_LUAFiles "")
|
2018-10-20 12:37:19 -07:00
|
|
|
set_property(GLOBAL PROPERTY ${name}_Deps "")
|
2018-10-31 07:48:06 -07:00
|
|
|
set_property(GLOBAL PROPERTY ${name}_EXECUTABLE True)
|
|
|
|
set_property(GLOBAL PROPERTY ${name}_INSTALL False)
|
2018-10-20 12:37:19 -07:00
|
|
|
|
|
|
|
if (NOT ${name}_NO_TEMPLATE)
|
|
|
|
set(main_path ${CMAKE_CURRENT_BINARY_DIR}/${name}_main.cpp)
|
|
|
|
if (${name}_TEMPLATE)
|
|
|
|
configure_file(${${name}_TEMPLATE} ${main_path})
|
|
|
|
else()
|
|
|
|
configure_file(${GOOGLETESTDIR}/main.cpp.in ${main_path})
|
|
|
|
endif()
|
|
|
|
add_executable(${name} ${main_path})
|
|
|
|
else()
|
|
|
|
add_executable(${name})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# add googletest lib dependency
|
|
|
|
if (GTEST_FOUND)
|
|
|
|
target_include_directories(${name} PRIVATE ${GTEST_INCLUDE_DIRS})
|
|
|
|
target_link_libraries(${name} ${GTEST_LIBRARIES})
|
|
|
|
else()
|
|
|
|
target_link_libraries(${name} gtest)
|
|
|
|
endif()
|
|
|
|
endif()
|
2022-01-24 09:18:18 -08:00
|
|
|
endfunction()
|
2018-10-20 12:37:19 -07:00
|
|
|
|
2022-01-24 09:18:18 -08:00
|
|
|
function(gtest_suite_sources name)
|
2018-10-20 12:37:19 -07:00
|
|
|
if (UNITTESTS)
|
|
|
|
set(ARG_LIST ${ARGV})
|
|
|
|
list(REMOVE_AT ARG_LIST 0)
|
|
|
|
get_property(list GLOBAL PROPERTY ${name}_Sources)
|
|
|
|
foreach(entry ${ARG_LIST})
|
|
|
|
list(APPEND list ${CMAKE_CURRENT_SOURCE_DIR}/${entry})
|
|
|
|
endforeach()
|
|
|
|
set_property(GLOBAL PROPERTY ${name}_Sources ${list})
|
|
|
|
endif()
|
2022-01-24 09:18:18 -08:00
|
|
|
endfunction()
|
2018-10-20 12:37:19 -07:00
|
|
|
|
2022-01-24 09:18:18 -08:00
|
|
|
function(gtest_suite_files name)
|
2018-10-20 12:37:19 -07:00
|
|
|
if (UNITTESTS)
|
|
|
|
set(ARG_LIST ${ARGV})
|
|
|
|
list(REMOVE_AT ARG_LIST 0)
|
|
|
|
get_property(list GLOBAL PROPERTY ${name}_Files)
|
|
|
|
foreach(entry ${ARG_LIST})
|
|
|
|
list(APPEND list ${entry})
|
|
|
|
endforeach()
|
|
|
|
set_property(GLOBAL PROPERTY ${name}_Files ${list})
|
|
|
|
endif()
|
2022-01-24 09:18:18 -08:00
|
|
|
endfunction()
|
2018-10-20 12:37:19 -07:00
|
|
|
|
2022-03-30 10:28:35 -07:00
|
|
|
function(gtest_suite_lua_sources name)
|
|
|
|
if (UNITTESTS)
|
|
|
|
set(ARG_LIST ${ARGV})
|
|
|
|
list(REMOVE_AT ARG_LIST 0)
|
|
|
|
get_property(list GLOBAL PROPERTY ${name}_LUAFiles)
|
|
|
|
foreach(entry ${ARG_LIST})
|
|
|
|
list(APPEND list ${entry})
|
|
|
|
endforeach()
|
|
|
|
set_property(GLOBAL PROPERTY ${name}_LUAFiles ${list})
|
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
2022-01-24 09:18:18 -08:00
|
|
|
function(gtest_suite_deps name)
|
2018-10-20 12:37:19 -07:00
|
|
|
if (UNITTESTS)
|
|
|
|
set(ARG_LIST ${ARGV})
|
|
|
|
list(REMOVE_AT ARG_LIST 0)
|
|
|
|
get_property(list GLOBAL PROPERTY ${name}_Deps)
|
|
|
|
list(APPEND list ${ARG_LIST})
|
|
|
|
set_property(GLOBAL PROPERTY ${name}_Deps ${list})
|
|
|
|
endif()
|
2022-01-24 09:18:18 -08:00
|
|
|
endfunction()
|
2018-10-20 12:37:19 -07:00
|
|
|
|
2022-01-24 09:18:18 -08:00
|
|
|
function(gtest_suite_end name)
|
2018-10-20 12:37:19 -07:00
|
|
|
if (UNITTESTS)
|
|
|
|
project(${name})
|
|
|
|
get_property(srcs GLOBAL PROPERTY ${name}_Sources)
|
|
|
|
get_property(deps GLOBAL PROPERTY ${name}_Deps)
|
2022-01-24 09:18:18 -08:00
|
|
|
target_sources(${name} PRIVATE ${srcs})
|
2018-10-20 12:37:19 -07:00
|
|
|
set_target_properties(${name} PROPERTIES OUTPUT_NAME "${CMAKE_PROJECT_NAME}-${name}")
|
|
|
|
set_target_properties(${name} PROPERTIES
|
|
|
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${name}"
|
|
|
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${name}"
|
|
|
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${name}"
|
|
|
|
)
|
|
|
|
foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
|
|
|
|
string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
|
|
|
|
set_target_properties(${name} PROPERTIES
|
|
|
|
ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${CMAKE_BINARY_DIR}/${name}"
|
|
|
|
LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${CMAKE_BINARY_DIR}/${name}"
|
|
|
|
RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${CMAKE_BINARY_DIR}/${name}"
|
|
|
|
)
|
|
|
|
endforeach()
|
|
|
|
|
2019-07-23 06:12:10 -07:00
|
|
|
target_compile_options(${name} PRIVATE $<$<CXX_COMPILER_ID:GNU>:-Wno-undef>)
|
2018-10-20 12:37:19 -07:00
|
|
|
get_property(models GLOBAL PROPERTY ${name}_Models)
|
|
|
|
foreach(entry ${models})
|
|
|
|
string(REPLACE ":" ";" inout ${entry})
|
|
|
|
list(GET inout 0 in)
|
|
|
|
list(GET inout 1 out)
|
|
|
|
generate_db_models(${name} ${in} ${out})
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
get_property(files GLOBAL PROPERTY ${name}_Files)
|
|
|
|
foreach (datafile ${files})
|
|
|
|
string(REGEX REPLACE "^[^/]+" "" target_datafile "${datafile}")
|
|
|
|
string(LENGTH ${target_datafile} target_datafile_length)
|
|
|
|
string(SUBSTRING ${target_datafile} 1 ${target_datafile_length} target_datafile)
|
|
|
|
get_filename_component(datafiledir ${target_datafile} DIRECTORY)
|
|
|
|
get_filename_component(filename ${target_datafile} NAME)
|
|
|
|
configure_file(${DATA_DIR}/${datafile} ${CMAKE_BINARY_DIR}/${name}/${datafiledir}/${filename} COPYONLY)
|
|
|
|
endforeach()
|
2022-03-30 10:28:35 -07:00
|
|
|
|
|
|
|
get_property(luafiles GLOBAL PROPERTY ${name}_LUAFiles)
|
|
|
|
foreach (luafile ${luafiles})
|
|
|
|
get_filename_component(luafiledir ${luafile} DIRECTORY)
|
|
|
|
get_filename_component(filename ${luafile} NAME)
|
|
|
|
configure_file(lua/${luafile} ${CMAKE_BINARY_DIR}/${name}/${luafiledir}/${filename} COPYONLY)
|
|
|
|
endforeach()
|
|
|
|
|
2018-10-31 07:48:06 -07:00
|
|
|
engine_target_link_libraries(TARGET ${name} DEPENDENCIES ${deps})
|
2018-10-20 12:37:19 -07:00
|
|
|
set_target_properties(${name} PROPERTIES FOLDER ${name})
|
2019-10-31 02:50:36 -07:00
|
|
|
add_test(NAME ${name} COMMAND $<TARGET_FILE:${name}> --gtest_output=xml:${CMAKE_BINARY_DIR}/${name}.xml WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/${name}")
|
2020-07-21 10:12:52 -07:00
|
|
|
add_custom_target(${name}-run COMMAND $<TARGET_FILE:${name}> --gtest_output=xml:${CMAKE_BINARY_DIR}/${name}.xml DEPENDS ${name} USES_TERMINAL WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/${name}")
|
2018-10-20 12:37:19 -07:00
|
|
|
engine_add_debuggger(${name})
|
|
|
|
engine_add_valgrind(${name})
|
|
|
|
engine_add_perf(${name})
|
|
|
|
endif()
|
2022-01-24 09:18:18 -08:00
|
|
|
endfunction()
|