1828535524
Earlier ctest file creation was taking place during build time.
Due to cmake framework issue the file creation had issues,
which in turn failed the test build.
This change moves this logic to the execution phase
and gets rid of the unwanted dependency during build time
Change-Id: Ifbf7e325f1b15a8be12e76560a6d339bc76705ee
[ROCm/hip-tests commit: 4872e70674]
139 lines
3.9 KiB
CMake
139 lines
3.9 KiB
CMake
# 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()
|
|
|
|
get_filename_component(TEST_EXECUTABLE ${TEST_EXECUTABLE} ABSOLUTE)
|
|
|
|
# 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()
|
|
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... surprising
|
|
if(${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 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(${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 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()
|
|
|
|
# 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()
|
|
|
|
file(RELATIVE_PATH exe_path ${CMAKE_CURRENT_BINARY_DIR} ${TEST_EXECUTABLE})
|
|
|
|
# ...and add to script
|
|
add_command(add_test
|
|
"${prefix}${test}${suffix}"
|
|
${TEST_EXECUTOR}
|
|
"${exe_path}"
|
|
"${test_name}"
|
|
${extra_args}
|
|
"${reporter_arg}"
|
|
"${output_dir_arg}"
|
|
)
|
|
add_command(set_tests_properties
|
|
"${prefix}${test}${suffix}"
|
|
PROPERTIES
|
|
${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 tests
|
|
add_command(set ${TEST_LIST} ${tests})
|
|
|
|
# Write CTest script
|
|
file(WRITE "${CTEST_FILE}" "${script}")
|