1# If you need to override the qmlscene or qmltestrunner executables,
2# create the corresponding executable target.
4# These functions respect the global STDOUT_LOGGER and ARTIFACTS_DIR variables.
6# You can use those with cmake_parse_arguments
7# if you need to wrap and mangle arguments.
8set(QMLTEST_OPTIONS ADD_TEST CACHE INTERNAL "")
9set(QMLTEST_SINGLE ITERATIONS ARG_PREFIX CACHE INTERNAL "")
10set(QMLTEST_MULTI ARGS ENVIRONMENT DEPENDS IMPORT_PATHS TARGETS CACHE INTERNAL "")
12# import_executables(name1 [name2 [...]]
13# [OPTIONAL] # continue when not found
16# This will find the named executables and import them
17# to an imported target of the same name.
19function(import_executables)
20 cmake_parse_arguments(QMLTEST "OPTIONAL" "" "" ${ARGN})
22 foreach(NAME ${QMLTEST_UNPARSED_ARGUMENTS})
23 if(NOT TARGET ${NAME})
24 add_executable(${NAME} IMPORTED GLOBAL)
25 find_program(${NAME}_exe ${NAME})
27 if(NOT QMLTEST_OPTIONAL AND NOT ${NAME}_exe)
28 message(FATAL_ERROR "Could not locate ${NAME}.")
29 elseif(NOT ${NAME}_exe)
30 message(STATUS "Could not locate ${NAME}, skipping.")
32 set_target_properties(${NAME} PROPERTIES IMPORTED_LOCATION ${${NAME}_exe})
39# add_qml_test(path component_name
43# Add test targets for ${component_name} under ${path}. It's assumed
44# that the test file is named ${path}/tst_${component_name}.qml.
46# This function wraps add_manual_qml_test and add_qml_unittest,
47# see below for available arguments.
49function(add_qml_test PATH COMPONENT_NAME)
50 cmake_parse_arguments(QMLTEST "${QMLTEST_OPTIONS}" "${QMLTEST_SINGLE}" "${QMLTEST_MULTI}" ${ARGN})
53 add_qml_unittest(${ARGV})
54 add_manual_qml_test(${ARGV})
58# add_qml_unittest(path component_name
62# Add test targets for ${component_name} under ${path}. It's assumed
63# that the test file is named ${path}/tst_${component_name}.qml.
65# This function wraps add_executable_test, see below for available arguments.
67function(add_qml_unittest PATH COMPONENT_NAME)
68 import_executables(qmltestrunner)
70 add_executable_test(${COMPONENT_NAME} qmltestrunner
72 ARGS -input ${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml ${QMLTEST_ARGS}
77# add_manual_qml_test(path component_name
81# Add manual test targets for ${component_name} under ${path}. It's assumed
82# that the test file is named ${path}/tst_${component_name}.qml.
84# This function wraps add_manual_test, see below for available arguments.
86function(add_manual_qml_test PATH COMPONENT_NAME)
87 import_executables(qmlscene)
88 cmake_parse_arguments(QMLTEST "${QMLTEST_OPTIONS}" "${QMLTEST_SINGLE}" "${QMLTEST_MULTI}" ${ARGN})
90 add_manual_test(${COMPONENT_NAME} qmlscene
92 ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml ${QMLTEST_ARGS}
97# add_executable_test(target component_name
98# [...] # see doc for add_manual_qml_test for common arguments
99# [ADD_TEST] # whether to add to the "test" target
100# [ARG_PREFIX arg_prefix] # prefix logging arguments with this string
101# [ARGS] arg1 [arg2 [...]] # pass these arguments to the test executable
102# [TARGETS target1 [target2 [...]]] # make the listed targets depend on this test
103# # if a corresponding xvfbtarget1, xvfbtarget2 etc. exists,
104# # this test running under xvfb will be added as a dependency
106# [ITERATIONS count] # run this test as a benchmark for ${count} iterations
109# Logging options in the standard form of "-o filename,format"
110# will be appended to the arguments list, prefixed with ARG_PREFIX.
111# XUnitXML files will be stored in current binary dir or under
112# ARTIFACTS_DIR, if set.
114# Three targets will be created:
115# - test${component_name} - Runs the test
116# - xvfbtest${component_name} - Runs the test under xvfb
117# - gdbtest${component_name} - Runs the test under gdb
119function(add_executable_test COMPONENT_NAME TARGET)
120 import_executables(gdb xvfb-run OPTIONAL)
122 cmake_parse_arguments(QMLTEST "${QMLTEST_OPTIONS}" "${QMLTEST_SINGLE}" "${QMLTEST_MULTI}" ${ARGN})
126 file(RELATIVE_PATH path ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
127 file(MAKE_DIRECTORY ${ARTIFACTS_DIR}/${path})
128 set(file_logger -o ${ARTIFACTS_DIR}/${path}/test${COMPONENT_NAME}.xml,xunitxml)
130 set(file_logger -o ${CMAKE_CURRENT_BINARY_DIR}/test${COMPONENT_NAME}.xml,xunitxml)
133 bake_arguments("${QMLTEST_ARG_PREFIX}" args ${iterations} ${file_logger} ${STDOUT_LOGGER})
136 $<TARGET_FILE:${TARGET}>
141 add_qmltest_target(test${COMPONENT_NAME} ${TARGET}
142 COMMAND ${qmltest_command}
144 ENVIRONMENT QML2_IMPORT_PATH=${imports} ${QMLTEST_ENVIRONMENT}
150 add_qmltest_target(xvfbtest${COMPONENT_NAME} ${TARGET}
151 COMMAND $<TARGET_FILE:xvfb-run> --server-args "-screen 0 1024x768x24" --auto-servernum ${qmltest_command}
153 ENVIRONMENT QML2_IMPORT_PATH=${imports} ${QMLTEST_ENVIRONMENT} LD_PRELOAD=/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/mesa/libGL.so.1
154 TARGETS ${xvfb_targets}
159 add_qmltest_target(gdbtest${COMPONENT_NAME} ${TARGET}
160 COMMAND $<TARGET_FILE:gdb> -ex run -args ${qmltest_command}
162 ENVIRONMENT QML2_IMPORT_PATH=${imports} ${QMLTEST_ENVIRONMENT}
168# add_manual_test(target component_name
169# [DEPENDS target1 [target2 [...]]] # make this test depend on the specified targets
170# [IMPORT_PATHS import_path1 [import_path2 [...]] # use these QML import paths
171# # (they're searched first to last)
172# [ENVIRONMENT var1=value1 [var2=value2 [...]]] # set these environment variables
175# Two targets will be created:
176# - try${component_name} - Runs the test for manual interaction
177# - gdbtry${component_name} - Runs the test under gdb
179function(add_manual_test COMPONENT_NAME TARGET)
180 import_executables(gdb OPTIONAL)
182 cmake_parse_arguments(QMLTEST "${QMLTEST_OPTIONS}" "${QMLTEST_SINGLE}" "${QMLTEST_MULTI}" ${ARGN})
185 bake_arguments("${QMLTEST_ARG_PREFIX}" args -qmljsdebugger=port:3768)
188 $<TARGET_FILE:${TARGET}>
193 add_qmltest_target(try${COMPONENT_NAME} ${TARGET}
194 COMMAND ${qmltry_command}
196 ENVIRONMENT QML2_IMPORT_PATH=${imports} ${QMLTEST_ENVIRONMENT}
200 add_qmltest_target(gdbtry${COMPONENT_NAME} ${TARGET}
201 COMMAND $<TARGET_FILE:gdb> -ex run -args ${qmltry_command}
203 ENVIRONMENT QML2_IMPORT_PATH=${imports} ${QMLTEST_ENVIRONMENT}
209################### INTERNAL ####################
211# add_qmltest_target(target_name target
212# COMMAND test_exe [arg1 [...]] # execute this test with arguments
213# [...] # see above for available arguments:
214# # ADD_TEST, ENVIRONMENT, DEPENDS and TARGETS
217function(add_qmltest_target TARGET_NAME TARGET)
218 cmake_parse_arguments(QMLTEST "${QMLTEST_OPTIONS}" "${QMLTEST_SINGLE}" "COMMAND;${QMLTEST_MULTI}" ${ARGN})
221 # Additional arguments
222 string(TOLOWER "${CMAKE_GENERATOR}" cmake_generator_lower)
223 if(cmake_generator_lower STREQUAL "unix makefiles")
224 set(function "$(FUNCTION)")
227 add_custom_target(${TARGET_NAME}
228 env ${QMLTEST_ENVIRONMENT}
229 ${QMLTEST_COMMAND} ${function}
230 DEPENDS ${TARGET} ${QMLTEST_DEPENDS}
236 COMMAND ${QMLTEST_COMMAND}
239 foreach(ENV ${QMLTEST_ENVIRONMENT})
240 set_property(TEST ${TARGET_NAME} APPEND PROPERTY ENVIRONMENT ${ENV})
243 set_property(TEST ${TARGET_NAME} APPEND PROPERTY DEPENDS ${TARGET})
244 foreach(DEPEND ${DEPENDS})
245 set_property(TEST ${TARGET_NAME} APPEND PROPERTY DEPENDS ${DEPEND})
249 foreach(UPSTREAM_TARGET ${QMLTEST_TARGETS})
250 add_dependencies(${UPSTREAM_TARGET} ${TARGET_NAME})
255# mangle_arguments(${ARGN})
257# Verify there were no unparsed arguments and
258# mangle the known ones for further processing.
260macro(mangle_arguments)
261 if(QMLTEST_UNPARSED_ARGUMENTS)
262 message(FATAL_ERROR "Unexpected arguments: ${QMLTEST_UNPARSED_ARGUMENTS}")
266 set(add_test ADD_TEST)
269 if(QMLTEST_IMPORT_PATHS)
270 string(REPLACE ";" ":" imports "${QMLTEST_IMPORT_PATHS}")
273 if(QMLTEST_ITERATIONS)
274 set(iterations -iterations ${QMLTEST_ITERATIONS})
278 set(depends DEPENDS ${QMLTEST_DEPENDS})
282 set(targets TARGETS ${QMLTEST_TARGETS})
286 foreach(target ${QMLTEST_TARGETS})
287 if(TARGET xvfb${target})
288 list(APPEND xvfb_targets xvfb${target})
291 set(xvfb_targets "${xvfb_targets}" PARENT_SCOPE)
295# bake_arguments(prefix output
299# If set, add the argument prefix before every passed
300# argument and store the result in ${OUTPUT} variable.
302function(bake_arguments PREFIX OUTPUT)
307 list(APPEND args ${PREFIX})
308 list(APPEND args ${arg})
311 set(${OUTPUT} "${args}" PARENT_SCOPE)
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list