92 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
cmake_minimum_required (VERSION 3.8.0)
 | 
						|
project(ctest_fixtures LANGUAGES NONE)
 | 
						|
include(CTest)
 | 
						|
 | 
						|
macro(passTest testName)
 | 
						|
  set(someFile "${CMAKE_CURRENT_SOURCE_DIR}/test.cmake")
 | 
						|
  add_test(NAME ${testName}
 | 
						|
           COMMAND ${CMAKE_COMMAND} -E compare_files "${someFile}" "${someFile}")
 | 
						|
endmacro()
 | 
						|
 | 
						|
macro(failTest testName)
 | 
						|
  set(someFile "${CMAKE_CURRENT_SOURCE_DIR}/test.cmake")
 | 
						|
  add_test(NAME ${testName}
 | 
						|
           COMMAND ${CMAKE_COMMAND} -E compare_files "${someFile}" "${someFile}xxx")
 | 
						|
endmacro()
 | 
						|
 | 
						|
# Intersperse actual tests among setup/cleanup tests so that we don't
 | 
						|
# define them in the same order as they need to be executed. Numbers
 | 
						|
# at the end of each line correspond to the test numbers ctest will
 | 
						|
# use for each test.
 | 
						|
passTest(one)           # 1
 | 
						|
passTest(setupBoth)     # 2
 | 
						|
passTest(setupFoo)      # 3
 | 
						|
passTest(setupMeta)     # 4
 | 
						|
passTest(cleanupFoo)    # 5
 | 
						|
passTest(two)           # 6
 | 
						|
passTest(cleanupBar)    # 7
 | 
						|
passTest(three)         # 8
 | 
						|
failTest(setupFails)    # 9
 | 
						|
 | 
						|
# Special case, test executable always missing to verify fixture dependencies
 | 
						|
# are checked before existence of test executable to be run
 | 
						|
add_test(NAME wontRun COMMAND iDoNotExist)  # 10
 | 
						|
 | 
						|
passTest(cyclicSetup)   # 11
 | 
						|
passTest(cyclicCleanup) # 12
 | 
						|
passTest(cleanupUnused) # 13
 | 
						|
passTest(setupUnused)   # 14
 | 
						|
 | 
						|
# Define fixture dependencies and ordering
 | 
						|
set_tests_properties(setupFoo   PROPERTIES FIXTURES_SETUP    "Foo")
 | 
						|
set_tests_properties(cleanupFoo PROPERTIES FIXTURES_CLEANUP  "Foo")
 | 
						|
 | 
						|
set_tests_properties(setupBoth  PROPERTIES FIXTURES_SETUP    "Foo;Bar")
 | 
						|
set_tests_properties(cleanupBar PROPERTIES FIXTURES_CLEANUP  "Bar")
 | 
						|
 | 
						|
set_tests_properties(setupMeta  PROPERTIES FIXTURES_SETUP    "Meta"
 | 
						|
                                           FIXTURES_REQUIRED "Foo;Bar")
 | 
						|
 | 
						|
set_tests_properties(setupBoth  PROPERTIES DEPENDS           setupFoo)
 | 
						|
 | 
						|
set_tests_properties(setupFails PROPERTIES FIXTURES_SETUP    "Fails")
 | 
						|
 | 
						|
set_tests_properties(one        PROPERTIES FIXTURES_REQUIRED "Other;Foo")
 | 
						|
set_tests_properties(two        PROPERTIES FIXTURES_REQUIRED "Bar")
 | 
						|
set_tests_properties(three      PROPERTIES FIXTURES_REQUIRED "Meta;Bar")
 | 
						|
set_tests_properties(wontRun    PROPERTIES FIXTURES_REQUIRED "Fails")
 | 
						|
 | 
						|
set_tests_properties(cleanupUnused PROPERTIES FIXTURES_CLEANUP "Unused")
 | 
						|
set_tests_properties(setupUnused   PROPERTIES FIXTURES_SETUP   "Unused")
 | 
						|
 | 
						|
@CASE_CMAKELISTS_CYCLIC_CODE@
 | 
						|
 | 
						|
# These are the cases verified by the main cmake build
 | 
						|
#
 | 
						|
#   Regex:         Test case list (in order)
 | 
						|
#    one            3, 2, 1, 5
 | 
						|
#    two            2, 6, 7
 | 
						|
#    three          3, 2, 4, 5, 8, 7
 | 
						|
#    setupFoo       3
 | 
						|
#    wontRun        9, 10
 | 
						|
#    cyclicSetup    -NA- (configure fails)
 | 
						|
#    cyclicCleanup  -NA- (configure fails)
 | 
						|
#    unused         14, 13
 | 
						|
#
 | 
						|
# In the case of asking for just setupFoo, since there are
 | 
						|
# no tests using the Foo fixture, we do NOT expect cleanupFoo
 | 
						|
# to be executed. It is important not to pull in cleanupFoo
 | 
						|
# if setupFoo is explicitly requested and no other test requires
 | 
						|
# the Foo fixture, otherwise it would not be possible to run
 | 
						|
# just a setup or cleanup test in isolation (likely to be
 | 
						|
# needed during initial creation of such test cases).
 | 
						|
#
 | 
						|
# For the wontRun case, test 9 fails and test 10 should not run.
 | 
						|
# The result of the set of tests should be failure, which is
 | 
						|
# verified by the main cmake build's tests.
 | 
						|
#
 | 
						|
# For the two cyclic test cases invoked by the main cmake build,
 | 
						|
# FIXTURES_... properties are added to the relevant test at the
 | 
						|
# location marked with CASE_CMAKELISTS_CYCLIC_CODE. This creates
 | 
						|
# a self-dependency which causes the configure step to fail.
 |