Merge pull request #911 from dvirtz/master

CTest integration script enhancements
This commit is contained in:
Martin Hořeňovský 2017-05-27 13:52:55 +02:00 committed by GitHub
commit 1c59034be4

View File

@ -25,10 +25,24 @@
# # # #
# include(ParseAndAddCatchTests) # # include(ParseAndAddCatchTests) #
# ParseAndAddCatchTests(${PROJECT_NAME}) # # ParseAndAddCatchTests(${PROJECT_NAME}) #
# #
# The following variables affect the behavior of the script: #
# #
# PARSE_CATCH_TESTS_VERBOSE (Default OFF) #
# -- enabels debug messages #
# #
#==================================================================================================# #==================================================================================================#
cmake_minimum_required(VERSION 2.8.8) cmake_minimum_required(VERSION 2.8.8)
option(PARSE_CATCH_TESTS_VERBOSE "Print Catch to CTest parser debug messages" OFF)
function(PrintDebugMessage)
if(PARSE_CATCH_TESTS_VERBOSE)
message(STATUS "ParseAndAddCatchTests: ${ARGV}")
endif()
endfunction()
# This removes the contents between # This removes the contents between
# - block comments (i.e. /* ... */) # - block comments (i.e. /* ... */)
# - full line comments (i.e. // ... ) # - full line comments (i.e. // ... )
@ -47,10 +61,13 @@ endfunction()
# Worker function # Worker function
function(ParseFile SourceFile TestTarget) function(ParseFile SourceFile TestTarget)
# accroding to CMake docs EXISTS behavior is well-defined only for full paths.
get_filename_component(SourceFile ${SourceFile} ABSOLUTE)
if(NOT EXISTS ${SourceFile}) if(NOT EXISTS ${SourceFile})
message(WARNING "Cannot find source file: ${SourceFile}") message(WARNING "Cannot find source file: ${SourceFile}")
return() return()
endif() endif()
PrintDebugMessage("parsing ${SourceFile}")
file(STRINGS ${SourceFile} Contents NEWLINE_CONSUME) file(STRINGS ${SourceFile} Contents NEWLINE_CONSUME)
# Remove block and fullline comments # Remove block and fullline comments
@ -91,25 +108,42 @@ function(ParseFile SourceFile TestTarget)
else() else()
set(CTestName "${Name}") set(CTestName "${Name}")
endif() endif()
set(CTestName "${TestTarget}:${CTestName}")
# add target to labels to enable running all tests added from this target
set(Labels ${TestTarget})
if(TestStringsLength EQUAL 2) if(TestStringsLength EQUAL 2)
list(GET TestStrings 1 Tags) list(GET TestStrings 1 Tags)
string(TOLOWER "${Tags}" Tags) string(TOLOWER "${Tags}" Tags)
# remove target from labels if the test is hidden
if("${Tags}" MATCHES ".*\\[!?(hide|\\.)\\].*")
list(REMOVE_ITEM Labels ${TestTarget})
endif()
string(REPLACE "]" ";" Tags "${Tags}") string(REPLACE "]" ";" Tags "${Tags}")
string(REPLACE "[" "" Tags "${Tags}") string(REPLACE "[" "" Tags "${Tags}")
endif() endif()
list(APPEND Labels ${Tags})
PrintDebugMessage("Adding test \"${CTestName}\"")
if(Labels)
PrintDebugMessage("Setting labels to ${Labels}")
endif()
# Add the test and set its properties # Add the test and set its properties
add_test(NAME "\"${CTestName}\"" COMMAND ${TestTarget} ${Name} ${AdditionalCatchParameters}) add_test(NAME "\"${CTestName}\"" COMMAND ${TestTarget} ${Name} ${AdditionalCatchParameters})
set_tests_properties("\"${CTestName}\"" PROPERTIES FAIL_REGULAR_EXPRESSION "No tests ran" set_tests_properties("\"${CTestName}\"" PROPERTIES FAIL_REGULAR_EXPRESSION "No tests ran"
LABELS "${Tags}") LABELS "${Labels}")
endforeach() endforeach()
endfunction() endfunction()
# entry point # entry point
function(ParseAndAddCatchTests TestTarget) function(ParseAndAddCatchTests TestTarget)
PrintDebugMessage("Started parsing ${TestTarget}")
get_target_property(SourceFiles ${TestTarget} SOURCES) get_target_property(SourceFiles ${TestTarget} SOURCES)
PrintDebugMessage("Found the following sources: ${SourceFiles}")
foreach(SourceFile ${SourceFiles}) foreach(SourceFile ${SourceFiles})
ParseFile(${SourceFile} ${TestTarget}) ParseFile(${SourceFile} ${TestTarget})
endforeach() endforeach()
PrintDebugMessage("Finished parsing ${TestTarget}")
endfunction() endfunction()