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