qt5_add_resources(QRC_FIXTURE "fixture/fixture.qrc") ADD_OBJECT_LIBRARY(QRC_FIXTURE_OBJ ${QRC_FIXTURE} Qt5::Core) FUNCTION(EXTRACT_TESTNAME result filepath) STRING(REPLACE ".cpp" "" testname ${filepath}) STRING(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" testname ${testname}) STRING(REPLACE "/" "_" testname ${testname}) STRING(REPLACE "_test_" "_" testname ${testname}) SET(${result} "Test_${testname}" PARENT_SCOPE) ENDFUNCTION() FUNCTION(GET_TEST_CMDLINE cmdline testname) cmake_parse_arguments(_PARAM "" "" "SELECTORS" ${ARGN}) IF(NOT WIN32 AND ( "${testname}" MATCHES "export" OR "${testname}" MATCHES "widget" OR "${testname}" MATCHES "\\.qml")) SET(PLATFORM -platform offscreen) ENDIF() FOREACH(SELECTOR ${_PARAM_SELECTORS}) SET(testname "${testname}_${SELECTOR}") ENDFOREACH() SET(${cmdline} ${PLATFORM} -v2 -o ${CMAKE_CURRENT_BINARY_DIR}/results.${testname}.log.xml,xml -o -,txt PARENT_SCOPE) ENDFUNCTION() FUNCTION(ADD_QML_TEST _sourcefile) cmake_parse_arguments(_PARAM "" "" "SELECTORS" ${ARGN}) EXTRACT_TESTNAME(TESTNAME ${_sourcefile}) GET_TEST_CMDLINE(CMD_PARAMS ${TESTNAME} SELECTORS ${_PARAM_SELECTORS}) SET(CMD $ ${CMD_PARAMS} -input ${sourcefile} -import "qrc:///qml/") SET(ENV_FAIL_ON_WARNING "QT_FATAL_WARNINGS=true") # Emasculate ASAN since QtQuick causes problems SET(ENV_EMASCULATE_ASAN "ASAN_OPTIONS=detect_leaks=0,new_delete_type_mismatch=0") IF(_PARAM_SELECTORS) FOREACH(_PARAM_SELECTOR_LIST_ENTRY ${_PARAM_SELECTORS}) SET(TESTNAME ${TESTNAME}_${_PARAM_SELECTOR_LIST_ENTRY}) SET(CMD ${CMD} -file-selector ${_PARAM_SELECTOR_LIST_ENTRY}) ENDFOREACH() ENDIF() ADD_TEST(NAME ${TESTNAME} COMMAND ${CMD}) SET_TESTS_PROPERTIES(${TESTNAME} PROPERTIES LABELS "qml" ENVIRONMENT "${ENV_FAIL_ON_WARNING}" ENVIRONMENT "${ENV_EMASCULATE_ASAN}") ENDFUNCTION() FUNCTION(ADD_QML_TEST_FILES) cmake_parse_arguments(_PARAM "" "" "SELECTORS" ${ARGN}) IF(NOT BSD AND (NOT Qt5Core_VERSION VERSION_LESS 5.11.0 OR QT_VENDOR STREQUAL "Governikus")) SET(HAS_FILE_SELECTOR_PATCH TRUE) ELSE() SET(HAS_FILE_SELECTOR_PATCH FALSE) ENDIF() FILE(GLOB_RECURSE TEST_SUBFILES "${CMAKE_CURRENT_SOURCE_DIR}/test_*.qml") FOREACH(sourcefile ${TEST_SUBFILES}) IF(NOT _PARAM_SELECTORS) ADD_QML_TEST(${sourcefile}) ELSEIF(HAS_FILE_SELECTOR_PATCH) ADD_QML_TEST(${sourcefile} SELECTORS ${_PARAM_SELECTORS}) ENDIF() ENDFOREACH() ENDFUNCTION() ADD_SUBDIRECTORY(helper) IF(TARGET Qt5::Qml) ADD_SUBDIRECTORY(qml) ENDIF() ADD_SUBDIRECTORY(qt)