|  | @@ -0,0 +1,185 @@
 | 
	
		
			
				|  |  | +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()
 |