diff --git a/CMakeLists.txt b/CMakeLists.txt index ba0bc48..64885d9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_COMPILE_WARNING_AS_ERROR ON) set_property( GLOBAL PROPERTY USE_FOLDERS ON) -set (CMAKE_MODULE_PATH infra/cmake) +set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/infra/cmake) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) diff --git a/infra/cmake/TestTargets.cmake b/infra/cmake/TestTargets.cmake new file mode 100644 index 0000000..49be1df --- /dev/null +++ b/infra/cmake/TestTargets.cmake @@ -0,0 +1,38 @@ +macro(unit_tests) + set(oneValueArgs MODULE_NAME) + set(multiValueArgs FILES DEPENDENCIES) + cmake_parse_arguments(UNIT_TESTS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) + + set(TARGET_NAME ${UNIT_TESTS_MODULE_NAME}_unit_tests) + add_executable(${TARGET_NAME} ${CMAKE_SOURCE_DIR}/test/test_runner.cpp ${UNIT_TESTS_FILES}) + target_link_libraries(${TARGET_NAME} PUBLIC test_utils ${UNIT_TESTS_DEPENDENCIES}) + + set_property(TARGET ${TARGET_NAME} PROPERTY FOLDER test/${UNIT_TESTS_MODULE_NAME}) + + set(UNIT_TEST_TARGETS ${UNIT_TEST_TARGETS} ${TARGET_NAME} PARENT_SCOPE) +endmacro() + +macro(integration_tests) + set(oneValueArgs MODULE_NAME) + set(multiValueArgs FILES FILES_UNIX FILES_WINDOWS DEPENDENCIES) + cmake_parse_arguments(UNIT_TESTS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) + + set(TARGET_NAME ${UNIT_TESTS_MODULE_NAME}_unit_tests) + + set(PLATFORM_FILES) + if(UNIX) + list(APPEND PLATFORM_FILES ${UNIT_TESTS_UNIX_FILES} + elseif(WIN32) + list(APPEND PLATFORM_FILES ${UNIT_TESTS_WIN32_FILES} + endif() + + add_executable(${TARGET_NAME} ${CMAKE_SOURCE_DIR}/test/test_runner.cpp + ${UNIT_TESTS_FILES} + ${PLATFORM_FILES} + ) + target_link_libraries(${TARGET_NAME} PUBLIC test_utils ${UNIT_TESTS_DEPENDENCIES}) + + set_property(TARGET ${TARGET_NAME} PROPERTY FOLDER test/${UNIT_TESTS_MODULE_NAME}) + + set(UNIT_TEST_TARGETS ${UNIT_TEST_TARGETS} ${TARGET_NAME} PARENT_SCOPE) +endmacro() \ No newline at end of file diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 4ca4cf3..3f41db8 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,5 +1,8 @@ add_subdirectory(test_utils) +set(UNIT_TEST_TARGETS) +set(INTEGRATION_TEST_TARGETS) + add_subdirectory(core) add_subdirectory(database) add_subdirectory(fonts) @@ -47,3 +50,5 @@ add_executable(ui_tests WIN32 ui_test_runner.cpp ${UI_TEST_FILES}) target_link_libraries(ui_tests PUBLIC test_utils ${UI_TEST_DEPENDENCIES}) set_property(TARGET ui_tests PROPERTY FOLDER test) +message(STATUS "Unit test targets: " ${UNIT_TEST_TARGETS}) + diff --git a/test/audio/CMakeLists.txt b/test/audio/CMakeLists.txt index 00c2696..5a8b614 100644 --- a/test/audio/CMakeLists.txt +++ b/test/audio/CMakeLists.txt @@ -1,21 +1,22 @@ -set(MODULE_NAME audio) +include(TestTargets) -set(UNIT_TESTS - ${MODULE_NAME}/unit/TestAudioWriter.cpp +unit_tests( + MODULE_NAME audio + FILES + unit/TestAudioWriter.cpp + DEPENDENCIES + audio ) -if(UNIX) -set(INTEGETATION_TESTS - ${MODULE_NAME}/integration/TestAlsaInterface.cpp +integration_tests( + MODULE_NAME audio + UNIX_FILES + integration/TestAlsaInterface.cpp + WINDOWS_FILES + integration/TestAlsaInterface.cpp + DEPENDENCIES + audio ) -else() -set(INTEGETATION_TESTS - ${MODULE_NAME}/integration/TestWasapiInterface.cpp -) -endif() -set(AUDIO_UNIT_TEST_FILES ${UNIT_TESTS} PARENT_SCOPE) -set(AUDIO_INTEGRATION_TEST_FILES ${INTEGETATION_TESTS} PARENT_SCOPE) - -set(AUDIO_UNIT_TEST_DEPENDENCIES ${MODULE_NAME} PARENT_SCOPE) +set(AUDIO_INTEGRATION_TEST_FILES ${INTEGETATION_TESTS} PARENT_SCOPE) set(AUDIO_INTEGRATION_TEST_DEPENDENCIES ${MODULE_NAME} PARENT_SCOPE) \ No newline at end of file diff --git a/test/core/CMakeLists.txt b/test/core/CMakeLists.txt index 0d5346b..9ba6f06 100644 --- a/test/core/CMakeLists.txt +++ b/test/core/CMakeLists.txt @@ -1,15 +1,13 @@ -set(MODULE_NAME core) +include(TestTargets) -list(APPEND UNIT_TEST_FILES +unit_tests( + MODULE_NAME core + FILES TestByteUtils.cpp TestBitStream.cpp TestDataStructures.cpp TestTomlReader.cpp TestStringUtils.cpp -) - -set(UNIT_TEST_TARGET_NAME ${MODULE_NAME}_unit_tests) - -add_executable(${UNIT_TEST_TARGET_NAME} ${CMAKE_SOURCE_DIR}/test/test_runner.cpp ${UNIT_TEST_FILES}) -target_link_libraries(${UNIT_TEST_TARGET_NAME} PUBLIC test_utils core) -set_property(TARGET ${UNIT_TEST_TARGET_NAME} PROPERTY FOLDER test/${MODULE_NAME}) \ No newline at end of file + DEPENDENCIES + core +) \ No newline at end of file