cigui/tests/CMakeLists.txt
noffie 8e0e9ceb7c Major Restructuring
N0ffie switched to mingw (fixing linux warnings)
2025-04-12 18:09:16 +02:00

88 lines
2.4 KiB
CMake

cmake_minimum_required(VERSION 3.14)
# Enable testing
enable_testing()
# Enable code coverage
if(CMAKE_COMPILER_IS_GNUCXX)
option(CIGUI_CODE_COVERAGE "Enable code coverage reporting" OFF)
if(CIGUI_CODE_COVERAGE)
target_compile_options(cigui_tests PRIVATE --coverage)
target_link_options(cigui_tests PRIVATE --coverage)
endif()
endif()
# Add GoogleTest (fetched via CPM)
CPMAddPackage(
NAME GTest
GITHUB_REPOSITORY google/googletest
VERSION 1.16.0
OPTIONS
"INSTALL_GTEST OFF"
"gtest_force_shared_crt ON"
)
# Function to easily add test files
function(add_cigui_test TEST_NAME)
add_executable(${TEST_NAME} ${ARGN})
target_link_libraries(${TEST_NAME} PRIVATE cigui gtest gtest_main gmock)
target_include_directories(${TEST_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src)
# Add test to CTest
add_test(NAME ${TEST_NAME} COMMAND ${TEST_NAME})
# Copy DLLs on Windows when using shared libraries
if(WIN32 AND CIGUI_BUILD_SHARED)
add_custom_command(TARGET ${TEST_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:sfml-graphics>
$<TARGET_FILE:sfml-window>
$<TARGET_FILE:sfml-system>
$<TARGET_FILE:cigui>
$<TARGET_FILE_DIR:${TEST_NAME}>
)
endif()
endfunction()
# Main test executable
add_executable(
cigui_tests
test_main.cpp
)
# Link against the library and test framework
target_link_libraries(
cigui_tests
PRIVATE
cigui
gtest
gmock
)
# Include private headers for white-box testing
target_include_directories(
cigui_tests
PRIVATE
${CMAKE_SOURCE_DIR}/src
)
# Add main test to CTest
add_test(NAME cigui_tests COMMAND cigui_tests)
# Copy DLLs on Windows when using shared libraries
if(WIN32 AND CIGUI_BUILD_SHARED)
add_custom_command(TARGET cigui_tests POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:sfml-graphics>
$<TARGET_FILE:sfml-window>
$<TARGET_FILE:sfml-system>
$<TARGET_FILE:cigui>
$<TARGET_FILE_DIR:cigui_tests>
)
endif()
# Optional: Individual test executables
# Uncomment to build separate test executables in addition to the main one
# add_cigui_test(widget_test widgets/widget_test.cpp)
# add_cigui_test(button_test widgets/button_test.cpp)
# add_cigui_test(window_test core/window_test.cpp)