1 if (NOT DEFINED PARAVIEW_TEST_DIR)
2 set(PARAVIEW_TEST_DIR
"${CMAKE_BINARY_DIR}/Testing/Temporary")
6 set(_vtk_testing_python_exe
"$<TARGET_FILE:ParaView::pvpython>")
7 set(_vtk_test_python_args --dr ${paraview_python_args})
8 vtk_add_test_python(${ARGN})
12 set(_vtk_testing_python_exe
"$<TARGET_FILE:ParaView::pvbatch>")
13 set(_vtk_test_python_args --dr ${paraview_pvbatch_args})
14 set(vtk_test_prefix
"Batch-${vtk_test_prefix}")
15 vtk_add_test_python(${ARGN})
19 set(_vtk_testing_python_exe "$<TARGET_FILE:ParaView::pvbatch>")
20 set(_vtk_test_python_args --dr ${paraview_pvbatch_args})
21 set(vtk_test_prefix
"Batch-${vtk_test_prefix}")
22 vtk_add_test_python_mpi(${ARGN})
26 if (NOT (TARGET pvserver AND TARGET pvpython))
29 set(_vtk_testing_python_exe "$<TARGET_FILE:ParaView::smTestDriver>")
30 set(_vtk_test_python_args
31 --server $<TARGET_FILE:ParaView::pvserver> --bind-address 127.0.0.1
32 --client $<TARGET_FILE:ParaView::pvpython> --dr)
33 vtk_add_test_python(${ARGN})
38 "FORCE_SERIAL;FORCE_LOCK;SMTESTING_ALLOW_ERRORS" 39 "LOAD_PLUGIN;PLUGIN_PATH;CLIENT;TEST_DIRECTORY;TEST_DATA_TARGET;PREFIX;SUFFIX;_ENABLE_SUFFIX;_DISABLE_SUFFIX;BASELINE_DIR;DATA_DIRECTORY;NUMPROCS;NUMSERVERS" 40 "_COMMAND_PATTERN;LOAD_PLUGINS;PLUGIN_PATHS;TEST_SCRIPTS;TEST_NAME;ENVIRONMENT;ARGS;CLIENT_ARGS" 43 # It is kept here to avoid filtering it out from ARGN in the caller.
44 # If it were not present here, nor filtered out in the caller, then it would be considered
45 # as part of
"TEST_SCRIPTS" multivalue argument.
47 if (_paraview_add_tests_UNPARSED_ARGUMENTS)
49 "Unparsed arguments for ${function}: " 50 "${_paraview_add_tests_UNPARSED_ARGUMENTS}")
53 if (NOT DEFINED _paraview_add_tests__COMMAND_PATTERN)
55 "The `_COMMAND_PATTERN` argument is required.")
58 if (NOT DEFINED _paraview_add_tests_CLIENT)
59 if (
"__paraview_client__" IN_LIST _paraview_add_tests__COMMAND_PATTERN #
do we care?
60 AND NOT TARGET ParaView::paraview # For external testing.
61 AND NOT paraview_will_be_built) # For use within ParaView itself.
65 set(_paraview_add_tests_CLIENT
66 "$<TARGET_FILE:ParaView::paraview>")
69 if (NOT DEFINED _paraview_add_tests_PREFIX)
70 set(_paraview_add_tests_PREFIX
"pv")
73 if (NOT DEFINED _paraview_add_tests_TEST_DIRECTORY)
74 if (NOT DEFINED PARAVIEW_TEST_DIR)
75 set(_paraview_add_tests_TEST_DIRECTORY
76 "${CMAKE_BINARY_DIR}/Testing/Temporary")
78 set(_paraview_add_tests_TEST_DIRECTORY
79 "${PARAVIEW_TEST_DIR}")
80 set(_vtk_build_TEST_OUTPUT_DIRECTORY
"${PARAVIEW_TEST_DIR}")
84 if (NOT DEFINED _paraview_add_tests_DATA_DIRECTORY AND DEFINED _paraview_add_tests_default_data_directory)
85 set(_paraview_add_tests_DATA_DIRECTORY
86 "${_paraview_add_tests_default_data_directory}")
89 if (DEFINED _paraview_add_tests_TEST_SCRIPTS AND DEFINED _paraview_add_tests_TEST_NAME)
91 "Only one of `TEST_NAME` or `TEST_SCRIPTS` must be specified.")
92 elseif (NOT DEFINED _paraview_add_tests_TEST_SCRIPTS AND NOT DEFINED _paraview_add_tests_TEST_NAME)
94 "Either `TEST_SCRIPTS` or `TEST_NAME` must be specified.")
97 set(_paraview_add_tests_args
98 ${_paraview_add_tests_ARGS})
100 if (DEFINED _paraview_add_tests_PLUGIN_PATH)
101 list(APPEND _paraview_add_tests_args
102 "--plugin-search-paths=${_paraview_add_tests_PLUGIN_PATH}")
105 if (DEFINED _paraview_add_tests_PLUGIN_PATHS)
106 string(REPLACE
";" "," _plugin_paths
"${_paraview_add_tests_PLUGIN_PATHS}")
107 list(APPEND _paraview_add_tests_args
108 "--plugin-search-paths=${_plugin_paths}")
111 if (DEFINED _paraview_add_tests_LOAD_PLUGIN)
112 list(APPEND _paraview_add_tests_args
113 "--plugins=${_paraview_add_tests_LOAD_PLUGIN}")
116 if (DEFINED _paraview_add_tests_LOAD_PLUGINS)
117 string(REPLACE
";" "," _load_plugins
"${_paraview_add_tests_LOAD_PLUGINS}")
118 list(APPEND _paraview_add_tests_args
119 "--plugins=${_load_plugins}")
122 string(REPLACE
"__paraview_args__" "${_paraview_add_tests_args}" 123 _paraview_add_tests__COMMAND_PATTERN
124 "${_paraview_add_tests__COMMAND_PATTERN}")
125 string(REPLACE
"__paraview_client__" "${_paraview_add_tests_CLIENT}" 126 _paraview_add_tests__COMMAND_PATTERN
127 "${_paraview_add_tests__COMMAND_PATTERN}")
129 foreach (_paraview_add_tests_script IN LISTS _paraview_add_tests_TEST_SCRIPTS _paraview_add_tests_TEST_NAME)
130 if (DEFINED _paraview_add_tests_TEST_NAME)
131 set(_paraview_add_tests_name
"${_paraview_add_tests_script}")
132 set(_paraview_add_tests_name_base
"${_paraview_add_tests_name}")
133 set(_paraview_add_tests_script)
135 if (NOT IS_ABSOLUTE
"${_paraview_add_tests_script}")
136 set(_paraview_add_tests_script
137 "${CMAKE_CURRENT_SOURCE_DIR}/${_paraview_add_tests_script}")
139 get_filename_component(_paraview_add_tests_name
"${_paraview_add_tests_script}" NAME_WE)
140 set(_paraview_add_tests_name_base
"${_paraview_add_tests_name}")
143 string(APPEND _paraview_add_tests_name
"${_paraview_add_tests_SUFFIX}")
145 if (DEFINED _paraview_add_tests__DISABLE_SUFFIX AND ${_paraview_add_tests_name}${_paraview_add_tests__DISABLE_SUFFIX})
149 if (DEFINED _paraview_add_tests__ENABLE_SUFFIX AND NOT ${_paraview_add_tests_name}${_paraview_add_tests__ENABLE_SUFFIX})
153 if (NOT DEFINED _paraview_add_tests_TEST_DATA_TARGET)
154 if (DEFINED _paraview_add_tests_default_test_data_target)
155 set(_paraview_add_tests_TEST_DATA_TARGET
156 "${_paraview_add_tests_default_test_data_target}")
158 if (NOT DEFINED
"${_paraview_add_tests_name}_USES_DIRECT_DATA")
159 message(FATAL_ERROR
"The `TEST_DATA_TARGET` argument is required.")
164 # Build arguments to pass to smTestDriver 165 set(_paraview_add_tests_smtesting_args
"")
166 if (_paraview_add_tests_SMTESTING_ALLOW_ERRORS)
167 list(APPEND _paraview_add_tests_smtesting_args
"--allow-errors")
170 # Build arguments to pass to the clients. 171 set(_paraview_add_tests_client_args
172 "--test-directory=${_paraview_add_tests_TEST_DIRECTORY}" 173 ${_paraview_add_tests_CLIENT_ARGS})
174 if (DEFINED _paraview_add_tests_BASELINE_DIR)
175 if (DEFINED
"${_paraview_add_tests_name}_BASELINE")
176 if (DEFINED
"${_paraview_add_tests_name}_USES_DIRECT_DATA")
177 list(APPEND _paraview_add_tests_client_args
178 "--test-baseline=${_paraview_add_tests_BASELINE_DIR}/${${_paraview_add_tests_name_base}_BASELINE}")
180 list(APPEND _paraview_add_tests_client_args
181 "--test-baseline=DATA{${_paraview_add_tests_BASELINE_DIR}/${${_paraview_add_tests_name_base}_BASELINE}}")
184 if (DEFINED
"${_paraview_add_tests_name}_USES_DIRECT_DATA")
185 list(APPEND _paraview_add_tests_client_args
186 "--test-baseline=${_paraview_add_tests_BASELINE_DIR}/${_paraview_add_tests_name_base}.png")
188 list(APPEND _paraview_add_tests_client_args
189 "--test-baseline=DATA{${_paraview_add_tests_BASELINE_DIR}/${_paraview_add_tests_name_base}.png}")
192 if (NOT DEFINED
"${_paraview_add_tests_name}_USES_DIRECT_DATA")
193 ExternalData_Expand_Arguments(
"${_paraview_add_tests_TEST_DATA_TARGET}" _
194 "DATA{${_paraview_add_tests_BASELINE_DIR}/,REGEX:${_paraview_add_tests_name_base}(-.*)?(_[0-9]+)?.png}")
197 if (DEFINED
"${_paraview_add_tests_name}_THRESHOLD")
198 list(APPEND _paraview_add_tests_client_args
199 "--test-threshold=${${_paraview_add_tests_name}_THRESHOLD}")
201 if (DEFINED _paraview_add_tests_DATA_DIRECTORY)
202 list(APPEND _paraview_add_tests_client_args
203 "--data-directory=${_paraview_add_tests_DATA_DIRECTORY}")
206 if (DEFINED _paraview_add_tests_TEST_NAME)
207 string(REPLACE
"__paraview_script__" "" 208 _paraview_add_tests_script_args
209 "${_paraview_add_tests__COMMAND_PATTERN}")
210 string(REPLACE
"__paraview_scriptpath__" "" 211 _paraview_add_tests_script_args
212 "${_paraview_add_tests_script_args}")
214 string(REPLACE
"__paraview_script__" "--test-script=${_paraview_add_tests_script}" 215 _paraview_add_tests_script_args
216 "${_paraview_add_tests__COMMAND_PATTERN}")
217 string(REPLACE
"__paraview_scriptpath__" "${_paraview_add_tests_script}" 218 _paraview_add_tests_script_args
219 "${_paraview_add_tests_script_args}")
222 string(REPLACE
"__paraview_client_args__" "${_paraview_add_tests_client_args}" 223 _paraview_add_tests_script_args
224 "${_paraview_add_tests_script_args}")
225 string(REPLACE
"__paraview_test_name__" "${_paraview_add_tests_name_base}" 226 _paraview_add_tests_script_args
227 "${_paraview_add_tests_script_args}")
228 string(REPLACE
"__paraview_smtesting_args__" "${_paraview_add_tests_smtesting_args}" 229 _paraview_add_tests_script_args
230 "${_paraview_add_tests_script_args}")
233 NAME "${_paraview_add_tests_PREFIX}.${_paraview_add_tests_name}" 234 COMMAND ParaView::smTestDriver
236 ${_paraview_add_tests_script_args})
237 if (DEFINED
"${_paraview_add_tests_name}_USES_DIRECT_DATA")
238 add_test(${testArgs})
240 ExternalData_add_test(
"${_paraview_add_tests_TEST_DATA_TARGET}" ${testArgs})
243 set_property(TEST
"${_paraview_add_tests_PREFIX}.${_paraview_add_tests_name}" 247 # set default image compare method for all tests 248 if (DEFINED DEFAULT_USE_SSIM_IMAGE_COMP AND DEFAULT_USE_SSIM_IMAGE_COMP)
249 set(_paraview_default_image_compare_method
"VTK_TESTING_IMAGE_COMPARE_METHOD=TIGHT_VALID")
251 set(_paraview_default_image_compare_method
"VTK_TESTING_IMAGE_COMPARE_METHOD=LEGACY_VALID")
253 # METHOD can have one of the following values: 254 # ``TIGHT_VALID``: Uses euclidian type metrics to compare baselines. Baseline 255 # comparison is sensitive to outliers in this setting. 256 #``LOOSE_VALID``: Uses L1 type metrics to compare baselines. Baseline comparison 257 # is somewhat more forgiving. Typical use cases involve rendering that is highly GPU 258 # dependent, and baselines with text. 259 # ``LEGACY_VALID``: Uses legacy image compare. This metric generates a lot of 260 # false negatives. It is recommended not to use it. 262 # If this variable is not set, a test will use the the default image compare method as defined above 263 set(_paraview_image_compare_method ${_paraview_default_image_compare_method})
264 if (DEFINED
"${_paraview_add_tests_name}_METHOD")
265 if (
"${${_paraview_add_tests_name}_METHOD}" STREQUAL
"LEGACY_VALID")
266 set(_paraview_image_compare_method
"VTK_TESTING_IMAGE_COMPARE_METHOD=LEGACY_VALID")
267 elseif (
"${${_paraview_add_tests_name}_METHOD}" STREQUAL
"LOOSE_VALID")
268 set(_paraview_image_compare_method
"VTK_TESTING_IMAGE_COMPARE_METHOD=LOOSE_VALID")
269 elseif (
"${${_paraview_add_tests_name}_METHOD}" STREQUAL
"TIGHT_VALID")
270 set(_paraview_image_compare_method
"VTK_TESTING_IMAGE_COMPARE_METHOD=TIGHT_VALID")
273 set_property(TEST
"${_paraview_add_tests_PREFIX}.${_paraview_add_tests_name}" 275 ENVIRONMENT
"${_paraview_add_tests_ENVIRONMENT};${_paraview_image_compare_method}")
276 if (DEFINED
"${_paraview_add_tests_name}_TIMEOUT")
277 set_property(TEST
"${_paraview_add_tests_PREFIX}.${_paraview_add_tests_name}" 279 TIMEOUT ${${_paraview_add_tests_name}_TIMEOUT}
282 if (DEFINED _paraview_add_tests_NUMPROCS)
283 set_property(TEST
"${_paraview_add_tests_PREFIX}.${_paraview_add_tests_name}" 285 PROCESSORS
"${_paraview_add_tests_NUMPROCS}")
287 if (${_paraview_add_tests_name}_FORCE_SERIAL OR _paraview_add_tests_FORCE_SERIAL)
288 set_property(TEST
"${_paraview_add_tests_PREFIX}.${_paraview_add_tests_name}" 291 elseif (NOT DEFINED _paraview_add_tests_TEST_NAME AND EXISTS
"${_paraview_add_tests_script}")
292 # if the XML test contains PARAVIEW_TEST_ROOT we assume that we may be writing 293 # to that file and reading it back in so we add a resource lock on the XML 294 # file so that the pv.X, pvcx.X and pvcrs.X tests don't run simultaneously. 295 # we only need to do this if the test isn't forced to be serial already. 296 if (NOT IS_DIRECTORY
"${_paraview_add_tests_script}" AND NOT ${_paraview_add_tests_name}_FORCE_LOCK)
297 file(STRINGS
"${_paraview_add_tests_script}" _paraview_add_tests_paraview_test_root REGEX PARAVIEW_TEST_ROOT)
299 if (${_paraview_add_tests_name}_FORCE_LOCK OR _paraview_add_tests_paraview_test_root)
300 set_property(TEST
"${_paraview_add_tests_PREFIX}.${_paraview_add_tests_name}" 302 RESOURCE_LOCK
"${_paraview_add_tests_script}")
306 # XXX(gitlab-ci): Prevent tests from timing out after a long time. As to 307 # why the tests hang in this situation is not yet known. May be related to 308 # https://gitlab.kitware.com/paraview/paraview/-/issues/20697 309 set_property(TEST
"${_paraview_add_tests_PREFIX}.${_paraview_add_tests_name}" 311 TIMEOUT_AFTER_MATCH
"5" "Couldn't find object\;Endian handshake failed")
321 if (_get_prefix_PREFIX)
322 set(${varname}
"${_get_prefix_PREFIX}" PARENT_SCOPE)
324 set(${varname}
"${default}" PARENT_SCOPE)
328 # If NUMSERVERS is specified in ${ARGN} then returns in varname the number of servers to use for the test, 329 # otherwise returns the "NOT_FOUND" value. 336 if (_get_num_servers_NUMSERVERS)
337 set(${varname}
"${_get_num_servers_NUMSERVERS}" PARENT_SCOPE)
339 set(${varname}
"NOT_FOUND" PARENT_SCOPE)
346 PREFIX
"${chosen_prefix}" 347 _DISABLE_SUFFIX
"_DISABLE_C" 349 __paraview_smtesting_args__
350 --client __paraview_client__
354 __paraview_client_args__
362 set(_paraview_add_tests_args
363 PREFIX
"${chosen_prefix}" 364 _DISABLE_SUFFIX
"_DISABLE_CS" 366 __paraview_smtesting_args__
367 --server
"$<TARGET_FILE:ParaView::pvserver>" 371 --client __paraview_client__
375 __paraview_client_args__
382 if (NOT num_servers STREQUAL
"NOT_FOUND")
383 set(_paraview_add_tests_args ${_paraview_add_tests_args};
384 # Set the number of pvservers through the SMTESTDRIVER_MPI_NUMPROCS environment variable. 386 SMTESTDRIVER_MPI_NUMPROCS=${num_servers}
387 # Requires CTest to reserve NUMPROCS among the available processors 388 NUMPROCS
"${num_servers}" 397 set(_paraview_add_tests_args
398 PREFIX
"${chosen_prefix}" 399 _DISABLE_SUFFIX
"_DISABLE_CRS" 401 __paraview_smtesting_args__
402 --
data-server
"$<TARGET_FILE:ParaView::pvdataserver>" 406 --render-server
"$<TARGET_FILE:ParaView::pvrenderserver>" 410 --client __paraview_client__
414 __paraview_client_args__
420 if (NOT num_servers STREQUAL
"NOT_FOUND")
421 set(_paraview_add_tests_args ${_paraview_add_tests_args};
422 # Set the number of pvservers through the SMTESTDRIVER_MPI_NUMPROCS environment variable. 424 SMTESTDRIVER_MPI_NUMPROCS=${num_servers}
425 # Requires CTest to reserve NUMPROCS among the available processors 426 NUMPROCS
"${num_servers}" 434 _get_prefix(chosen_prefix "pvcs-multi-servers" ${ARGN})
436 PREFIX
"${chosen_prefix}" 439 __paraview_smtesting_args__
440 --test-multi-servers
"${count}" 441 --server
"$<TARGET_FILE:ParaView::pvserver>" 444 --client __paraview_client__
448 __paraview_client_args__
455 math(EXPR _paraview_add_tile_display_cpu_count
"${width} * ${height}")
457 if (_paraview_add_tile_display_cpu_count GREATER 1 AND NOT PARAVIEW_USE_MPI)
458 # we can run 1x1 tile display tests on non MPI builds. 462 _get_prefix(chosen_prefix "pvcs-tile-display" ${ARGN})
464 PREFIX
"${chosen_prefix}" 465 SUFFIX
"-${width}x${height}" 467 PV_SHARED_WINDOW_SIZE=800x600
468 SMTESTDRIVER_MPI_NUMPROCS=${_paraview_add_tile_display_cpu_count}
469 NUMPROCS
"${_paraview_add_tile_display_cpu_count}" 471 __paraview_smtesting_args__
472 --server
"$<TARGET_FILE:ParaView::pvserver>" 477 # using offscreen to avoid clobbering display (although should not be 478 # necessary) when running tests in parallel. 479 --force-offscreen-rendering
480 --client __paraview_client__
484 __paraview_client_args__
491 if (num_ranks GREATER 1 AND NOT PARAVIEW_USE_MPI)
495 get_filename_component(_config_name "${config}
" NAME_WE) 497 _get_prefix(chosen_prefix "pvcs-cave-${_config_name}
" ${ARGN}) 499 PREFIX "${chosen_prefix}
" 500 SUFFIX "-${num_ranks}
" 502 PV_SHARED_WINDOW_SIZE=400x300 503 SMTESTDRIVER_MPI_NUMPROCS=${num_ranks} 504 NUMPROCS "${num_ranks}
" 506 __paraview_smtesting_args__ 507 --server "$<TARGET_FILE:ParaView::pvserver>
" 508 --bind-address 127.0.0.1 510 # using offscreen to avoid clobbering display (although should not be 511 # necessary) when running tests in parallel. 512 --force-offscreen-rendering 515 --client __paraview_client__ 519 __paraview_client_args__ 525 # This is a catch-all function to run any custom command as the "client
" 526 # using th smTestDriver. Note, the command must print "Process started
" for 527 # smTestDriver to treat it as started otherwise the test will fail. 528 # The command to execute is passed as {ARGN} and is suffixed by each of the 529 # TEST_SCRIPTS provided, one at at time. 530 function (paraview_add_test) 531 _get_prefix(chosen_prefix "paraview
" ${ARGN}) 533 PREFIX "${chosen_prefix}
" 535 __paraview_smtesting_args__ 538 __paraview_scriptpath__ 542 # Same as `paraview_add_test` except makes smTestDriver run the command using 543 # mpi. If `PARAVIEW_USE_MPI` if not defined, this does not add any test. 544 function (paraview_add_test_mpi) 545 if (PARAVIEW_USE_MPI) 546 _get_prefix(chosen_prefix "paraview-mpi
" ${ARGN}) 548 PREFIX "${chosen_prefix}
" 549 NUMPROCS 2 # See Utilities/TestDriver/CMakeLists.txt (PARAVIEW_MPI_MAX_NUMPROCS) 551 __paraview_smtesting_args__ 554 __paraview_scriptpath__ 560 # if PARAVIEW_USE_MPI, calls paraview_add_test_mpi(), else calls 561 # paraview_add_test() 562 function (paraview_add_test_mpi_optional) 563 if (PARAVIEW_USE_MPI) 564 paraview_add_test_mpi(${ARGN}) 566 paraview_add_test(${ARGN})
function paraview_add_test_mpi()
function paraview_add_cave_tests(num_ranks, config)
function _get_num_servers(varname)
function paraview_add_tile_display_tests(width, height)
function paraview_add_client_server_tests()
function paraview_add_multi_server_tests(count)
function paraview_add_test_pvbatch_mpi()
function paraview_add_test_pvbatch()
function paraview_add_test_python()
function paraview_add_test()
function _get_prefix(varname, default)
function _paraview_add_tests(function)
function paraview_add_client_server_render_tests()
function paraview_add_client_tests()
function paraview_add_test_driven()