mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-03 21:49:32 +01:00 
			
		
		
		
	CatchAddTests now adds tags as labels for ctest
- `ctest --print-labels` now will show list of available labels - `ctest -L <regex>` will allow to run tests with given labels(tags)
This commit is contained in:
		
				
					committed by
					
						
						Martin Hořeňovský
					
				
			
			
				
	
			
			
			
						parent
						
							36fb856163
						
					
				
				
					commit
					d4eec016a9
				
			@@ -22,6 +22,39 @@ function(add_command NAME)
 | 
				
			|||||||
  set(script "${script}${NAME}(${_args})\n" PARENT_SCOPE)
 | 
					  set(script "${script}${NAME}(${_args})\n" PARENT_SCOPE)
 | 
				
			||||||
endfunction()
 | 
					endfunction()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					macro(_add_catch_test_labels LINE)
 | 
				
			||||||
 | 
					  # convert to list of tags
 | 
				
			||||||
 | 
					  string(REPLACE "][" "]\\;[" tags ${line})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  add_command(
 | 
				
			||||||
 | 
					    set_tests_properties "${prefix}${test}${suffix}"
 | 
				
			||||||
 | 
					      PROPERTIES
 | 
				
			||||||
 | 
					        LABELS "${tags}"
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					endmacro()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					macro(_add_catch_test LINE)
 | 
				
			||||||
 | 
					  set(test ${line})
 | 
				
			||||||
 | 
					  # use escape commas to handle properly test cases with commans inside the name
 | 
				
			||||||
 | 
					  string(REPLACE "," "\\," test_name ${test})
 | 
				
			||||||
 | 
					  # ...and add to script
 | 
				
			||||||
 | 
					  add_command(
 | 
				
			||||||
 | 
					    add_test "${prefix}${test}${suffix}"
 | 
				
			||||||
 | 
					      ${TEST_EXECUTOR}
 | 
				
			||||||
 | 
					       "${TEST_EXECUTABLE}"
 | 
				
			||||||
 | 
					       "${test_name}"
 | 
				
			||||||
 | 
					       ${extra_args}
 | 
				
			||||||
 | 
					     )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  add_command(
 | 
				
			||||||
 | 
					    set_tests_properties "${prefix}${test}${suffix}"
 | 
				
			||||||
 | 
					      PROPERTIES
 | 
				
			||||||
 | 
					        WORKING_DIRECTORY "${TEST_WORKING_DIR}"
 | 
				
			||||||
 | 
					        ${properties}
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					  list(APPEND tests "${prefix}${test}${suffix}")
 | 
				
			||||||
 | 
					endmacro()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Run test executable to get list of available tests
 | 
					# Run test executable to get list of available tests
 | 
				
			||||||
if(NOT EXISTS "${TEST_EXECUTABLE}")
 | 
					if(NOT EXISTS "${TEST_EXECUTABLE}")
 | 
				
			||||||
  message(FATAL_ERROR
 | 
					  message(FATAL_ERROR
 | 
				
			||||||
@@ -29,7 +62,7 @@ if(NOT EXISTS "${TEST_EXECUTABLE}")
 | 
				
			|||||||
  )
 | 
					  )
 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
execute_process(
 | 
					execute_process(
 | 
				
			||||||
  COMMAND ${TEST_EXECUTOR} "${TEST_EXECUTABLE}" ${spec} --list-test-names-only
 | 
					  COMMAND ${TEST_EXECUTOR} "${TEST_EXECUTABLE}" ${spec} --list-tests
 | 
				
			||||||
  OUTPUT_VARIABLE output
 | 
					  OUTPUT_VARIABLE output
 | 
				
			||||||
  RESULT_VARIABLE result
 | 
					  RESULT_VARIABLE result
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -47,27 +80,22 @@ elseif(${result} LESS 0)
 | 
				
			|||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
string(REPLACE "\n" ";" output "${output}")
 | 
					string(REPLACE "\n" ";" output "${output}")
 | 
				
			||||||
 | 
					set(test)
 | 
				
			||||||
 | 
					set(tags_regex "(\\[([^\\[]*)\\])+$")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Parse output
 | 
					# Parse output
 | 
				
			||||||
foreach(line ${output})
 | 
					foreach(line ${output})
 | 
				
			||||||
  set(test ${line})
 | 
					  # lines without leading whitespaces are catch output not tests
 | 
				
			||||||
  # use escape commas to handle properly test cases with commans inside the name
 | 
					  if(${line} MATCHES "^[ \t]+")
 | 
				
			||||||
  string(REPLACE "," "\\," test_name ${test})
 | 
					    # strip leading spaces and tabs
 | 
				
			||||||
  # ...and add to script
 | 
					    string(REGEX REPLACE "^[ \t]+" "" line ${line})
 | 
				
			||||||
  add_command(add_test
 | 
					
 | 
				
			||||||
    "${prefix}${test}${suffix}"
 | 
					    if(${line} MATCHES "${tags_regex}")
 | 
				
			||||||
    ${TEST_EXECUTOR}
 | 
					      _add_catch_test_labels(${line})
 | 
				
			||||||
    "${TEST_EXECUTABLE}"
 | 
					    else()
 | 
				
			||||||
    "${test_name}"
 | 
					      _add_catch_test(${line})
 | 
				
			||||||
    ${extra_args}
 | 
					    endif()
 | 
				
			||||||
  )
 | 
					  endif()
 | 
				
			||||||
  add_command(set_tests_properties
 | 
					 | 
				
			||||||
    "${prefix}${test}${suffix}"
 | 
					 | 
				
			||||||
    PROPERTIES
 | 
					 | 
				
			||||||
    WORKING_DIRECTORY "${TEST_WORKING_DIR}"
 | 
					 | 
				
			||||||
    ${properties}
 | 
					 | 
				
			||||||
  )
 | 
					 | 
				
			||||||
  list(APPEND tests "${prefix}${test}${suffix}")
 | 
					 | 
				
			||||||
endforeach()
 | 
					endforeach()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Create a list of all discovered tests, which users may use to e.g. set
 | 
					# Create a list of all discovered tests, which users may use to e.g. set
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user