mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 12:17:11 +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:
		 Maciej Patro
					Maciej Patro
				
			
				
					committed by
					
						 Martin Hořeňovský
						Martin Hořeňovský
					
				
			
			
				
	
			
			
			 Martin Hořeňovský
						Martin Hořeňovský
					
				
			
						parent
						
							36fb856163
						
					
				
				
					commit
					d4eec016a9
				
			| @@ -22,6 +22,39 @@ function(add_command NAME) | ||||
|   set(script "${script}${NAME}(${_args})\n" PARENT_SCOPE) | ||||
| 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 | ||||
| if(NOT EXISTS "${TEST_EXECUTABLE}") | ||||
|   message(FATAL_ERROR | ||||
| @@ -29,7 +62,7 @@ if(NOT EXISTS "${TEST_EXECUTABLE}") | ||||
|   ) | ||||
| endif() | ||||
| execute_process( | ||||
|   COMMAND ${TEST_EXECUTOR} "${TEST_EXECUTABLE}" ${spec} --list-test-names-only | ||||
|   COMMAND ${TEST_EXECUTOR} "${TEST_EXECUTABLE}" ${spec} --list-tests | ||||
|   OUTPUT_VARIABLE output | ||||
|   RESULT_VARIABLE result | ||||
| ) | ||||
| @@ -47,27 +80,22 @@ elseif(${result} LESS 0) | ||||
| endif() | ||||
|  | ||||
| string(REPLACE "\n" ";" output "${output}") | ||||
| set(test) | ||||
| set(tags_regex "(\\[([^\\[]*)\\])+$") | ||||
|  | ||||
| # Parse output | ||||
| foreach(line ${output}) | ||||
|   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}") | ||||
|   # lines without leading whitespaces are catch output not tests | ||||
|   if(${line} MATCHES "^[ \t]+") | ||||
|     # strip leading spaces and tabs | ||||
|     string(REGEX REPLACE "^[ \t]+" "" line ${line}) | ||||
|  | ||||
|     if(${line} MATCHES "${tags_regex}") | ||||
|       _add_catch_test_labels(${line}) | ||||
|     else() | ||||
|       _add_catch_test(${line}) | ||||
|     endif() | ||||
|   endif() | ||||
| endforeach() | ||||
|  | ||||
| # Create a list of all discovered tests, which users may use to e.g. set | ||||
|   | ||||
		Reference in New Issue
	
	Block a user