| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 | # Distributed under the OSI-approved BSD 3-Clause License.  See accompanying# file Copyright.txt or https://cmake.org/licensing for details.set(prefix "${TEST_PREFIX}")set(suffix "${TEST_SUFFIX}")set(spec ${TEST_SPEC})set(extra_args ${TEST_EXTRA_ARGS})set(properties ${TEST_PROPERTIES})set(reporter ${TEST_REPORTER})set(output_dir ${TEST_OUTPUT_DIR})set(output_prefix ${TEST_OUTPUT_PREFIX})set(output_suffix ${TEST_OUTPUT_SUFFIX})set(dl_paths ${TEST_DL_PATHS})set(script)set(suite)set(tests)if(WIN32)  set(dl_paths_variable_name PATH)elseif(APPLE)  set(dl_paths_variable_name DYLD_LIBRARY_PATH)else()  set(dl_paths_variable_name LD_LIBRARY_PATH)endif()function(add_command NAME)  set(_args "")  # use ARGV* instead of ARGN, because ARGN splits arrays into multiple arguments  math(EXPR _last_arg ${ARGC}-1)  foreach(_n RANGE 1 ${_last_arg})    set(_arg "${ARGV${_n}}")    if(_arg MATCHES "[^-./:a-zA-Z0-9_]")      set(_args "${_args} [==[${_arg}]==]") # form a bracket_argument    else()      set(_args "${_args} ${_arg}")    endif()  endforeach()  set(script "${script}${NAME}(${_args})\n" PARENT_SCOPE)endfunction()# Run test executable to get list of available testsif(NOT EXISTS "${TEST_EXECUTABLE}")  message(FATAL_ERROR    "Specified test executable '${TEST_EXECUTABLE}' does not exist"  )endif()if(dl_paths)  cmake_path(CONVERT "${dl_paths}" TO_NATIVE_PATH_LIST paths)  set(ENV{${dl_paths_variable_name}} "${paths}")endif()execute_process(  COMMAND ${TEST_EXECUTOR} "${TEST_EXECUTABLE}" ${spec} --list-tests --verbosity quiet  OUTPUT_VARIABLE output  RESULT_VARIABLE result  WORKING_DIRECTORY "${TEST_WORKING_DIR}")if(NOT ${result} EQUAL 0)  message(FATAL_ERROR    "Error running test executable '${TEST_EXECUTABLE}':\n"    "  Result: ${result}\n"    "  Output: ${output}\n"  )endif()string(REPLACE "\n" ";" output "${output}")# Run test executable to get list of available reportersexecute_process(  COMMAND ${TEST_EXECUTOR} "${TEST_EXECUTABLE}" ${spec} --list-reporters  OUTPUT_VARIABLE reporters_output  RESULT_VARIABLE reporters_result  WORKING_DIRECTORY "${TEST_WORKING_DIR}")if(NOT ${reporters_result} EQUAL 0)  message(FATAL_ERROR    "Error running test executable '${TEST_EXECUTABLE}':\n"    "  Result: ${reporters_result}\n"    "  Output: ${reporters_output}\n"  )endif()string(FIND "${reporters_output}" "${reporter}" reporter_is_valid)if(reporter AND ${reporter_is_valid} EQUAL -1)  message(FATAL_ERROR    "\"${reporter}\" is not a valid reporter!\n"  )endif()# Prepare reporterif(reporter)  set(reporter_arg "--reporter ${reporter}")endif()# Prepare output dirif(output_dir AND NOT IS_ABSOLUTE ${output_dir})  set(output_dir "${TEST_WORKING_DIR}/${output_dir}")  if(NOT EXISTS ${output_dir})    file(MAKE_DIRECTORY ${output_dir})  endif()endif()if(dl_paths)  foreach(path ${dl_paths})    cmake_path(NATIVE_PATH path native_path)    list(APPEND environment_modifications "${dl_paths_variable_name}=path_list_prepend:${native_path}")  endforeach()endif()# Parse outputforeach(line ${output})  set(test ${line})  # Escape characters in test case names that would be parsed by Catch2  set(test_name ${test})  foreach(char , [ ])    string(REPLACE ${char} "\\${char}" test_name ${test_name})  endforeach(char)  # ...add output dir  if(output_dir)    string(REGEX REPLACE "[^A-Za-z0-9_]" "_" test_name_clean ${test_name})    set(output_dir_arg "--out ${output_dir}/${output_prefix}${test_name_clean}${output_suffix}")  endif()    # ...and add to script  add_command(add_test    "${prefix}${test}${suffix}"    ${TEST_EXECUTOR}    "${TEST_EXECUTABLE}"    "${test_name}"    ${extra_args}    "${reporter_arg}"    "${output_dir_arg}"  )  add_command(set_tests_properties    "${prefix}${test}${suffix}"    PROPERTIES    WORKING_DIRECTORY "${TEST_WORKING_DIR}"    ${properties}  )   if(environment_modifications)     add_command(set_tests_properties       "${prefix}${test}${suffix}"       PROPERTIES       ENVIRONMENT_MODIFICATION "${environment_modifications}")   endif()  list(APPEND tests "${prefix}${test}${suffix}")endforeach()# Create a list of all discovered tests, which users may use to e.g. set# properties on the testsadd_command(set ${TEST_LIST} ${tests})# Write CTest scriptfile(WRITE "${CTEST_FILE}" "${script}")
 |