|
|
|
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.
|