on 67edfcc help sign in
unity8/cmake/modules/QmlTest.cmake
134 lines 5.6 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} ${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_test SUBPATH COMPONENT_NAME)
62 set(options NO_ADD_TEST NO_TARGETS)
63 set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
65 cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
67 set(qmltest_TARGET test${COMPONENT_NAME})
68 set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME})
70 set(qmltestrunner_imports "")
71 if(NOT "${qmltest_IMPORT_PATHS}" STREQUAL "")
72 foreach(IMPORT_PATH ${qmltest_IMPORT_PATHS})
73 list(APPEND qmltestrunner_imports "-import")
74 list(APPEND qmltestrunner_imports ${IMPORT_PATH})
75 endforeach(IMPORT_PATH)
76 elseif(NOT "${qmltest_DEFAULT_IMPORT_PATHS}" STREQUAL "")
77 foreach(IMPORT_PATH ${qmltest_DEFAULT_IMPORT_PATHS})
78 list(APPEND qmltestrunner_imports "-import")
79 list(APPEND qmltestrunner_imports ${IMPORT_PATH})
80 endforeach(IMPORT_PATH)
81 endif()
83 string(TOLOWER "${CMAKE_GENERATOR}" cmake_generator_lower)
84 if(cmake_generator_lower STREQUAL "unix makefiles")
85 set(qmltest_command
86 env ${qmltest_ENVIRONMENT}
87 ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
88 ${qmltestrunner_imports}
89 -o ${CMAKE_BINARY_DIR}/${qmltest_TARGET}.xml,xunitxml
90 -o -,txt
91 $(FUNCTION)
92 )
93 else()
94 set(qmltest_command
95 env ${qmltest_ENVIRONMENT}
96 ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
97 ${qmltestrunner_imports}
98 -o ${CMAKE_BINARY_DIR}/${qmltest_TARGET}.xml,xunitxml
99 -o -,txt
100 )
101 endif()
103 add_custom_target(${qmltest_TARGET} ${qmltest_command})
105 if(NOT "${qmltest_PROPERTIES}" STREQUAL "")
106 set_target_properties(${qmltest_TARGET} PROPERTIES ${qmltest_PROPERTIES})
107 elseif(NOT "${qmltest_DEFAULT_PROPERTIES}" STREQUAL "")
108 set_target_properties(${qmltest_TARGET} PROPERTIES ${qmltest_DEFAULT_PROPERTIES})
109 endif()
111 if("${qmltest_NO_ADD_TEST}" STREQUAL FALSE AND NOT "${qmltest_DEFAULT_NO_ADD_TEST}" STREQUAL "TRUE")
112 add_test(${qmltest_TARGET} ${qmltest_command})
114 if(NOT "${qmltest_UNPARSED_ARGUMENTS}" STREQUAL "")
115 set_tests_properties(${qmltest_TARGET} PROPERTIES ${qmltest_PROPERTIES})
116 elseif(NOT "${qmltest_DEFAULT_PROPERTIES}" STREQUAL "")
117 set_tests_properties(${qmltest_TARGET} PROPERTIES ${qmltest_DEFAULT_PROPERTIES})
118 endif()
119 endif("${qmltest_NO_ADD_TEST}" STREQUAL FALSE AND NOT "${qmltest_DEFAULT_NO_ADD_TEST}" STREQUAL "TRUE")
121 if("${qmltest_NO_TARGETS}" STREQUAL "FALSE")
122 if(NOT "${qmltest_TARGETS}" STREQUAL "")
123 foreach(TARGET ${qmltest_TARGETS})
124 add_dependencies(${TARGET} ${qmltest_TARGET})
125 endforeach(TARGET)
126 elseif(NOT "${qmltest_DEFAULT_TARGETS}" STREQUAL "")
127 foreach(TARGET ${qmltest_DEFAULT_TARGETS})
128 add_dependencies(${TARGET} ${qmltest_TARGET})
129 endforeach(TARGET)
130 endif()
131 endif("${qmltest_NO_TARGETS}" STREQUAL "FALSE")
133 add_manual_qml_test(${SUBPATH} ${COMPONENT_NAME} ${ARGN})
134endmacro(add_qml_test)