| 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 |
| 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) |
| ]]) |
| |
| 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() |