on fab9bd9 help sign in
unity8/cmake/modules/QmlTest.cmake
192 lines 8.0 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
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
22find_program(qmltestrunner_exe qmltestrunner)
24if(NOT qmltestrunner_exe)
25 msg(FATAL_ERROR "Could not locate qmltestrunner.")
26endif()
28set(qmlscene_exe ${CMAKE_BINARY_DIR}/tests/uqmlscene/uqmlscene)
30macro(add_manual_qml_test SUBPATH COMPONENT_NAME)
31 set(options NO_ADD_TEST NO_TARGETS)
32 set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
34 cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
36 set(qmlscene_TARGET try${COMPONENT_NAME})
37 set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME})
39 set(qmlscene_imports "")
40 if(NOT "${qmltest_IMPORT_PATHS}" STREQUAL "")
41 foreach(IMPORT_PATH ${qmltest_IMPORT_PATHS})
42 list(APPEND qmlscene_imports "-I")
43 list(APPEND qmlscene_imports ${IMPORT_PATH})
44 endforeach(IMPORT_PATH)
45 elseif(NOT "${qmltest_DEFAULT_IMPORT_PATHS}" STREQUAL "")
46 foreach(IMPORT_PATH ${qmltest_DEFAULT_IMPORT_PATHS})
47 list(APPEND qmlscene_imports "-I")
48 list(APPEND qmlscene_imports ${IMPORT_PATH})
49 endforeach(IMPORT_PATH)
50 endif()
52 set(qmlscene_command
53 env ${qmltest_ENVIRONMENT}
54 ${qmlscene_exe} -qmljsdebugger=port:3768 ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
55 ${qmlscene_imports}
56 )
57 add_custom_target(${qmlscene_TARGET} ${qmlscene_command})
59endmacro(add_manual_qml_test)
61macro(add_qml_benchmark SUBPATH COMPONENT_NAME ITERATIONS)
62 add_qml_test_internal(${SUBPATH} ${COMPONENT_NAME} ${ITERATIONS} ${ARGN})
63endmacro(add_qml_benchmark)
65macro(add_qml_test SUBPATH COMPONENT_NAME)
66 add_qml_test_internal(${SUBPATH} ${COMPONENT_NAME} 0 ${ARGN})
67endmacro(add_qml_test)
69macro(add_qml_test_internal SUBPATH COMPONENT_NAME ITERATIONS)
70 set(options NO_ADD_TEST NO_TARGETS)
71 set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
73 cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
75 set(qmltest_TARGET test${COMPONENT_NAME})
76 set(qmltest_xvfb_TARGET xvfbtest${COMPONENT_NAME})
77 set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME})
79 set(qmltestrunner_imports "")
80 if(NOT "${qmltest_IMPORT_PATHS}" STREQUAL "")
81 foreach(IMPORT_PATH ${qmltest_IMPORT_PATHS})
82 list(APPEND qmltestrunner_imports "-import")
83 list(APPEND qmltestrunner_imports ${IMPORT_PATH})
84 endforeach(IMPORT_PATH)
85 elseif(NOT "${qmltest_DEFAULT_IMPORT_PATHS}" STREQUAL "")
86 foreach(IMPORT_PATH ${qmltest_DEFAULT_IMPORT_PATHS})
87 list(APPEND qmltestrunner_imports "-import")
88 list(APPEND qmltestrunner_imports ${IMPORT_PATH})
89 endforeach(IMPORT_PATH)
90 endif()
92 string(TOLOWER "${CMAKE_GENERATOR}" cmake_generator_lower)
93 if(cmake_generator_lower STREQUAL "unix makefiles")
94 set(function_ARGS $(FUNCTION))
95 else()
96 set(function_ARGS "")
97 endif()
99 if (${ITERATIONS} GREATER 0)
100 set(ITERATIONS_STRING "-iterations" ${ITERATIONS})
101 else()
102 set(ITERATIONS_STRING "")
103 endif()
105 set(qmltest_command
106 env ${qmltest_ENVIRONMENT}
107 ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
108 ${qmltestrunner_imports}
109 ${ITERATIONS_STRING}
110 -o ${CMAKE_BINARY_DIR}/${qmltest_TARGET}.xml,xunitxml
111 -o -,txt
112 ${function_ARGS}
113 )
114 find_program(DPKG dpkg-architecture)
115 if(DPKG)
116 exec_program(${DPKG} ARGS "-qDEB_BUILD_MULTIARCH" OUTPUT_VARIABLE ARCH_TRIPLET )
117 set(LD_PRELOAD_PATH "LD_PRELOAD=/usr/lib/${ARCH_TRIPLET}/mesa/libGL.so.1")
118 endif()
119 set(qmltest_xvfb_command
120 env ${qmltest_ENVIRONMENT} ${LD_PRELOAD_PATH}
121 xvfb-run --server-args "-screen 0 1024x768x24" --auto-servernum
122 ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
123 ${qmltestrunner_imports}
124 -o ${CMAKE_BINARY_DIR}/${qmltest_TARGET}.xml,xunitxml
125 -o -,txt
126 ${function_ARGS}
127 )
129 add_qmltest_target(${qmltest_TARGET} "${qmltest_command}" TRUE ${qmltest_NO_ADD_TEST})
130 add_qmltest_target(${qmltest_xvfb_TARGET} "${qmltest_xvfb_command}" ${qmltest_NO_TARGETS} TRUE)
131 add_manual_qml_test(${SUBPATH} ${COMPONENT_NAME} ${ARGN})
132endmacro(add_qml_test_internal)
134macro(add_binary_qml_test CLASS_NAME LD_PATH DEPS)
135 set(testCommand
136 LD_LIBRARY_PATH=${LD_PATH}
137 ${CMAKE_CURRENT_BINARY_DIR}/${CLASS_NAME}TestExec
138 -o ${CMAKE_BINARY_DIR}/${CLASSNAME}Test.xml,xunitxml
139 -o -,txt)
141 add_qmltest_target(test${CLASS_NAME} "${testCommand}" FALSE TRUE)
142 add_dependencies(test${CLASS_NAME} ${CLASS_NAME}TestExec ${DEPS})
144 find_program( HAVE_GCC gcc )
145 if (NOT ${HAVE_GCC} STREQUAL "")
146 exec_program( gcc ARGS "-dumpmachine" OUTPUT_VARIABLE ARCH_TRIPLET )
147 set(LD_PRELOAD_PATH "LD_PRELOAD=/usr/lib/${ARCH_TRIPLET}/mesa/libGL.so.1")
148 endif()
149 set(xvfbtestCommand
150 ${LD_PRELOAD_PATH}
151 LD_LIBRARY_PATH=${LD_PATH}
152 xvfb-run --server-args "-screen 0 1024x768x24" --auto-servernum
153 ${CMAKE_CURRENT_BINARY_DIR}/${CLASS_NAME}TestExec
154 -o ${CMAKE_BINARY_DIR}/${CLASS_NAME}Test.xml,xunitxml
155 -o -,txt)
157 add_qmltest_target(xvfbtest${CLASS_NAME} "${xvfbtestCommand}" FALSE TRUE)
158 add_dependencies(qmluitests xvfbtest${CLASS_NAME})
159endmacro(add_binary_qml_test)
161macro(add_qmltest_target qmltest_TARGET qmltest_command qmltest_NO_TARGETS qmltest_NO_ADD_TEST)
162 add_custom_target(${qmltest_TARGET} ${qmltest_command})
164 if(NOT "${qmltest_PROPERTIES}" STREQUAL "")
165 set_target_properties(${qmltest_TARGET} PROPERTIES ${qmltest_PROPERTIES})
166 elseif(NOT "${qmltest_DEFAULT_PROPERTIES}" STREQUAL "")
167 set_target_properties(${qmltest_TARGET} PROPERTIES ${qmltest_DEFAULT_PROPERTIES})
168 endif()
170 if("${qmltest_NO_ADD_TEST}" STREQUAL FALSE AND NOT "${qmltest_DEFAULT_NO_ADD_TEST}" STREQUAL "TRUE")
171 add_test(${qmltest_TARGET} ${qmltest_command})
173 if(NOT "${qmltest_UNPARSED_ARGUMENTS}" STREQUAL "")
174 set_tests_properties(${qmltest_TARGET} PROPERTIES ${qmltest_PROPERTIES})
175 elseif(NOT "${qmltest_DEFAULT_PROPERTIES}" STREQUAL "")
176 set_tests_properties(${qmltest_TARGET} PROPERTIES ${qmltest_DEFAULT_PROPERTIES})
177 endif()
178 endif("${qmltest_NO_ADD_TEST}" STREQUAL FALSE AND NOT "${qmltest_DEFAULT_NO_ADD_TEST}" STREQUAL "TRUE")
180 if("${qmltest_NO_TARGETS}" STREQUAL "FALSE")
181 if(NOT "${qmltest_TARGETS}" STREQUAL "")
182 foreach(TARGET ${qmltest_TARGETS})
183 add_dependencies(${TARGET} ${qmltest_TARGET})
184 endforeach(TARGET)
185 elseif(NOT "${qmltest_DEFAULT_TARGETS}" STREQUAL "")
186 foreach(TARGET ${qmltest_DEFAULT_TARGETS})
187 add_dependencies(${TARGET} ${qmltest_TARGET})
188 endforeach(TARGET)
189 endif()
190 endif("${qmltest_NO_TARGETS}" STREQUAL "FALSE")
192endmacro(add_qmltest_target)