Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
259 changes: 89 additions & 170 deletions server/CMakeLists.txt

Large diffs are not rendered by default.

68 changes: 68 additions & 0 deletions server/cmake/DiscoverCppUnitTests.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
if(NOT DEFINED TEST_EXECUTABLE OR TEST_EXECUTABLE STREQUAL "")
message(FATAL_ERROR "TEST_EXECUTABLE is required")
endif()

if(NOT DEFINED TEST_WORKING_DIR OR TEST_WORKING_DIR STREQUAL "")
message(FATAL_ERROR "TEST_WORKING_DIR is required")
endif()

if(NOT DEFINED CTEST_FILE OR CTEST_FILE STREQUAL "")
message(FATAL_ERROR "CTEST_FILE is required")
endif()

if(NOT DEFINED TEST_PREFIX)
set(TEST_PREFIX "")
endif()

execute_process(
COMMAND "${TEST_EXECUTABLE}" --discover_tests --adapter_info
WORKING_DIRECTORY "${TEST_WORKING_DIR}"
RESULT_VARIABLE _discover_result
OUTPUT_VARIABLE _discover_output
ERROR_VARIABLE _discover_error
OUTPUT_STRIP_TRAILING_WHITESPACE
)

if(NOT _discover_result EQUAL 0)
string(JOIN "\n" _discover_failure
"Failed to discover tests from ${TEST_EXECUTABLE}"
"Exit code: ${_discover_result}"
"stderr:"
"${_discover_error}")
message(FATAL_ERROR "${_discover_failure}")
endif()

string(REPLACE "\r\n" "\n" _discover_output "${_discover_output}")
string(REPLACE "\r" "\n" _discover_output "${_discover_output}")

file(WRITE "${CTEST_FILE}"
"# Generated by DiscoverCppUnitTests.cmake. Do not edit.\n")

if(_discover_output)
string(REPLACE "\n" ";" _discover_lines "${_discover_output}")
set(_discovered_ctest_names)
foreach(_discover_line IN LISTS _discover_lines)
if(_discover_line STREQUAL "")
continue()
endif()

if(NOT _discover_line MATCHES "^([^,]+),(.*),([0-9]+)$")
message(FATAL_ERROR
"Unexpected test discovery output from ${TEST_EXECUTABLE}: ${_discover_line}")
endif()

set(_test_keyword "${CMAKE_MATCH_1}")
string(REPLACE "::" "." _test_suffix "${_test_keyword}")
set(_ctest_name "${TEST_PREFIX}${_test_suffix}")

list(FIND _discovered_ctest_names "${_ctest_name}" _existing_index)
if(NOT _existing_index EQUAL -1)
message(FATAL_ERROR "Duplicate discovered test name: ${_ctest_name}")
endif()

file(APPEND "${CTEST_FILE}"
"add_test([==[${_ctest_name}]==] [==[${TEST_EXECUTABLE}]==] [==[${_test_keyword}]==])\n"
"set_tests_properties([==[${_ctest_name}]==] PROPERTIES WORKING_DIRECTORY [==[${TEST_WORKING_DIR}]==])\n")
list(APPEND _discovered_ctest_names "${_ctest_name}")
endforeach()
endif()
Loading