1
# add_qml_test(path component_name [NO_ADD_TEST] [NO_TARGETS]
2
# [TARGETS target1 [target2 [...]]]
3
# [IMPORT_PATHS import_path1 [import_path2 [...]]
4
# [PROPERTIES prop1 value1 [prop2 value2 [...]]])
6
# NO_ADD_TEST will prevent adding the test to the "test" target
7
# NO_TARGETS will prevent adding the test to any targets
8
# TARGETS lists the targets the test should be added to
9
# IMPORT_PATHS will pass those paths to qmltestrunner as "-import" arguments
10
# PROPERTIES will be set on the target and test target. See CMake's set_target_properties()
12
# Two targets will be created:
13
# - testComponentName - Runs the test with qmltestrunner
14
# - tryComponentName - Runs the test with uqmlscene, for manual interaction
16
# To change/set a default value for the whole test suite, prior to calling add_qml_test, set:
17
# qmltest_DEFAULT_NO_ADD_TEST (default: FALSE)
18
# qmltest_DEFAULT_TARGETS
19
# qmltest_DEFAULT_IMPORT_PATHS
20
# qmltest_DEFAULT_PROPERTIES
22
find_program(qmltestrunner_exe qmltestrunner)
23
find_program(qmlscene_exe qmlscene)
25
if(NOT qmltestrunner_exe)
26
msg(FATAL_ERROR "Could not locate qmltestrunner.")
29
macro(add_manual_qml_test SUBPATH COMPONENT_NAME)
30
set(options NO_ADD_TEST NO_TARGETS)
31
set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
33
cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
35
set(qmlscene_TARGET try${COMPONENT_NAME})
36
set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME})
38
set(qmlscene_imports "")
39
if(NOT "${qmltest_IMPORT_PATHS}" STREQUAL "")
40
foreach(IMPORT_PATH ${qmltest_IMPORT_PATHS})
41
list(APPEND qmlscene_imports "-I")
42
list(APPEND qmlscene_imports ${IMPORT_PATH})
43
endforeach(IMPORT_PATH)
44
elseif(NOT "${qmltest_DEFAULT_IMPORT_PATHS}" STREQUAL "")
45
foreach(IMPORT_PATH ${qmltest_DEFAULT_IMPORT_PATHS})
46
list(APPEND qmlscene_imports "-I")
47
list(APPEND qmlscene_imports ${IMPORT_PATH})
48
endforeach(IMPORT_PATH)
52
env ${qmltest_ENVIRONMENT}
53
${qmlscene_exe} ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
56
add_custom_target(${qmlscene_TARGET} ${qmlscene_command})
58
endmacro(add_manual_qml_test)
60
macro(add_qml_test SUBPATH COMPONENT_NAME)
61
set(options NO_ADD_TEST NO_TARGETS)
62
set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
64
cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
66
set(qmltest_TARGET test${COMPONENT_NAME})
67
set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME})
69
set(qmltestrunner_imports "")
70
if(NOT "${qmltest_IMPORT_PATHS}" STREQUAL "")
71
foreach(IMPORT_PATH ${qmltest_IMPORT_PATHS})
72
list(APPEND qmltestrunner_imports "-import")
73
list(APPEND qmltestrunner_imports ${IMPORT_PATH})
74
endforeach(IMPORT_PATH)
75
elseif(NOT "${qmltest_DEFAULT_IMPORT_PATHS}" STREQUAL "")
76
foreach(IMPORT_PATH ${qmltest_DEFAULT_IMPORT_PATHS})
77
list(APPEND qmltestrunner_imports "-import")
78
list(APPEND qmltestrunner_imports ${IMPORT_PATH})
79
endforeach(IMPORT_PATH)
83
env ${qmltest_ENVIRONMENT}
84
${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
85
${qmltestrunner_imports}
86
-o ${CMAKE_BINARY_DIR}/${qmltest_TARGET}.xml,xunitxml
89
add_custom_target(${qmltest_TARGET} ${qmltest_command})
91
if(NOT "${qmltest_PROPERTIES}" STREQUAL "")
92
set_target_properties(${qmltest_TARGET} PROPERTIES ${qmltest_PROPERTIES})
93
elseif(NOT "${qmltest_DEFAULT_PROPERTIES}" STREQUAL "")
94
set_target_properties(${qmltest_TARGET} PROPERTIES ${qmltest_DEFAULT_PROPERTIES})
97
if("${qmltest_NO_ADD_TEST}" STREQUAL FALSE AND NOT "${qmltest_DEFAULT_NO_ADD_TEST}" STREQUAL "TRUE")
98
add_test(${qmltest_TARGET} ${qmltest_command})
100
if(NOT "${qmltest_UNPARSED_ARGUMENTS}" STREQUAL "")
101
set_tests_properties(${qmltest_TARGET} PROPERTIES ${qmltest_PROPERTIES})
102
elseif(NOT "${qmltest_DEFAULT_PROPERTIES}" STREQUAL "")
103
set_tests_properties(${qmltest_TARGET} PROPERTIES ${qmltest_DEFAULT_PROPERTIES})
105
endif("${qmltest_NO_ADD_TEST}" STREQUAL FALSE AND NOT "${qmltest_DEFAULT_NO_ADD_TEST}" STREQUAL "TRUE")
107
if("${qmltest_NO_TARGETS}" STREQUAL "FALSE")
108
if(NOT "${qmltest_TARGETS}" STREQUAL "")
109
foreach(TARGET ${qmltest_TARGETS})
110
add_dependencies(${TARGET} ${qmltest_TARGET})
112
elseif(NOT "${qmltest_DEFAULT_TARGETS}" STREQUAL "")
113
foreach(TARGET ${qmltest_DEFAULT_TARGETS})
114
add_dependencies(${TARGET} ${qmltest_TARGET})
117
endif("${qmltest_NO_TARGETS}" STREQUAL "FALSE")
119
add_manual_qml_test(${SUBPATH} ${COMPONENT_NAME} ${ARGN})
120
endmacro(add_qml_test)