| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | # 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(script)set(suite)set(tests)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()execute_process(  COMMAND ${TEST_EXECUTOR} "${TEST_EXECUTABLE}" ${spec} --list-test-names-only  OUTPUT_VARIABLE output  RESULT_VARIABLE result  WORKING_DIRECTORY "${TEST_WORKING_DIR}")# Catch --list-test-names-only reports the number of tests, so 0 is... surprisingif(${result} EQUAL 0)  message(WARNING    "Test executable '${TEST_EXECUTABLE}' contains no tests!\n"  )elseif(${result} LESS 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(${reporters_result} EQUAL 0)  message(WARNING    "Test executable '${TEST_EXECUTABLE}' contains no reporters!\n"  )elseif(${reporters_result} LESS 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()# 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}  )  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}")
 |