AusweisApp2/test/qt/CMakeLists.txt

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()