on 02fa86a help sign in
unity8/cmake/modules/QmlTest.cmake
218 lines 9.1 kB history raw
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 [...]]])
5#
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
15# - gdbtestComponentName - Runs the test with qmltestrunner under gdb
17# To change/set a default value for the whole test suite, prior to calling add_qml_test, set:
18# qmltest_DEFAULT_NO_ADD_TEST (default: FALSE)
19# qmltest_DEFAULT_TARGETS
20# qmltest_DEFAULT_IMPORT_PATHS
21# qmltest_DEFAULT_PROPERTIES
23find_program(qmltestrunner_exe qmltestrunner)
25if(NOT qmltestrunner_exe)
26 msg(FATAL_ERROR "Could not locate qmltestrunner.")
27endif()
29set(qmlscene_exe ${CMAKE_BINARY_DIR}/tests/uqmlscene/uqmlscene)
31set(test_env LC_ALL=C UNITY_TESTING=1)
33macro(add_manual_qml_test SUBPATH COMPONENT_NAME)
34 set(options NO_ADD_TEST NO_TARGETS)
35 set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
37 cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
38 cmake_parse_arguments(qmltest_default "${options}" "" "${multi_value_keywords}" ${qmltest_DEFAULT_PROPERTIES})
40 set(qmlscene_TARGET try${COMPONENT_NAME})
41 set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME})
43 set(qmlscene_imports "")
44 if(NOT "${qmltest_IMPORT_PATHS}" STREQUAL "")
45 foreach(IMPORT_PATH ${qmltest_IMPORT_PATHS})
46 list(APPEND qmlscene_imports "-I")
47 list(APPEND qmlscene_imports ${IMPORT_PATH})
48 endforeach(IMPORT_PATH)
49 elseif(NOT "${qmltest_DEFAULT_IMPORT_PATHS}" STREQUAL "")
50 foreach(IMPORT_PATH ${qmltest_DEFAULT_IMPORT_PATHS})
51 list(APPEND qmlscene_imports "-I")
52 list(APPEND qmlscene_imports ${IMPORT_PATH})
53 endforeach(IMPORT_PATH)
54 endif()
56 if("${qmltest_ENVIRONMENT}" STREQUAL "")
57 set(qmltest_ENVIRONMENT "${qmltest_default_ENVIRONMENT}")
58 endif()
60 set(qmlscene_command
61 env ${test_env} ${qmltest_ENVIRONMENT}
62 ${qmlscene_exe} -qmljsdebugger=port:3768 ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
63 ${qmlscene_imports}
64 )
65 add_custom_target(${qmlscene_TARGET} ${qmlscene_command})
67endmacro(add_manual_qml_test)
69macro(add_qml_benchmark SUBPATH COMPONENT_NAME ITERATIONS)
70 add_qml_test_internal(${SUBPATH} ${COMPONENT_NAME} ${ITERATIONS} ${ARGN})
71endmacro(add_qml_benchmark)
73macro(add_qml_test SUBPATH COMPONENT_NAME)
74 add_qml_test_internal(${SUBPATH} ${COMPONENT_NAME} 0 ${ARGN})
75endmacro(add_qml_test)
77macro(add_qml_test_internal SUBPATH COMPONENT_NAME ITERATIONS)
78 set(options NO_ADD_TEST NO_TARGETS)
79 set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
81 cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
82 cmake_parse_arguments(qmltest_default "${options}" "" "${multi_value_keywords}" ${qmltest_DEFAULT_PROPERTIES})
84 set(qmltest_TARGET test${COMPONENT_NAME})
85 set(qmltest_gdb_TARGET gdbtest${COMPONENT_NAME})
86 set(qmltest_xvfb_TARGET xvfbtest${COMPONENT_NAME})
87 set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME})
89 set(qmltestrunner_imports "")
90 if(NOT "${qmltest_IMPORT_PATHS}" STREQUAL "")
91 foreach(IMPORT_PATH ${qmltest_IMPORT_PATHS})
92 list(APPEND qmltestrunner_imports "-import")
93 list(APPEND qmltestrunner_imports ${IMPORT_PATH})
94 endforeach(IMPORT_PATH)
95 elseif(NOT "${qmltest_DEFAULT_IMPORT_PATHS}" STREQUAL "")
96 foreach(IMPORT_PATH ${qmltest_DEFAULT_IMPORT_PATHS})
97 list(APPEND qmltestrunner_imports "-import")
98 list(APPEND qmltestrunner_imports ${IMPORT_PATH})
99 endforeach(IMPORT_PATH)
100 endif()
102 string(TOLOWER "${CMAKE_GENERATOR}" cmake_generator_lower)
103 if(cmake_generator_lower STREQUAL "unix makefiles")
104 set(function_ARGS $(FUNCTION))
105 else()
106 set(function_ARGS "")
107 endif()
109 if (${ITERATIONS} GREATER 0)
110 set(ITERATIONS_STRING "-iterations" ${ITERATIONS})
111 else()
112 set(ITERATIONS_STRING "")
113 endif()
115 if("${qmltest_ENVIRONMENT}" STREQUAL "")
116 set(qmltest_ENVIRONMENT "${qmltest_default_ENVIRONMENT}")
117 endif()
119 set(qmltest_command
120 env ${test_env} ${qmltest_ENVIRONMENT}
121 ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
122 ${qmltestrunner_imports}
123 ${ITERATIONS_STRING}
124 -o ${CMAKE_BINARY_DIR}/${qmltest_TARGET}.xml,xunitxml
125 -o -,txt
126 ${function_ARGS}
127 )
128 find_program(DPKG dpkg-architecture)
129 if(DPKG)
130 exec_program(${DPKG} ARGS "-qDEB_BUILD_MULTIARCH" OUTPUT_VARIABLE ARCH_TRIPLET )
131 set(LD_PRELOAD_PATH "LD_PRELOAD=/usr/lib/${ARCH_TRIPLET}/mesa/libGL.so.1")
132 endif()
133 set(qmltest_xvfb_command
134 env ${test_env} ${qmltest_ENVIRONMENT} ${LD_PRELOAD_PATH}
135 xvfb-run --server-args "-screen 0 1024x768x24" --auto-servernum
136 ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
137 ${qmltestrunner_imports}
138 -o ${CMAKE_BINARY_DIR}/${qmltest_TARGET}.xml,xunitxml
139 -o -,txt
140 ${function_ARGS}
141 )
143 set(qmltest_gdb_command
144 env ${test_env} ${qmltest_ENVIRONMENT} ${LD_PRELOAD_PATH}
145 gdb -e ${qmltestrunner_exe} -ex \"run -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml ${qmltestrunner_imports} ${ITERATIONS_STRING}\"
146 )
148 add_qmltest_target(${qmltest_TARGET} "${qmltest_command}" TRUE ${qmltest_NO_ADD_TEST})
149 add_qmltest_target(${qmltest_xvfb_TARGET} "${qmltest_xvfb_command}" ${qmltest_NO_TARGETS} TRUE)
150 add_qmltest_target(${qmltest_gdb_TARGET} "${qmltest_gdb_command}" TRUE TRUE)
151 add_manual_qml_test(${SUBPATH} ${COMPONENT_NAME} ${ARGN})
152endmacro(add_qml_test_internal)
154macro(add_binary_qml_test CLASS_NAME LD_PATH DEPS ENVVAR)
155 set(testCommand
156 ${ENVVAR}
157 LD_LIBRARY_PATH=${LD_PATH}
158 dbus-test-runner
159 -m 300
160 -t ${CMAKE_CURRENT_BINARY_DIR}/${CLASS_NAME}TestExec
161 -p -o -p ${CMAKE_BINARY_DIR}/test${CLASS_NAME}.xml,xunitxml
162 -p -o -p -,txt)
164 add_qmltest_target(test${CLASS_NAME} "${testCommand}" FALSE TRUE)
165 add_dependencies(test${CLASS_NAME} ${CLASS_NAME}TestExec ${DEPS})
167 find_program( HAVE_GCC gcc )
168 if (NOT ${HAVE_GCC} STREQUAL "")
169 exec_program( gcc ARGS "-dumpmachine" OUTPUT_VARIABLE ARCH_TRIPLET )
170 set(LD_PRELOAD_PATH "LD_PRELOAD=/usr/lib/${ARCH_TRIPLET}/mesa/libGL.so.1")
171 endif()
172 set(xvfbtestCommand
173 ${LD_PRELOAD_PATH}
174 ${ENVVAR}
175 LD_LIBRARY_PATH=${LD_PATH}
176 xvfb-run --server-args "-screen 0 1024x768x24" --auto-servernum
177 dbus-test-runner
178 -m 300
179 -t ${CMAKE_CURRENT_BINARY_DIR}/${CLASS_NAME}TestExec
180 -p -o -p ${CMAKE_BINARY_DIR}/test${CLASS_NAME}.xml,xunitxml
181 -p -o -p -,txt)
183 add_qmltest_target(xvfbtest${CLASS_NAME} "${xvfbtestCommand}" FALSE TRUE)
184 add_dependencies(qmluitests xvfbtest${CLASS_NAME})
185endmacro(add_binary_qml_test)
187macro(add_qmltest_target qmltest_TARGET qmltest_command qmltest_NO_TARGETS qmltest_NO_ADD_TEST)
188 add_custom_target(${qmltest_TARGET} ${qmltest_command})
190 if(NOT "${qmltest_PROPERTIES}" STREQUAL "")
191 set_target_properties(${qmltest_TARGET} PROPERTIES ${qmltest_PROPERTIES})
192 elseif(NOT "${qmltest_DEFAULT_PROPERTIES}" STREQUAL "")
193 set_target_properties(${qmltest_TARGET} PROPERTIES ${qmltest_DEFAULT_PROPERTIES})
194 endif()
196 if("${qmltest_NO_ADD_TEST}" STREQUAL FALSE AND NOT "${qmltest_DEFAULT_NO_ADD_TEST}" STREQUAL "TRUE")
197 add_test(${qmltest_TARGET} ${qmltest_command})
199 if(NOT "${qmltest_UNPARSED_ARGUMENTS}" STREQUAL "")
200 set_tests_properties(${qmltest_TARGET} PROPERTIES ${qmltest_PROPERTIES})
201 elseif(NOT "${qmltest_DEFAULT_PROPERTIES}" STREQUAL "")
202 set_tests_properties(${qmltest_TARGET} PROPERTIES ${qmltest_DEFAULT_PROPERTIES})
203 endif()
204 endif("${qmltest_NO_ADD_TEST}" STREQUAL FALSE AND NOT "${qmltest_DEFAULT_NO_ADD_TEST}" STREQUAL "TRUE")
206 if("${qmltest_NO_TARGETS}" STREQUAL "FALSE")
207 if(NOT "${qmltest_TARGETS}" STREQUAL "")
208 foreach(TARGET ${qmltest_TARGETS})
209 add_dependencies(${TARGET} ${qmltest_TARGET})
210 endforeach(TARGET)
211 elseif(NOT "${qmltest_DEFAULT_TARGETS}" STREQUAL "")
212 foreach(TARGET ${qmltest_DEFAULT_TARGETS})
213 add_dependencies(${TARGET} ${qmltest_TARGET})
214 endforeach(TARGET)
215 endif()
216 endif("${qmltest_NO_TARGETS}" STREQUAL "FALSE")
218endmacro(add_qmltest_target)