| |
| |
|
|
| 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 "") |
| |
| 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}]==]") |
| else() |
| set(_args "${_args} ${_arg}") |
| endif() |
| endforeach() |
| set(script "${script}${NAME}(${_args})\n" PARENT_SCOPE) |
| endfunction() |
|
|
| |
| 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}" |
| ) |
| |
| 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}") |
|
|
| |
| 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() |
|
|
| |
| if(reporter) |
| set(reporter_arg "--reporter ${reporter}") |
| endif() |
|
|
| |
| 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() |
|
|
| |
| foreach(line ${output}) |
| set(test ${line}) |
| |
| set(test_name ${test}) |
| foreach(char , [ ]) |
| string(REPLACE ${char} "\\${char}" test_name ${test_name}) |
| endforeach(char) |
| |
| 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() |
| |
| |
| 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() |
|
|
| |
| |
| add_command(set ${TEST_LIST} ${tests}) |
|
|
| |
| file(WRITE "${CTEST_FILE}" "${script}") |
|
|