| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- include(RunCTest)
- # 1. Specify subprojects in the CTest script
- function(run_CTestScriptVariable)
- set(CTEST_EXTRA_CONFIG "set(CTEST_USE_LAUNCHERS 1)")
- set(CASE_TEST_PREFIX_CODE [[
- file(COPY "${CTEST_RUNCMAKE_SOURCE_DIRECTORY}/MyProductionCode"
- DESTINATION ${CTEST_SOURCE_DIRECTORY})
- file(COPY "${CTEST_RUNCMAKE_SOURCE_DIRECTORY}/MyExperimentalFeature"
- DESTINATION ${CTEST_SOURCE_DIRECTORY})
- set(CTEST_LABELS_FOR_SUBPROJECTS "MyProductionCode;MyExperimentalFeature")
- ]])
- set(CASE_CMAKELISTS_SUFFIX_CODE [[
- add_subdirectory(MyExperimentalFeature)
- add_subdirectory(MyProductionCode)
- ]])
- run_ctest(CTestScriptVariable)
- unset(CTEST_EXTRA_CONFIG)
- unset(CASE_TEST_PREFIX_CODE)
- unset(CASE_CMAKELISTS_SUFFIX_CODE)
- endfunction()
- run_CTestScriptVariable()
- # 2. Specify subprojects via a CTest script variable on the command line e.g.
- # ctest -S test.cmake -DCTEST_LABELS_FOR_SUBPROJECTS:STRING="MySubproject"
- # Note: This test includes a failing build
- # Note: Also use --instrumentation mode to ensure it doesn't interfere with label generation
- function(run_CTestScriptVariableCommandLine)
- set(CTEST_EXTRA_CONFIG "set(CTEST_USE_LAUNCHERS 1)")
- set(CASE_TEST_PREFIX_CODE [[
- file(COPY "${CTEST_RUNCMAKE_SOURCE_DIRECTORY}/MyThirdPartyDependency"
- DESTINATION ${CTEST_SOURCE_DIRECTORY})
- ]])
- set(CASE_CMAKELISTS_SUFFIX_CODE [[
- add_subdirectory(MyThirdPartyDependency)
- set(CMAKE_EXPERIMENTAL_INSTRUMENTATION "a37d1069-1972-4901-b9c9-f194aaf2b6e0")
- cmake_instrumentation(DATA_VERSION 1 API_VERSION 1)
- ]])
- run_ctest(CTestScriptVariableCommandLine "-DCTEST_LABELS_FOR_SUBPROJECTS:STRING=MyThirdPartyDependency")
- unset(CTEST_EXTRA_CONFIG)
- unset(CASE_TEST_PREFIX_CODE)
- unset(CASE_CMAKELISTS_SUFFIX_CODE)
- endfunction()
- run_CTestScriptVariableCommandLine()
- # 3. Set subprojects via a CTest module variable on the command line
- # (will populate DartConfiguration.tcl)
- function(run_ModuleVariableCommandLine)
- set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/ModuleVariableCommandLine")
- set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/ModuleVariableCommandLine-build")
- set(RunCMake_TEST_NO_CLEAN 1)
- file(REMOVE_RECURSE "${RunCMake_TEST_SOURCE_DIR}")
- file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
- file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
- set(CASE_CMAKELISTS_SUFFIX_CODE [[
- set(someFile "${CMAKE_CURRENT_SOURCE_DIR}/test.cmake")
- add_test(NAME SuccessfulTest COMMAND "${CMAKE_COMMAND}" --version)
- set_property(TEST SuccessfulTest PROPERTY LABELS MySubproject)
- add_test(NAME FailingTest
- COMMAND ${CMAKE_COMMAND} -E compare_files "${someFile}" "${someFile}xxx")
- set_property(TEST FailingTest PROPERTY LABELS MySubproject)
- ]])
- configure_file(${RunCMake_SOURCE_DIR}/CMakeLists.txt.in
- ${RunCMake_TEST_SOURCE_DIR}/CMakeLists.txt @ONLY)
- set(RunCMake_TEST_OPTIONS "-DCTEST_LABELS_FOR_SUBPROJECTS:STRING=MySubproject")
- run_cmake(ModuleVariableCommandLine-cmake)
- unset(RunCMake_TEST_OPTIONS)
- run_cmake_command(ModuleVariableCommandLine ${CMAKE_CTEST_COMMAND} -C Debug -V)
- unset(RunCMake_TEST_SOURCE_DIR)
- unset(RunCMake_TEST_BINARY_DIR)
- unset(RunCMake_TEST_NO_CLEAN)
- unset(CASE_CMAKELISTS_SUFFIX_CODE)
- endfunction()
- run_ModuleVariableCommandLine()
- # 4. Set subprojects via a CTest module variable in CMakeLists.txt
- # (will populate DartConfiguration.tcl)
- function(run_ModuleVariableCMakeLists)
- set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/ModuleVariableCMakeLists")
- set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/ModuleVariableCMakeLists-build")
- set(RunCMake_TEST_NO_CLEAN 1)
- file(REMOVE_RECURSE "${RunCMake_TEST_SOURCE_DIR}")
- file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
- file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
- set(CASE_CMAKELISTS_PREFIX_CODE [[
- set(CTEST_LABELS_FOR_SUBPROJECTS MySubproject)
- ]])
- set(CASE_CMAKELISTS_SUFFIX_CODE [[
- set(someFile "${CMAKE_CURRENT_SOURCE_DIR}/test.cmake")
- add_test(NAME SuccessfulTest COMMAND "${CMAKE_COMMAND}" --version)
- set_property(TEST SuccessfulTest PROPERTY LABELS MySubproject)
- add_test(NAME FailingTest
- COMMAND ${CMAKE_COMMAND} -E compare_files "${someFile}" "${someFile}xxx")
- set_property(TEST FailingTest PROPERTY LABELS MySubproject)
- ]])
- configure_file(${RunCMake_SOURCE_DIR}/CMakeLists.txt.in
- ${RunCMake_TEST_SOURCE_DIR}/CMakeLists.txt @ONLY)
- run_cmake(ModuleVariableCMakeLists-cmake)
- run_cmake_command(ModuleVariableCMakeLists ${CMAKE_CTEST_COMMAND} -C Debug -V)
- unset(RunCMake_TEST_SOURCE_DIR)
- unset(RunCMake_TEST_BINARY_DIR)
- unset(RunCMake_TEST_NO_CLEAN)
- unset(CASE_CMAKELISTS_SUFFIX_CODE)
- unset(CASE_CMAKELISTS_SUFFIX_CODE)
- endfunction()
- run_ModuleVariableCMakeLists()
- # The remaining tests set subprojects in CTestConfig.cmake. Settings in this
- # config file are shared by both the CTest module and the ctest command line
- # `Dashboard Client` mode (e.g. ctest -S).
- function(run_ModuleVariableCTestConfig CASE_NAME)
- set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/${CASE_NAME}")
- set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${CASE_NAME}-build")
- set(RunCMake_TEST_NO_CLEAN 1)
- file(REMOVE_RECURSE "${RunCMake_TEST_SOURCE_DIR}")
- file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
- file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
- set(CTEST_EXTRA_CONFIG "set(CTEST_LABELS_FOR_SUBPROJECTS \"MySubproject\")")
- configure_file(${RunCMake_SOURCE_DIR}/CTestConfig.cmake.in
- ${RunCMake_TEST_SOURCE_DIR}/CTestConfig.cmake @ONLY)
- set(CASE_CMAKELISTS_SUFFIX_CODE [[
- set(someFile "${CMAKE_CURRENT_SOURCE_DIR}/test.cmake")
- add_test(NAME SuccessfulTest COMMAND "${CMAKE_COMMAND}" --version)
- set_property(TEST SuccessfulTest PROPERTY LABELS MySubproject)
- add_test(NAME FailingTest
- COMMAND ${CMAKE_COMMAND} -E compare_files "${someFile}" "${someFile}xxx")
- set_property(TEST FailingTest PROPERTY LABELS MySubproject)
- add_test(NAME AnotherSuccessfulTest COMMAND "${CMAKE_COMMAND}" --version)
- set_property(TEST AnotherSuccessfulTest PROPERTY LABELS NotASubproject)
- ]])
- configure_file(${RunCMake_SOURCE_DIR}/CMakeLists.txt.in
- ${RunCMake_TEST_SOURCE_DIR}/CMakeLists.txt @ONLY)
- run_cmake(${CASE_NAME}-cmake)
- run_cmake_command(${CASE_NAME} ${CMAKE_CTEST_COMMAND} -C Debug -V ${ARGN})
- unset(RunCMake_TEST_SOURCE_DIR)
- unset(RunCMake_TEST_BINARY_DIR)
- unset(RunCMake_TEST_NO_CLEAN)
- unset(CTEST_EXTRA_CONFIG)
- unset(CASE_CMAKELISTS_SUFFIX_CODE)
- endfunction()
- # 5. Check that the Subproject timing Summary is printed
- run_ModuleVariableCTestConfig(ModuleVariableCTestConfig)
- # 6. Use --no-subproject-summary to disable the Subproject timing summary.
- run_ModuleVariableCTestConfig(ModuleVariableCTestConfigNoSummary --no-subproject-summary)
- # 7. Verify that subprojects are sent to CDash when running a CTest script
- function(run_CTestConfigCTestScript)
- set(CTEST_EXTRA_CONFIG [[
- set(CTEST_USE_LAUNCHERS 1)
- set(CTEST_LABELS_FOR_SUBPROJECTS "MyProductionCode;MyExperimentalFeature")
- ]])
- set(CASE_TEST_PREFIX_CODE [[
- file(COPY "${CTEST_RUNCMAKE_SOURCE_DIRECTORY}/MyProductionCode"
- DESTINATION ${CTEST_SOURCE_DIRECTORY})
- file(COPY "${CTEST_RUNCMAKE_SOURCE_DIRECTORY}/MyExperimentalFeature"
- DESTINATION ${CTEST_SOURCE_DIRECTORY})
- ]])
- set(CASE_CMAKELISTS_SUFFIX_CODE [[
- add_subdirectory(MyExperimentalFeature)
- add_subdirectory(MyProductionCode)
- ]])
- run_ctest(CTestConfigCTestScript)
- unset(CTEST_EXTRA_CONFIG)
- unset(CASE_TEST_PREFIX_CODE)
- unset(CASE_CMAKELISTS_SUFFIX_CODE)
- endfunction()
- run_CTestConfigCTestScript()
|