111 lines
2.8 KiB
CMake
111 lines
2.8 KiB
CMake
FUNCTION(GET_CAPITALIZED _out string)
|
|
STRING(SUBSTRING "${string}" 0 1 _tmp1)
|
|
STRING(SUBSTRING "${string}" 1 -1 _tmp2)
|
|
STRING(TOUPPER "${_tmp1}" _tmp1)
|
|
SET(${_out} ${_tmp1}${_tmp2} PARENT_SCOPE)
|
|
ENDFUNCTION()
|
|
|
|
|
|
FUNCTION(GET_SNAKE_TO_CAMEL_CASE _out string)
|
|
STRING(REPLACE "_" ";" string "${string}")
|
|
FOREACH(entry ${string})
|
|
GET_CAPITALIZED(entry "${entry}")
|
|
SET(_tmp "${_tmp}${entry}")
|
|
ENDFOREACH()
|
|
|
|
SET(${_out} "${_tmp}" PARENT_SCOPE)
|
|
ENDFUNCTION()
|
|
|
|
|
|
FUNCTION(EXTRACT_MODULES _out_module _out_submodule filename)
|
|
GET_FILENAME_COMPONENT(dir "${filename}" DIRECTORY)
|
|
|
|
# make unit test directory to cmake list
|
|
STRING(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" dir "${dir}")
|
|
STRING(REPLACE "/" ";" dir "${dir}")
|
|
|
|
# extract first subdirectory as module
|
|
LIST(GET dir 0 MODULE)
|
|
GET_SNAKE_TO_CAMEL_CASE(MODULE "${MODULE}")
|
|
|
|
# extract second subdirectory as submodule if it exists
|
|
LIST(LENGTH dir dir_len)
|
|
IF(dir_len GREATER 1)
|
|
LIST(GET dir 1 SUBMODULE)
|
|
GET_CAPITALIZED(SUBMODULE "${SUBMODULE}")
|
|
ENDIF()
|
|
|
|
# return values: module is required, submodule optional
|
|
SET(${_out_module} ${MODULE} PARENT_SCOPE)
|
|
SET(${_out_submodule} ${SUBMODULE} PARENT_SCOPE)
|
|
ENDFUNCTION()
|
|
|
|
|
|
FUNCTION(GET_MODULE _out filename)
|
|
EXTRACT_MODULES(MODULE SUBMODULE "${filename}")
|
|
|
|
IF(TARGET "AusweisApp${MODULE}${SUBMODULE}")
|
|
SET(${_out} "AusweisApp${MODULE}${SUBMODULE}" PARENT_SCOPE)
|
|
ELSEIF(TARGET "AusweisApp${MODULE}")
|
|
SET(${_out} "AusweisApp${MODULE}" PARENT_SCOPE)
|
|
ELSE()
|
|
MESSAGE(FATAL_ERROR "Cannot detect module: ${filename}")
|
|
ENDIF()
|
|
ENDFUNCTION()
|
|
|
|
|
|
FUNCTION(ADD_TEST_EXECUTABLE testname)
|
|
IF(ANDROID)
|
|
ADD_LIBRARY(${testname} SHARED ${ARGN})
|
|
ELSE()
|
|
ADD_EXECUTABLE(${testname} ${ARGN})
|
|
ENDIF()
|
|
|
|
GET_MODULE(MODULE "${ARGN}")
|
|
TARGET_LINK_LIBRARIES(${testname} Qt5::Test AusweisAppTestHelper QRC_FIXTURE_OBJ ${MODULE})
|
|
ENDFUNCTION()
|
|
|
|
|
|
FUNCTION(SHOULD_SKIP_TEST _out filename)
|
|
SET(${_out} FALSE PARENT_SCOPE)
|
|
STRING(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" test "${sourcefile}")
|
|
|
|
IF(IOS OR ANDROID)
|
|
IF(ANDROID_BUILD_AAR AND test MATCHES "ui/qml")
|
|
SET(${_out} TRUE PARENT_SCOPE)
|
|
RETURN()
|
|
ENDIF()
|
|
|
|
IF(test MATCHES "ui/widget"
|
|
OR test MATCHES "card/pcsc")
|
|
SET(${_out} TRUE PARENT_SCOPE)
|
|
RETURN()
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDFUNCTION()
|
|
|
|
|
|
FUNCTION(ADD_TEST_EXECUTABLE_SUBDIR)
|
|
FILE(GLOB_RECURSE TEST_FILES "*.cpp")
|
|
|
|
FOREACH(sourcefile ${TEST_FILES})
|
|
SHOULD_SKIP_TEST(SKIP "${sourcefile}")
|
|
IF(SKIP)
|
|
CONTINUE()
|
|
ENDIF()
|
|
|
|
EXTRACT_TESTNAME(TESTNAME ${sourcefile})
|
|
ADD_TEST_EXECUTABLE(${TESTNAME} ${sourcefile})
|
|
GET_TEST_CMDLINE(TEST_CMDLINE ${TESTNAME})
|
|
ADD_TEST(${TESTNAME} ${TESTNAME} ${TEST_CMDLINE})
|
|
SET_TESTS_PROPERTIES(${TESTNAME} PROPERTIES LABELS "ausweisapp")
|
|
ENDFOREACH()
|
|
ENDFUNCTION()
|
|
|
|
|
|
|
|
CONFIGURE_DEFAULT_FILES(${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
# Build single test binaries for each cpp file
|
|
ADD_TEST_EXECUTABLE_SUBDIR()
|