RunCMakeTest.cmake 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. include(RunCTest)
  2. # 1. Specify subprojects in the CTest script
  3. function(run_CTestScriptVariable)
  4. set(CTEST_EXTRA_CONFIG "set(CTEST_USE_LAUNCHERS 1)")
  5. set(CASE_TEST_PREFIX_CODE [[
  6. file(COPY "${CTEST_RUNCMAKE_SOURCE_DIRECTORY}/MyProductionCode"
  7. DESTINATION ${CTEST_SOURCE_DIRECTORY})
  8. file(COPY "${CTEST_RUNCMAKE_SOURCE_DIRECTORY}/MyExperimentalFeature"
  9. DESTINATION ${CTEST_SOURCE_DIRECTORY})
  10. set(CTEST_LABELS_FOR_SUBPROJECTS "MyProductionCode;MyExperimentalFeature")
  11. ]])
  12. set(CASE_CMAKELISTS_SUFFIX_CODE [[
  13. add_subdirectory(MyExperimentalFeature)
  14. add_subdirectory(MyProductionCode)
  15. ]])
  16. run_ctest(CTestScriptVariable)
  17. unset(CTEST_EXTRA_CONFIG)
  18. unset(CASE_TEST_PREFIX_CODE)
  19. unset(CASE_CMAKELISTS_SUFFIX_CODE)
  20. endfunction()
  21. run_CTestScriptVariable()
  22. # 2. Specify subprojects via a CTest script variable on the command line e.g.
  23. # ctest -S test.cmake -DCTEST_LABELS_FOR_SUBPROJECTS:STRING="MySubproject"
  24. # Note: This test includes a failing build
  25. # Note: Also use --instrumentation mode to ensure it doesn't interfere with label generation
  26. function(run_CTestScriptVariableCommandLine)
  27. set(CTEST_EXTRA_CONFIG "set(CTEST_USE_LAUNCHERS 1)")
  28. set(CASE_TEST_PREFIX_CODE [[
  29. file(COPY "${CTEST_RUNCMAKE_SOURCE_DIRECTORY}/MyThirdPartyDependency"
  30. DESTINATION ${CTEST_SOURCE_DIRECTORY})
  31. ]])
  32. set(CASE_CMAKELISTS_SUFFIX_CODE [[
  33. add_subdirectory(MyThirdPartyDependency)
  34. set(CMAKE_EXPERIMENTAL_INSTRUMENTATION "a37d1069-1972-4901-b9c9-f194aaf2b6e0")
  35. cmake_instrumentation(DATA_VERSION 1 API_VERSION 1)
  36. ]])
  37. run_ctest(CTestScriptVariableCommandLine "-DCTEST_LABELS_FOR_SUBPROJECTS:STRING=MyThirdPartyDependency")
  38. unset(CTEST_EXTRA_CONFIG)
  39. unset(CASE_TEST_PREFIX_CODE)
  40. unset(CASE_CMAKELISTS_SUFFIX_CODE)
  41. endfunction()
  42. run_CTestScriptVariableCommandLine()
  43. # 3. Set subprojects via a CTest module variable on the command line
  44. # (will populate DartConfiguration.tcl)
  45. function(run_ModuleVariableCommandLine)
  46. set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/ModuleVariableCommandLine")
  47. set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/ModuleVariableCommandLine-build")
  48. set(RunCMake_TEST_NO_CLEAN 1)
  49. file(REMOVE_RECURSE "${RunCMake_TEST_SOURCE_DIR}")
  50. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  51. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  52. set(CASE_CMAKELISTS_SUFFIX_CODE [[
  53. set(someFile "${CMAKE_CURRENT_SOURCE_DIR}/test.cmake")
  54. add_test(NAME SuccessfulTest COMMAND "${CMAKE_COMMAND}" --version)
  55. set_property(TEST SuccessfulTest PROPERTY LABELS MySubproject)
  56. add_test(NAME FailingTest
  57. COMMAND ${CMAKE_COMMAND} -E compare_files "${someFile}" "${someFile}xxx")
  58. set_property(TEST FailingTest PROPERTY LABELS MySubproject)
  59. ]])
  60. configure_file(${RunCMake_SOURCE_DIR}/CMakeLists.txt.in
  61. ${RunCMake_TEST_SOURCE_DIR}/CMakeLists.txt @ONLY)
  62. set(RunCMake_TEST_OPTIONS "-DCTEST_LABELS_FOR_SUBPROJECTS:STRING=MySubproject")
  63. run_cmake(ModuleVariableCommandLine-cmake)
  64. unset(RunCMake_TEST_OPTIONS)
  65. run_cmake_command(ModuleVariableCommandLine ${CMAKE_CTEST_COMMAND} -C Debug -V)
  66. unset(RunCMake_TEST_SOURCE_DIR)
  67. unset(RunCMake_TEST_BINARY_DIR)
  68. unset(RunCMake_TEST_NO_CLEAN)
  69. unset(CASE_CMAKELISTS_SUFFIX_CODE)
  70. endfunction()
  71. run_ModuleVariableCommandLine()
  72. # 4. Set subprojects via a CTest module variable in CMakeLists.txt
  73. # (will populate DartConfiguration.tcl)
  74. function(run_ModuleVariableCMakeLists)
  75. set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/ModuleVariableCMakeLists")
  76. set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/ModuleVariableCMakeLists-build")
  77. set(RunCMake_TEST_NO_CLEAN 1)
  78. file(REMOVE_RECURSE "${RunCMake_TEST_SOURCE_DIR}")
  79. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  80. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  81. set(CASE_CMAKELISTS_PREFIX_CODE [[
  82. set(CTEST_LABELS_FOR_SUBPROJECTS MySubproject)
  83. ]])
  84. set(CASE_CMAKELISTS_SUFFIX_CODE [[
  85. set(someFile "${CMAKE_CURRENT_SOURCE_DIR}/test.cmake")
  86. add_test(NAME SuccessfulTest COMMAND "${CMAKE_COMMAND}" --version)
  87. set_property(TEST SuccessfulTest PROPERTY LABELS MySubproject)
  88. add_test(NAME FailingTest
  89. COMMAND ${CMAKE_COMMAND} -E compare_files "${someFile}" "${someFile}xxx")
  90. set_property(TEST FailingTest PROPERTY LABELS MySubproject)
  91. ]])
  92. configure_file(${RunCMake_SOURCE_DIR}/CMakeLists.txt.in
  93. ${RunCMake_TEST_SOURCE_DIR}/CMakeLists.txt @ONLY)
  94. run_cmake(ModuleVariableCMakeLists-cmake)
  95. run_cmake_command(ModuleVariableCMakeLists ${CMAKE_CTEST_COMMAND} -C Debug -V)
  96. unset(RunCMake_TEST_SOURCE_DIR)
  97. unset(RunCMake_TEST_BINARY_DIR)
  98. unset(RunCMake_TEST_NO_CLEAN)
  99. unset(CASE_CMAKELISTS_SUFFIX_CODE)
  100. unset(CASE_CMAKELISTS_SUFFIX_CODE)
  101. endfunction()
  102. run_ModuleVariableCMakeLists()
  103. # The remaining tests set subprojects in CTestConfig.cmake. Settings in this
  104. # config file are shared by both the CTest module and the ctest command line
  105. # `Dashboard Client` mode (e.g. ctest -S).
  106. function(run_ModuleVariableCTestConfig CASE_NAME)
  107. set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/${CASE_NAME}")
  108. set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${CASE_NAME}-build")
  109. set(RunCMake_TEST_NO_CLEAN 1)
  110. file(REMOVE_RECURSE "${RunCMake_TEST_SOURCE_DIR}")
  111. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  112. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  113. set(CTEST_EXTRA_CONFIG "set(CTEST_LABELS_FOR_SUBPROJECTS \"MySubproject\")")
  114. configure_file(${RunCMake_SOURCE_DIR}/CTestConfig.cmake.in
  115. ${RunCMake_TEST_SOURCE_DIR}/CTestConfig.cmake @ONLY)
  116. set(CASE_CMAKELISTS_SUFFIX_CODE [[
  117. set(someFile "${CMAKE_CURRENT_SOURCE_DIR}/test.cmake")
  118. add_test(NAME SuccessfulTest COMMAND "${CMAKE_COMMAND}" --version)
  119. set_property(TEST SuccessfulTest PROPERTY LABELS MySubproject)
  120. add_test(NAME FailingTest
  121. COMMAND ${CMAKE_COMMAND} -E compare_files "${someFile}" "${someFile}xxx")
  122. set_property(TEST FailingTest PROPERTY LABELS MySubproject)
  123. add_test(NAME AnotherSuccessfulTest COMMAND "${CMAKE_COMMAND}" --version)
  124. set_property(TEST AnotherSuccessfulTest PROPERTY LABELS NotASubproject)
  125. ]])
  126. configure_file(${RunCMake_SOURCE_DIR}/CMakeLists.txt.in
  127. ${RunCMake_TEST_SOURCE_DIR}/CMakeLists.txt @ONLY)
  128. run_cmake(${CASE_NAME}-cmake)
  129. run_cmake_command(${CASE_NAME} ${CMAKE_CTEST_COMMAND} -C Debug -V ${ARGN})
  130. unset(RunCMake_TEST_SOURCE_DIR)
  131. unset(RunCMake_TEST_BINARY_DIR)
  132. unset(RunCMake_TEST_NO_CLEAN)
  133. unset(CTEST_EXTRA_CONFIG)
  134. unset(CASE_CMAKELISTS_SUFFIX_CODE)
  135. endfunction()
  136. # 5. Check that the Subproject timing Summary is printed
  137. run_ModuleVariableCTestConfig(ModuleVariableCTestConfig)
  138. # 6. Use --no-subproject-summary to disable the Subproject timing summary.
  139. run_ModuleVariableCTestConfig(ModuleVariableCTestConfigNoSummary --no-subproject-summary)
  140. # 7. Verify that subprojects are sent to CDash when running a CTest script
  141. function(run_CTestConfigCTestScript)
  142. set(CTEST_EXTRA_CONFIG [[
  143. set(CTEST_USE_LAUNCHERS 1)
  144. set(CTEST_LABELS_FOR_SUBPROJECTS "MyProductionCode;MyExperimentalFeature")
  145. ]])
  146. set(CASE_TEST_PREFIX_CODE [[
  147. file(COPY "${CTEST_RUNCMAKE_SOURCE_DIRECTORY}/MyProductionCode"
  148. DESTINATION ${CTEST_SOURCE_DIRECTORY})
  149. file(COPY "${CTEST_RUNCMAKE_SOURCE_DIRECTORY}/MyExperimentalFeature"
  150. DESTINATION ${CTEST_SOURCE_DIRECTORY})
  151. ]])
  152. set(CASE_CMAKELISTS_SUFFIX_CODE [[
  153. add_subdirectory(MyExperimentalFeature)
  154. add_subdirectory(MyProductionCode)
  155. ]])
  156. run_ctest(CTestConfigCTestScript)
  157. unset(CTEST_EXTRA_CONFIG)
  158. unset(CASE_TEST_PREFIX_CODE)
  159. unset(CASE_CMAKELISTS_SUFFIX_CODE)
  160. endfunction()
  161. run_CTestConfigCTestScript()