| 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 tests
 
- if(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 reporters
 
- execute_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 reporter
 
- if(reporter)
 
-   set(reporter_arg "--reporter ${reporter}")
 
- endif()
 
- # Prepare output dir
 
- if(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 output
 
- foreach(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 tests
 
- add_command(set ${TEST_LIST} ${tests})
 
- # Write CTest script
 
- file(WRITE "${CTEST_FILE}" "${script}")
 
 
  |