blob: 6b11cffac87cd3608ebde65d29497b5e271d79ea [file] [log] [blame]
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.