diff options
author | Brad King <brad.king@kitware.com> | 2021-02-05 11:57:18 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2021-02-05 11:57:28 (GMT) |
commit | 2c2eb777f4def3c82b198f9a51533aebcd8e78bc (patch) | |
tree | 5b80852ad57fa527d2ef96a9a8a4cd0c8ee7401e /Tests | |
parent | cb282b2433892495f2d9848b626e6c00da6dd7d2 (diff) | |
parent | 9b5289ebd8e6e27f6d909158472b9164718a7c6b (diff) | |
download | CMake-2c2eb777f4def3c82b198f9a51533aebcd8e78bc.zip CMake-2c2eb777f4def3c82b198f9a51533aebcd8e78bc.tar.gz CMake-2c2eb777f4def3c82b198f9a51533aebcd8e78bc.tar.bz2 |
Merge topic 'build-test-presets'
9b5289ebd8 Help: Add release note for build and test presets
c8a5cd6871 Tests: Update RunCMake/CMakePresets --list-presets
69a5cf23a2 Tests: Update RunCMake/CommandLine BuildDir
b500935b94 Tests: Add test preset tests
74a86566f0 Tests: Add build preset tests
56751c83aa Tests: Factor out RunCMake.CMakePresets schema validation
676ecf0d37 cmake-presets: Add build and test presets
4f4f2028b8 Help: Add documentation for buildPresets and testPresets
...
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !5681
Diffstat (limited to 'Tests')
81 files changed, 800 insertions, 30 deletions
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 549d8eb..91fe6ca 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -805,6 +805,8 @@ add_RunCMake_test(PrecompileHeaders -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID} add_RunCMake_test("UnityBuild") add_RunCMake_test(CMakePresets -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA}) +add_RunCMake_test(CMakePresetsBuild -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA}) +add_RunCMake_test(CMakePresetsTest -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA}) if(${CMAKE_GENERATOR} MATCHES "Make|Ninja") add_RunCMake_test(TransformDepfile) diff --git a/Tests/RunCMake/CMakePresets/ListPresets-stdout.txt b/Tests/RunCMake/CMakePresets/ListPresets-stdout.txt index 1758f33..60d6adb 100644 --- a/Tests/RunCMake/CMakePresets/ListPresets-stdout.txt +++ b/Tests/RunCMake/CMakePresets/ListPresets-stdout.txt @@ -1,5 +1,5 @@ ^Not searching for unused variables given on the command line\. -Available presets: +Available configure presets: "zzzzzz" - Sleepy "aaaaaaaa" - Screaming diff --git a/Tests/RunCMake/CMakePresets/ListPresetsHidden-stdout.txt b/Tests/RunCMake/CMakePresets/ListPresetsHidden-stdout.txt index 1758f33..60d6adb 100644 --- a/Tests/RunCMake/CMakePresets/ListPresetsHidden-stdout.txt +++ b/Tests/RunCMake/CMakePresets/ListPresetsHidden-stdout.txt @@ -1,5 +1,5 @@ ^Not searching for unused variables given on the command line\. -Available presets: +Available configure presets: "zzzzzz" - Sleepy "aaaaaaaa" - Screaming diff --git a/Tests/RunCMake/CMakePresets/ListPresetsNoSuchPreset-stdout.txt b/Tests/RunCMake/CMakePresets/ListPresetsNoSuchPreset-stdout.txt index 1758f33..60d6adb 100644 --- a/Tests/RunCMake/CMakePresets/ListPresetsNoSuchPreset-stdout.txt +++ b/Tests/RunCMake/CMakePresets/ListPresetsNoSuchPreset-stdout.txt @@ -1,5 +1,5 @@ ^Not searching for unused variables given on the command line\. -Available presets: +Available configure presets: "zzzzzz" - Sleepy "aaaaaaaa" - Screaming diff --git a/Tests/RunCMake/CMakePresets/ListPresetsWorkingDir-stdout.txt b/Tests/RunCMake/CMakePresets/ListPresetsWorkingDir-stdout.txt index 1758f33..60d6adb 100644 --- a/Tests/RunCMake/CMakePresets/ListPresetsWorkingDir-stdout.txt +++ b/Tests/RunCMake/CMakePresets/ListPresetsWorkingDir-stdout.txt @@ -1,5 +1,5 @@ ^Not searching for unused variables given on the command line\. -Available presets: +Available configure presets: "zzzzzz" - Sleepy "aaaaaaaa" - Screaming diff --git a/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake b/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake index 1ffda3d..25a7f2f 100644 --- a/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake +++ b/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake @@ -9,21 +9,7 @@ endif() set(RunCMake-check-file check.cmake) -function(validate_schema file expected_result) - execute_process( - COMMAND "${PYTHON_EXECUTABLE}" "${RunCMake_SOURCE_DIR}/validate_schema.py" "${file}" - RESULT_VARIABLE _result - OUTPUT_VARIABLE _output - ERROR_VARIABLE _error - ) - if(NOT _result STREQUAL expected_result) - string(REPLACE "\n" "\n" _output_p "${_output}") - string(REPLACE "\n" "\n" _error_p "${_error}") - string(APPEND RunCMake_TEST_FAILED "Expected result of validating ${file}: ${expected_result}\nActual result: ${_result}\nOutput:\n${_output_p}\nError:\n${_error_p}") - endif() - - set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE) -endfunction() +include("${RunCMake_SOURCE_DIR}/validate_schema.cmake") function(run_cmake_presets name) set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/${name}") diff --git a/Tests/RunCMake/CMakePresets/validate_schema.cmake b/Tests/RunCMake/CMakePresets/validate_schema.cmake new file mode 100644 index 0000000..68b638f --- /dev/null +++ b/Tests/RunCMake/CMakePresets/validate_schema.cmake @@ -0,0 +1,19 @@ +function(validate_schema file expected_result) + if (NOT CMakePresets_VALIDATE_SCRIPT_PATH) + set(CMakePresets_VALIDATE_SCRIPT_PATH "${RunCMake_SOURCE_DIR}/validate_schema.py") + endif() + + execute_process( + COMMAND "${PYTHON_EXECUTABLE}" "${CMakePresets_VALIDATE_SCRIPT_PATH}" "${file}" + RESULT_VARIABLE _result + OUTPUT_VARIABLE _output + ERROR_VARIABLE _error + ) + if(NOT _result STREQUAL expected_result) + string(REPLACE "\n" "\n " _output_p "${_output}") + string(REPLACE "\n" "\n " _error_p "${_error}") + string(APPEND RunCMake_TEST_FAILED "Expected result of validating ${file}: ${expected_result}\nActual result: ${_result}\nOutput:\n ${_output_p}\nError:\n ${_error_p}\n") + endif() + + set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE) +endfunction() diff --git a/Tests/RunCMake/CMakePresetsBuild/CMakeLists.txt.in b/Tests/RunCMake/CMakePresetsBuild/CMakeLists.txt.in new file mode 100644 index 0000000..129184a --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/CMakeLists.txt.in @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.19) +project("@CASE_NAME@" NONE) +include("@CASE_SOURCE_DIR@/@CASE_NAME@.cmake") diff --git a/Tests/RunCMake/CMakePresetsBuild/Good-build-build-other-check.cmake b/Tests/RunCMake/CMakePresetsBuild/Good-build-build-other-check.cmake new file mode 100644 index 0000000..b2699db --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/Good-build-build-other-check.cmake @@ -0,0 +1,5 @@ +include("${RunCMake_SOURCE_DIR}/TestVariable.cmake") + +test_environment_variable("TEST_ENV_" "other") + +include("${RunCMake_SOURCE_DIR}/check.cmake") diff --git a/Tests/RunCMake/CMakePresetsBuild/Good-build-macros-check.cmake b/Tests/RunCMake/CMakePresetsBuild/Good-build-macros-check.cmake new file mode 100644 index 0000000..7801c3d --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/Good-build-macros-check.cmake @@ -0,0 +1,14 @@ +include("${RunCMake_SOURCE_DIR}/TestVariable.cmake") + +if(RunCMake_GENERATOR STREQUAL "NMake Makefiles JOM") + # JOM removes the '$' and content following it. +else() + test_environment_variable("TEST_DOLLAR" "x\\$x") +endif() +test_environment_variable("TEST_GENERATOR" "${RunCMake_GENERATOR}") +test_environment_variable("TEST_PRESET_NAME" "xmacrosx") +test_environment_variable("TEST_SOURCE_DIR_" "x[^\n]*[/\\\\]Tests[/\\\\]RunCMake[/\\\\]CMakePresetsBuild[/\\\\]Goodx") +test_environment_variable("TEST_SOURCE_DIR_NAME" "xGoodx") +test_environment_variable("TEST_SOURCE_PARENT_DIR" "x[^\n]*[/\\\\]Tests[/\\\\]RunCMake[/\\\\]CMakePresetsBuildx") + +include("${RunCMake_SOURCE_DIR}/check.cmake") diff --git a/Tests/RunCMake/CMakePresetsBuild/Good-build-noEnvironment-check.cmake b/Tests/RunCMake/CMakePresetsBuild/Good-build-noEnvironment-check.cmake new file mode 100644 index 0000000..94a54ca --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/Good-build-noEnvironment-check.cmake @@ -0,0 +1,6 @@ +string(FIND "${actual_stdout}" "TEST_ENV_" TEST_ENV_POS) +if (NOT TEST_ENV_POS EQUAL -1) + message(FATAL_ERROR "Found TEST_ENV_ in environment") +endif() + +include("${RunCMake_SOURCE_DIR}/check.cmake") diff --git a/Tests/RunCMake/CMakePresetsBuild/Good-build-withEnvironment-check.cmake b/Tests/RunCMake/CMakePresetsBuild/Good-build-withEnvironment-check.cmake new file mode 100644 index 0000000..9c6b5c2 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/Good-build-withEnvironment-check.cmake @@ -0,0 +1,8 @@ +include("${RunCMake_SOURCE_DIR}/TestVariable.cmake") + +test_environment_variable("TEST_ENV_" "Environment variable") +test_environment_variable("TEST_ENV_OVERRIDE_" "Overridden") +test_environment_variable("TEST_ENV_OVERRIDE_REF" "xOverriddenx") +test_environment_variable("TEST_ENV_REF" "xEnvironment variablex") + +include("${RunCMake_SOURCE_DIR}/check.cmake") diff --git a/Tests/RunCMake/CMakePresetsBuild/Good.cmake b/Tests/RunCMake/CMakePresetsBuild/Good.cmake new file mode 100644 index 0000000..491d367 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/Good.cmake @@ -0,0 +1,3 @@ +add_custom_target(good ALL) +add_custom_command(TARGET good PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E environment) diff --git a/Tests/RunCMake/CMakePresetsBuild/Good.json.in b/Tests/RunCMake/CMakePresetsBuild/Good.json.in new file mode 100644 index 0000000..fd43c4e --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/Good.json.in @@ -0,0 +1,78 @@ +{ + "version": 2, + "configurePresets": [ + { + "name": "default", + "generator": "@RunCMake_GENERATOR@", + "binaryDir": "${sourceDir}/build/${presetName}", + "environment": { + "TEST_ENV_": "Environment variable", + "TEST_ENV_OVERRIDE_": "Environment variable", + "TEST_ENV_OVERRIDE_REF": "x$env{TEST_ENV_OVERRIDE_}x" + } + }, + { + "name": "other", + "inherits": "default", + "environment": { + "TEST_ENV_": "other" + } + } + ], + "buildPresets": [ + { + "name": "build-default", + "hidden": true, + "inherits": [], + "configurePreset": "default", + "vendor": {}, + "displayName": "", + "description": "", + "inheritConfigureEnvironment": true, + "environment": {}, + "jobs": 0, + "targets": [], + "configuration": "", + "verbose": true, + "nativeToolOptions": [] + }, + { + "name": "build-other", + "configurePreset": "other" + }, + { + "name": "withEnvironment", + "inherits": "build-default", + "environment": { + "TEST_ENV_OVERRIDE_": "Overridden", + "TEST_ENV_REF": "x$env{TEST_ENV_}x", + "TEST_ENV_OVERRIDE_REF": "x$env{TEST_ENV_OVERRIDE_}x" + } + }, + { + "name": "noEnvironment", + "inherits": "build-default", + "inheritConfigureEnvironment": false + }, + { + "name": "macros", + "inherits": "build-default", + "inheritConfigureEnvironment": false, + "environment": { + "TEST_SOURCE_DIR_": "x${sourceDir}x", + "TEST_SOURCE_PARENT_DIR": "x${sourceParentDir}x", + "TEST_SOURCE_DIR_NAME": "x${sourceDirName}x", + "TEST_PRESET_NAME": "x${presetName}x", + "TEST_GENERATOR": "x${generator}x", + "TEST_DOLLAR": "x${dollar}x" + } + }, + { + "name": "vendorObject", + "configurePreset": "default", + "vendor": { + "example.com": "value" + } + } + ] +} diff --git a/Tests/RunCMake/CMakePresetsBuild/Invalid-build-badConfigurePreset-result.txt b/Tests/RunCMake/CMakePresetsBuild/Invalid-build-badConfigurePreset-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/Invalid-build-badConfigurePreset-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMakePresetsBuild/Invalid-build-badConfigurePreset-stderr.txt b/Tests/RunCMake/CMakePresetsBuild/Invalid-build-badConfigurePreset-stderr.txt new file mode 100644 index 0000000..7c3255d --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/Invalid-build-badConfigurePreset-stderr.txt @@ -0,0 +1,2 @@ +CMake Error: No such configure preset in [^ +]*/Tests/RunCMake/CMakePresetsBuild/Invalid: "dne" diff --git a/Tests/RunCMake/CMakePresetsBuild/Invalid-build-hidden-result.txt b/Tests/RunCMake/CMakePresetsBuild/Invalid-build-hidden-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/Invalid-build-hidden-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMakePresetsBuild/Invalid-build-hidden-stderr.txt b/Tests/RunCMake/CMakePresetsBuild/Invalid-build-hidden-stderr.txt new file mode 100644 index 0000000..f10c7b8 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/Invalid-build-hidden-stderr.txt @@ -0,0 +1,2 @@ +CMake Error: Cannot use hidden build preset in [^ +]*/Tests/RunCMake/CMakePresetsBuild/Invalid: "hidden" diff --git a/Tests/RunCMake/CMakePresetsBuild/Invalid-build-vendorMacro-result.txt b/Tests/RunCMake/CMakePresetsBuild/Invalid-build-vendorMacro-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/Invalid-build-vendorMacro-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMakePresetsBuild/Invalid-build-vendorMacro-stderr.txt b/Tests/RunCMake/CMakePresetsBuild/Invalid-build-vendorMacro-stderr.txt new file mode 100644 index 0000000..a3b951f --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/Invalid-build-vendorMacro-stderr.txt @@ -0,0 +1 @@ +CMake Error: Could not evaluate build preset "vendorMacro": Invalid macro expansion diff --git a/Tests/RunCMake/CMakePresetsBuild/Invalid.cmake b/Tests/RunCMake/CMakePresetsBuild/Invalid.cmake new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/Invalid.cmake diff --git a/Tests/RunCMake/CMakePresetsBuild/Invalid.json.in b/Tests/RunCMake/CMakePresetsBuild/Invalid.json.in new file mode 100644 index 0000000..cf56cef --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/Invalid.json.in @@ -0,0 +1,27 @@ +{ + "version": 2, + "configurePresets": [ + { + "name": "default", + "generator": "@RunCMake_GENERATOR@", + "binaryDir": "${sourceDir}/build/${presetName}" + } + ], + "buildPresets": [ + { + "name": "hidden", + "hidden": true + }, + { + "name": "vendorMacro", + "configurePreset": "default", + "environment": { + "TEST": "$vendor{bad.TEST}" + } + }, + { + "name": "badConfigurePreset", + "configurePreset": "dne" + } + ] +} diff --git a/Tests/RunCMake/CMakePresetsBuild/ListPresets-build-x-stdout.txt b/Tests/RunCMake/CMakePresetsBuild/ListPresets-build-x-stdout.txt new file mode 100644 index 0000000..4d30707 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/ListPresets-build-x-stdout.txt @@ -0,0 +1,5 @@ +Available build presets: + + "build-default" - build-default displayName + "empty" + "display" - display displayName diff --git a/Tests/RunCMake/CMakePresetsBuild/ListPresets.cmake b/Tests/RunCMake/CMakePresetsBuild/ListPresets.cmake new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/ListPresets.cmake diff --git a/Tests/RunCMake/CMakePresetsBuild/ListPresets.json.in b/Tests/RunCMake/CMakePresetsBuild/ListPresets.json.in new file mode 100644 index 0000000..3f5e02c --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/ListPresets.json.in @@ -0,0 +1,31 @@ +{ + "version": 2, + "configurePresets": [ + { + "name": "default", + "generator": "@RunCMake_GENERATOR@", + "binaryDir": "${sourceDir}/build/${presetName}" + } + ], + "buildPresets": [ + { + "name": "build-default", + "configurePreset": "default", + "displayName": "build-default displayName", + "description": "build-default description" + }, + { + "name": "empty", + "inherits": "build-default" + }, + { + "name": "display", + "inherits": "build-default", + "displayName": "display displayName" + }, + { + "name": "hidden", + "hidden": true + } + ] +} diff --git a/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-result.txt b/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-stderr.txt b/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-stderr.txt new file mode 100644 index 0000000..fcb37bc --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-stderr.txt @@ -0,0 +1,2 @@ +CMake Error: Could not read presets from [^ +]*/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset: Invalid preset diff --git a/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset.cmake b/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset.cmake new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset.cmake diff --git a/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset.json.in b/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset.json.in new file mode 100644 index 0000000..81b2cde --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset.json.in @@ -0,0 +1,15 @@ +{ + "version": 2, + "configurePresets": [ + { + "name": "default", + "generator": "@RunCMake_GENERATOR@", + "binaryDir": "${sourceDir}/build/${presetName}" + } + ], + "buildPresets": [ + { + "name": "noConfigurePreset" + } + ] +} diff --git a/Tests/RunCMake/CMakePresetsBuild/PresetsUnsupported-build-x-result.txt b/Tests/RunCMake/CMakePresetsBuild/PresetsUnsupported-build-x-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/PresetsUnsupported-build-x-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMakePresetsBuild/PresetsUnsupported-build-x-stderr.txt b/Tests/RunCMake/CMakePresetsBuild/PresetsUnsupported-build-x-stderr.txt new file mode 100644 index 0000000..d6ae62d --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/PresetsUnsupported-build-x-stderr.txt @@ -0,0 +1,2 @@ +CMake Error: Could not read presets from [^ +]*Tests/RunCMake/CMakePresetsBuild/PresetsUnsupported: File version must be 2 or higher for build and test preset support. diff --git a/Tests/RunCMake/CMakePresetsBuild/PresetsUnsupported.json.in b/Tests/RunCMake/CMakePresetsBuild/PresetsUnsupported.json.in new file mode 100644 index 0000000..0028239 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/PresetsUnsupported.json.in @@ -0,0 +1,7 @@ +{ + "version": 1, + "configurePresets": [ + ], + "buildPresets": [ + ] +} diff --git a/Tests/RunCMake/CMakePresetsBuild/RunCMakeTest.cmake b/Tests/RunCMake/CMakePresetsBuild/RunCMakeTest.cmake new file mode 100644 index 0000000..9491524 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/RunCMakeTest.cmake @@ -0,0 +1,67 @@ +include(RunCMake) + +# Presets do not support legacy VS generator name architecture suffix. +if(RunCMake_GENERATOR MATCHES "^(Visual Studio [0-9]+ [0-9]+) ") + set(RunCMake_GENERATOR "${CMAKE_MATCH_1}") +endif() + +function(run_cmake_build_presets name CMakePresetsBuild_CONFIGURE_PRESETS CMakePresetsBuild_BUILD_PRESETS) + set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/${name}") + set(RunCMake_TEST_BINARY_DIR "${RunCMake_TEST_SOURCE_DIR}/build") + set(RunCMake_TEST_COMMAND_WORKING_DIRECTORY "${RunCMake_TEST_SOURCE_DIR}") + + set(RunCMake_TEST_NO_CLEAN TRUE) + + file(REMOVE_RECURSE "${RunCMake_TEST_SOURCE_DIR}") + file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}") + + set(CASE_NAME "${name}") + set(CASE_SOURCE_DIR "${RunCMake_SOURCE_DIR}") + configure_file("${RunCMake_SOURCE_DIR}/CMakeLists.txt.in" "${RunCMake_TEST_SOURCE_DIR}/CMakeLists.txt" @ONLY) + + if(NOT CMakePresetsBuild_FILE) + set(CMakePresetsBuild_FILE "${RunCMake_SOURCE_DIR}/${name}.json.in") + endif() + if(EXISTS "${CMakePresetsBuild_FILE}") + configure_file("${CMakePresetsBuild_FILE}" "${RunCMake_TEST_SOURCE_DIR}/CMakePresets.json" @ONLY) + endif() + + if(NOT CMakeUserPresets_FILE) + set(CMakeUserPresets_FILE "${RunCMake_SOURCE_DIR}/${name}User.json.in") + endif() + if(EXISTS "${CMakeUserPresets_FILE}") + configure_file("${CMakeUserPresets_FILE}" "${RunCMake_TEST_SOURCE_DIR}/CMakeUserPresets.json" @ONLY) + endif() + + if (NOT CMakePresetsBuild_BUILD_ONLY) + foreach(CONFIGURE_PRESET ${CMakePresetsBuild_CONFIGURE_PRESETS}) + run_cmake_command("${name}-configure-${CONFIGURE_PRESET}" + "${CMAKE_COMMAND}" "--preset" "${CONFIGURE_PRESET}") + endforeach() + endif() + + foreach(BUILD_PRESET ${CMakePresetsBuild_BUILD_PRESETS}) + if (EXISTS "${RunCMake_SOURCE_DIR}/${name}-build-${BUILD_PRESET}-check.cmake") + set(RunCMake-check-file "${name}-build-${BUILD_PRESET}-check.cmake") + else() + set(RunCMake-check-file "check.cmake") + endif() + + run_cmake_command(${name}-build-${BUILD_PRESET} + ${CMAKE_COMMAND} "--build" "--preset" "${BUILD_PRESET}" ${ARGN}) + endforeach() +endfunction() + +set(CMakePresets_SCHEMA_EXPECTED_RESULT 0) + +run_cmake_build_presets(Good "default;other" "build-other;withEnvironment;noEnvironment;macros;vendorObject") + +set(CMakePresetsBuild_BUILD_ONLY 1) +run_cmake_build_presets(ListPresets "x" "x" "--list-presets") +run_cmake_build_presets(NoConfigurePreset "x" "noConfigurePreset") +run_cmake_build_presets(Invalid "x" "hidden;vendorMacro;badConfigurePreset") + +set(CMakePresets_SCHEMA_EXPECTED_RESULT 1) +run_cmake_build_presets(PresetsUnsupported "x" "x") +set(CMakePresets_SCHEMA_EXPECTED_RESULT 0) +set(CMakePresetsBuild_BUILD_ONLY 0) diff --git a/Tests/RunCMake/CMakePresetsBuild/TestVariable.cmake b/Tests/RunCMake/CMakePresetsBuild/TestVariable.cmake new file mode 100644 index 0000000..3113dcc --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/TestVariable.cmake @@ -0,0 +1,14 @@ +function(test_environment_variable name expected_value) + string(REGEX MATCH "${name}=([^\n]*)" REGEX_RESULT "${actual_stdout}") + if(NOT REGEX_RESULT) + string(APPEND RunCMake_TEST_FAILED "Environment variable '${name}' is not defined.\n") + else() + set(actual_value "${CMAKE_MATCH_1}") + if(NOT "${actual_value}" MATCHES "${expected_value}") + string(REPLACE "\n" "\n " _actual "${expected_value}") + string(REPLACE "\n" "\n " _expect "${actual_value}") + string(APPEND RunCMake_TEST_FAILED "Expected value of environment variable '${name}':\n ${_expect}\nActual value:\n ${_actual}\n") + endif() + endif() + set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE) +endfunction() diff --git a/Tests/RunCMake/CMakePresetsBuild/check.cmake b/Tests/RunCMake/CMakePresetsBuild/check.cmake new file mode 100644 index 0000000..e79c4f1 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsBuild/check.cmake @@ -0,0 +1,3 @@ +set(CMakePresets_VALIDATE_SCRIPT_PATH "${RunCMake_SOURCE_DIR}/../CMakePresets/validate_schema.py") +include("${RunCMake_SOURCE_DIR}/../CMakePresets/validate_schema.cmake") +include("${RunCMake_SOURCE_DIR}/../CMakePresets/check.cmake") diff --git a/Tests/RunCMake/CMakePresetsTest/CMakeLists.txt.in b/Tests/RunCMake/CMakePresetsTest/CMakeLists.txt.in new file mode 100644 index 0000000..129184a --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/CMakeLists.txt.in @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.19) +project("@CASE_NAME@" NONE) +include("@CASE_SOURCE_DIR@/@CASE_NAME@.cmake") diff --git a/Tests/RunCMake/CMakePresetsTest/Good-indexFile.txt b/Tests/RunCMake/CMakePresetsTest/Good-indexFile.txt new file mode 100644 index 0000000..4ac2314 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Good-indexFile.txt @@ -0,0 +1 @@ +2,,2 diff --git a/Tests/RunCMake/CMakePresetsTest/Good-test-config-debug-stdout.txt b/Tests/RunCMake/CMakePresetsTest/Good-test-config-debug-stdout.txt new file mode 100644 index 0000000..c281c81 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Good-test-config-debug-stdout.txt @@ -0,0 +1,5 @@ +Test project [^ +]*/Tests/RunCMake/CMakePresetsTest/Good/build/default + Start 6: debug-only +.* +100% tests passed, 0 tests failed out of 1 diff --git a/Tests/RunCMake/CMakePresetsTest/Good-test-config-release-stdout.txt b/Tests/RunCMake/CMakePresetsTest/Good-test-config-release-stdout.txt new file mode 100644 index 0000000..66bfd22 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Good-test-config-release-stdout.txt @@ -0,0 +1,5 @@ +Test project [^ +]*/Tests/RunCMake/CMakePresetsTest/Good/build/default + Start 6: release-only +.* +100% tests passed, 0 tests failed out of 1 diff --git a/Tests/RunCMake/CMakePresetsTest/Good-test-exclude-stdout.txt b/Tests/RunCMake/CMakePresetsTest/Good-test-exclude-stdout.txt new file mode 100644 index 0000000..5e990de --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Good-test-exclude-stdout.txt @@ -0,0 +1,7 @@ +Test project [^ +]*/Tests/RunCMake/CMakePresetsTest/Good/build/default + Start 3: testc +.* + Start 4: testd +.* +100% tests passed, 0 tests failed out of 2 diff --git a/Tests/RunCMake/CMakePresetsTest/Good-test-index-stdout.txt b/Tests/RunCMake/CMakePresetsTest/Good-test-index-stdout.txt new file mode 100644 index 0000000..2df6fcb --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Good-test-index-stdout.txt @@ -0,0 +1,7 @@ +Test project [^ +]*/Tests/RunCMake/CMakePresetsTest/Good/build/default + Start 1: testa +.* + Start 3: testc +.* +100% tests passed, 0 tests failed out of 2 diff --git a/Tests/RunCMake/CMakePresetsTest/Good-test-indexFile-stdout.txt b/Tests/RunCMake/CMakePresetsTest/Good-test-indexFile-stdout.txt new file mode 100644 index 0000000..1366876 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Good-test-indexFile-stdout.txt @@ -0,0 +1,7 @@ +Test project [^ +]*/Tests/RunCMake/CMakePresetsTest/Good/build/default + Start 2: testb +.* + Start 4: testd +.* +100% tests passed, 0 tests failed out of 2 diff --git a/Tests/RunCMake/CMakePresetsTest/Good-test-noEnvironment-stdout.txt b/Tests/RunCMake/CMakePresetsTest/Good-test-noEnvironment-stdout.txt new file mode 100644 index 0000000..8b4845e --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Good-test-noEnvironment-stdout.txt @@ -0,0 +1,8 @@ +Test project [^ +]*/Tests/RunCMake/CMakePresetsTest/Good/build/default +.* + Start 5: test-env +.* +5: TEST_ENV_REF=xx +.* +100% tests passed, 0 tests failed out of 1 diff --git a/Tests/RunCMake/CMakePresetsTest/Good-test-showOnly-stdout.txt b/Tests/RunCMake/CMakePresetsTest/Good-test-showOnly-stdout.txt new file mode 100644 index 0000000..67ddd4f --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Good-test-showOnly-stdout.txt @@ -0,0 +1,8 @@ +Test project [^ +]*/Tests/RunCMake/CMakePresetsTest/Good/build/default + Test #1: testa + Test #2: testb + Test #3: testc + Test #4: testd + +Total Tests: 4 diff --git a/Tests/RunCMake/CMakePresetsTest/Good-withEnvironment-check.cmake b/Tests/RunCMake/CMakePresetsTest/Good-withEnvironment-check.cmake new file mode 100644 index 0000000..0c19556 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Good-withEnvironment-check.cmake @@ -0,0 +1,8 @@ +include("${RunCMake_SOURCE_DIR}/../CMakePresetsBuild/TestVariable.cmake") + +test_environment_variable("TEST_ENV" "Environment variable") +test_environment_variable("TEST_ENV_OVERRIDE" "Override") +test_environment_variable("TEST_ENV_OVERRIDE_REF" "xOverridex") +test_environment_variable("TEST_ENV_REF" "xEnvironment variablex") + +include("${RunCMake_SOURCE_DIR}/check.cmake") diff --git a/Tests/RunCMake/CMakePresetsTest/Good.cmake b/Tests/RunCMake/CMakePresetsTest/Good.cmake new file mode 100644 index 0000000..0a6cf57 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Good.cmake @@ -0,0 +1,27 @@ +enable_testing() +add_test(testa ${CMAKE_COMMAND} -E echo testa) +add_test(testb ${CMAKE_COMMAND} -E echo testb) +add_test(testc ${CMAKE_COMMAND} -E echo testc) +add_test(testd ${CMAKE_COMMAND} -E echo testd) + +set_tests_properties(testa testb testc testd + PROPERTIES LABELS "echo") +set_property(TEST testa testb + APPEND PROPERTY LABELS ab) +set_property(TEST testb testc + APPEND PROPERTY LABELS bc) +set_property(TEST testc testd + APPEND PROPERTY LABELS cd) + +add_test(test-env ${CMAKE_COMMAND} -E environment | sort) +set_tests_properties(test-env PROPERTIES LABELS "env") + +add_test(NAME debug-only + COMMAND ${CMAKE_COMMAND} -E echo debug-only + CONFIGURATIONS Debug) +add_test(NAME release-only + COMMAND ${CMAKE_COMMAND} -E echo release-only + CONFIGURATIONS Release) + +set_tests_properties(debug-only release-only + PROPERTIES LABELS "config") diff --git a/Tests/RunCMake/CMakePresetsTest/Good.json.in b/Tests/RunCMake/CMakePresetsTest/Good.json.in new file mode 100644 index 0000000..791d41f --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Good.json.in @@ -0,0 +1,184 @@ +{ + "version": 2, + "configurePresets": [ + { + "name": "default", + "generator": "@RunCMake_GENERATOR@", + "binaryDir": "${sourceDir}/build/${presetName}", + "environment": { + "TEST_ENV": "Environment variable", + "TEST_ENV_OVERRIDE": "Overridden environment variable" + } + } + ], + "buildPresets": [ + { + "name": "build-default-debug", + "configurePreset": "default", + "configuration": "Debug" + }, + { + "name": "build-default-release", + "inherits": "build-default-debug", + "configuration": "Release" + } + ], + "testPresets": [ + { + "name": "minimal", + "configurePreset": "default" + }, + { + "name": "defaults", + "hidden": false, + "inherits": [], + "vendor": {}, + "displayName": "", + "description": "", + "environment": {}, + "configurePreset": "default", + "inheritConfigureEnvironment": true, + "configuration": "", + "overwriteConfigurationFile": [], + "output": { + "shortProgress": false, + "verbosity": "default", + "debug": false, + "outputOnFailure": false, + "quiet": false, + "outputLogFile": "", + "labelSummary": true, + "subprojectSummary": true + // "maxPassedTestOutputSize": 0 + // "maxTestNameWidth": 0 + }, + "filter": { + "include": { + "name": "", + "label": "", + "useUnion": false, + "index": "" + // "index": { + // "start": 0, + // "end": 0, + // "stride": 0 + // } + }, + "exclude": { + "name": "", + "label": "", + "fixtures": { + "any": "", + "setup": "", + "cleanup": "" + } + } + }, + "execution": { + "stopOnFailure": false, + "enableFailover": false, + "jobs": 0, + "resourceSpecFile": "", + // "testLoad": 0, + "showOnly": "human", + "repeat": { + "mode": "until-pass", + "count": 1 + }, + "interactiveDebugging": false, + "scheduleRandom": false, + // "timeout": 0, + "noTestsAction": "default" + } + }, + { + "name": "noEnvironment", + "configurePreset": "default", + "inheritConfigureEnvironment": false, + "environment": { + "TEST_ENV_REF": "x$env{TEST_ENV}x" + }, + "filter": { + "include": { + "name": "test-env" + } + }, + "output": { + "verbosity": "verbose" + } + }, + { + "name": "withEnvironment", + "inherits": "noEnvironment", + "inheritConfigureEnvironment": true, + "environment": { + "TEST_ENV_OVERRIDE": "Override", + "TEST_ENV_OVERRIDE_REF": "x$env{TEST_ENV_OVERRIDE}x", + "TEST_ENV_REF": "x$env{TEST_ENV}x" + } + }, + { + "name": "config-debug", + "inherits": "minimal", + "configuration": "Debug", + "filter": { + "include": { + "label": "config" + } + } + }, + { + "name": "config-release", + "inherits": "minimal", + "configuration": "Release", + "filter": { + "include": { + "label": "config" + } + } + }, + { + "name": "exclude", + "inherits": "minimal", + "filter": { + "exclude": { + "name": "test-env", + "label": "(ab|config)" + } + } + }, + { + "name": "index", + "inherits": "minimal", + "filter": { + "include": { + "index": { + "end": 4, + "stride": 2 + } + } + } + }, + { + "name": "indexFile", + "inherits": "minimal", + "filter": { + "include": { + "index": "${sourceDir}/Good-indexFile.txt" + } + } + }, + { + "name": "showOnly", + "inherits": "minimal", + "filter": { + "include": { + "label": "echo" + } + }, + "execution": { + "showOnly": "human" + } + } + ] +} diff --git a/Tests/RunCMake/CMakePresetsTest/Invalid-test-badConfigurePreset-result.txt b/Tests/RunCMake/CMakePresetsTest/Invalid-test-badConfigurePreset-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Invalid-test-badConfigurePreset-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMakePresetsTest/Invalid-test-badConfigurePreset-stderr.txt b/Tests/RunCMake/CMakePresetsTest/Invalid-test-badConfigurePreset-stderr.txt new file mode 100644 index 0000000..9cf9987 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Invalid-test-badConfigurePreset-stderr.txt @@ -0,0 +1,2 @@ +CMake Error: No such configure preset in [^ +]*/Tests/RunCMake/CMakePresetsTest/Invalid: "dne" diff --git a/Tests/RunCMake/CMakePresetsTest/Invalid-test-hidden-result.txt b/Tests/RunCMake/CMakePresetsTest/Invalid-test-hidden-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Invalid-test-hidden-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMakePresetsTest/Invalid-test-hidden-stderr.txt b/Tests/RunCMake/CMakePresetsTest/Invalid-test-hidden-stderr.txt new file mode 100644 index 0000000..41b1b4e --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Invalid-test-hidden-stderr.txt @@ -0,0 +1,2 @@ +CMake Error: Cannot use hidden test preset in [^ +]*/Tests/RunCMake/CMakePresetsTest/Invalid: "hidden" diff --git a/Tests/RunCMake/CMakePresetsTest/Invalid-test-vendorMacro-result.txt b/Tests/RunCMake/CMakePresetsTest/Invalid-test-vendorMacro-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Invalid-test-vendorMacro-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMakePresetsTest/Invalid-test-vendorMacro-stderr.txt b/Tests/RunCMake/CMakePresetsTest/Invalid-test-vendorMacro-stderr.txt new file mode 100644 index 0000000..ed5bb98 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Invalid-test-vendorMacro-stderr.txt @@ -0,0 +1 @@ +CMake Error: Could not evaluate test preset "vendorMacro": Invalid macro expansion diff --git a/Tests/RunCMake/CMakePresetsTest/Invalid.cmake b/Tests/RunCMake/CMakePresetsTest/Invalid.cmake new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Invalid.cmake diff --git a/Tests/RunCMake/CMakePresetsTest/Invalid.json.in b/Tests/RunCMake/CMakePresetsTest/Invalid.json.in new file mode 100644 index 0000000..c7096f2 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/Invalid.json.in @@ -0,0 +1,27 @@ +{ + "version": 2, + "configurePresets": [ + { + "name": "default", + "generator": "@RunCMake_GENERATOR@", + "binaryDir": "${sourceDir}/build/${presetName}" + } + ], + "testPresets": [ + { + "name": "hidden", + "hidden": true + }, + { + "name": "vendorMacro", + "configurePreset": "default", + "environment": { + "TEST": "$vendor{bad.TEST}" + } + }, + { + "name": "badConfigurePreset", + "configurePreset": "dne" + } + ] +} diff --git a/Tests/RunCMake/CMakePresetsTest/ListPresets-test-x-stdout.txt b/Tests/RunCMake/CMakePresetsTest/ListPresets-test-x-stdout.txt new file mode 100644 index 0000000..46ffbcf --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/ListPresets-test-x-stdout.txt @@ -0,0 +1,12 @@ +Available test presets: + + "minimal" + "defaults" + "noEnvironment" + "withEnvironment" + "config-debug" + "config-release" + "exclude" + "index" + "indexFile" + "showOnly" diff --git a/Tests/RunCMake/CMakePresetsTest/ListPresets.cmake b/Tests/RunCMake/CMakePresetsTest/ListPresets.cmake new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/ListPresets.cmake diff --git a/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset-test-noConfigurePreset-result.txt b/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset-test-noConfigurePreset-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset-test-noConfigurePreset-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset-test-noConfigurePreset-stderr.txt b/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset-test-noConfigurePreset-stderr.txt new file mode 100644 index 0000000..b167f68 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset-test-noConfigurePreset-stderr.txt @@ -0,0 +1,2 @@ +CMake Error: Could not read presets from [^ +]*/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset: Invalid preset diff --git a/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset.cmake b/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset.cmake new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset.cmake diff --git a/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset.json.in b/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset.json.in new file mode 100644 index 0000000..4591cc8 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/NoConfigurePreset.json.in @@ -0,0 +1,15 @@ +{ + "version": 2, + "configurePresets": [ + { + "name": "default", + "generator": "@RunCMake_GENERATOR@", + "binaryDir": "${sourceDir}/build/${presetName}" + } + ], + "testPresets": [ + { + "name": "noConfigurePreset" + } + ] +} diff --git a/Tests/RunCMake/CMakePresetsTest/NoTestsAction-test-noTestsAction-result.txt b/Tests/RunCMake/CMakePresetsTest/NoTestsAction-test-noTestsAction-result.txt new file mode 100644 index 0000000..45a4fb7 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/NoTestsAction-test-noTestsAction-result.txt @@ -0,0 +1 @@ +8 diff --git a/Tests/RunCMake/CMakePresetsTest/NoTestsAction-test-noTestsAction-stderr.txt b/Tests/RunCMake/CMakePresetsTest/NoTestsAction-test-noTestsAction-stderr.txt new file mode 100644 index 0000000..eafba1c --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/NoTestsAction-test-noTestsAction-stderr.txt @@ -0,0 +1 @@ +No tests were found!!! diff --git a/Tests/RunCMake/CMakePresetsTest/NoTestsAction.cmake b/Tests/RunCMake/CMakePresetsTest/NoTestsAction.cmake new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/NoTestsAction.cmake diff --git a/Tests/RunCMake/CMakePresetsTest/NoTestsAction.json.in b/Tests/RunCMake/CMakePresetsTest/NoTestsAction.json.in new file mode 100644 index 0000000..20a50d6 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/NoTestsAction.json.in @@ -0,0 +1,19 @@ +{ + "version": 2, + "configurePresets": [ + { + "name": "default", + "generator": "@RunCMake_GENERATOR@", + "binaryDir": "${sourceDir}/build/${presetName}" + } + ], + "testPresets": [ + { + "name": "noTestsAction", + "configurePreset": "default", + "execution": { + "noTestsAction": "error" + } + } + ] +} diff --git a/Tests/RunCMake/CMakePresetsTest/PresetsUnsupported-test-x-result.txt b/Tests/RunCMake/CMakePresetsTest/PresetsUnsupported-test-x-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/PresetsUnsupported-test-x-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMakePresetsTest/PresetsUnsupported-test-x-stderr.txt b/Tests/RunCMake/CMakePresetsTest/PresetsUnsupported-test-x-stderr.txt new file mode 100644 index 0000000..eb0ec1a --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/PresetsUnsupported-test-x-stderr.txt @@ -0,0 +1,2 @@ +CMake Error: Could not read presets from [^ +]*Tests/RunCMake/CMakePresetsTest/PresetsUnsupported: File version must be 2 or higher for build and test preset support. diff --git a/Tests/RunCMake/CMakePresetsTest/PresetsUnsupported.json.in b/Tests/RunCMake/CMakePresetsTest/PresetsUnsupported.json.in new file mode 100644 index 0000000..ff1b000 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/PresetsUnsupported.json.in @@ -0,0 +1,7 @@ +{ + "version": 1, + "configurePresets": [ + ], + "testPresets": [ + ] +} diff --git a/Tests/RunCMake/CMakePresetsTest/RunCMakeTest.cmake b/Tests/RunCMake/CMakePresetsTest/RunCMakeTest.cmake new file mode 100644 index 0000000..6360fc2 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/RunCMakeTest.cmake @@ -0,0 +1,94 @@ +include(RunCMake) + +# Presets do not support legacy VS generator name architecture suffix. +if(RunCMake_GENERATOR MATCHES "^(Visual Studio [0-9]+ [0-9]+) ") + set(RunCMake_GENERATOR "${CMAKE_MATCH_1}") +endif() + +function(run_cmake_test_presets name CMakePresetsTest_CONFIGURE_PRESETS CMakePresetsTest_BUILD_PRESETS CMakePresetsTest_TEST_PRESETS) + set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/${name}") + set(RunCMake_TEST_BINARY_DIR "${RunCMake_TEST_SOURCE_DIR}/build") + set(RunCMake_TEST_COMMAND_WORKING_DIRECTORY "${RunCMake_TEST_SOURCE_DIR}") + + set(RunCMake_TEST_NO_CLEAN TRUE) + + file(REMOVE_RECURSE "${RunCMake_TEST_SOURCE_DIR}") + file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}") + + set(CASE_NAME "${name}") + set(CASE_SOURCE_DIR "${RunCMake_SOURCE_DIR}") + configure_file("${RunCMake_SOURCE_DIR}/CMakeLists.txt.in" "${RunCMake_TEST_SOURCE_DIR}/CMakeLists.txt" @ONLY) + + if(NOT CMakePresetsTest_FILE) + set(CMakePresetsTest_FILE "${RunCMake_SOURCE_DIR}/${name}.json.in") + endif() + if(EXISTS "${CMakePresetsTest_FILE}") + configure_file("${CMakePresetsTest_FILE}" "${RunCMake_TEST_SOURCE_DIR}/CMakePresets.json" @ONLY) + endif() + + if(NOT CMakeUserPresets_FILE) + set(CMakeUserPresets_FILE "${RunCMake_SOURCE_DIR}/${name}User.json.in") + endif() + if(EXISTS "${CMakeUserPresets_FILE}") + configure_file("${CMakeUserPresets_FILE}" "${RunCMake_TEST_SOURCE_DIR}/CMakeUserPresets.json" @ONLY) + endif() + + foreach(ASSET ${CMakePresetsTest_ASSETS}) + configure_file("${RunCMake_SOURCE_DIR}/${ASSET}" "${RunCMake_TEST_SOURCE_DIR}" COPYONLY) + endforeach() + + if (NOT CMakePresetsTest_NO_CONFIGURE) + foreach(CONFIGURE_PRESET ${CMakePresetsTest_CONFIGURE_PRESETS}) + run_cmake_command("${name}-configure-${CONFIGURE_PRESET}" + "${CMAKE_COMMAND}" "--preset" "${CONFIGURE_PRESET}") + endforeach() + endif() + + if (NOT CMakePresetsTest_NO_BUILD) + foreach(BUILD_PRESET ${CMakePresetsTest_BUILD_PRESETS}) + run_cmake_command("${name}-build-${BUILD_PRESET}" + "${CMAKE_COMMAND}" "--build" "--preset" "${BUILD_PRESET}") + endforeach() + endif() + + foreach(TEST_PRESET ${CMakePresetsTest_TEST_PRESETS}) + if (EXISTS "${RunCMake_SOURCE_DIR}/${name}-test-${TEST_PRESET}-check.cmake") + set(RunCMake-check-file "${name}-test-${TEST_PRESET}-check.cmake") + else() + set(RunCMake-check-file "check.cmake") + endif() + + run_cmake_command(${name}-test-${TEST_PRESET} + ${CMAKE_CTEST_COMMAND} "--preset" "${TEST_PRESET}" ${ARGN}) + endforeach() +endfunction() + +set(CMakePresets_SCHEMA_EXPECTED_RESULT 0) +set(CMakePresetsTest_NO_BUILD 1) + +set(CMakePresetsTest_ASSETS "Good-indexFile.txt") +set(GoodTestPresets + "minimal;defaults;noEnvironment;withEnvironment" + "config-debug;config-release" + "exclude;index;indexFile;showOnly") +run_cmake_test_presets(Good + "default" + "" + "${GoodTestPresets}") +unset(CMakePresetsTest_ASSETS) + +set(CMakePresetsTest_NO_CONFIGURE 1) +set(CMakePresetsTest_FILE "${RunCMake_SOURCE_DIR}/Good.json.in") +run_cmake_test_presets(ListPresets "" "" "x" "--list-presets") +unset(CMakePresetsTest_FILE) + +run_cmake_test_presets(NoConfigurePreset "" "" "noConfigurePreset") +run_cmake_test_presets(NoTestsAction "default" "" "noTestsAction") +run_cmake_test_presets(Invalid "" "" "hidden;vendorMacro;badConfigurePreset") + +set(CMakePresets_SCHEMA_EXPECTED_RESULT 1) +run_cmake_test_presets(PresetsUnsupported "" "" "x") +set(CMakePresets_SCHEMA_EXPECTED_RESULT 0) +set(CMakePresetsTest_NO_CONFIGURE 0) + +set(CMakePresetsTest_NO_BUILD 0) diff --git a/Tests/RunCMake/CMakePresetsTest/check.cmake b/Tests/RunCMake/CMakePresetsTest/check.cmake new file mode 100644 index 0000000..e79c4f1 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/check.cmake @@ -0,0 +1,3 @@ +set(CMakePresets_VALIDATE_SCRIPT_PATH "${RunCMake_SOURCE_DIR}/../CMakePresets/validate_schema.py") +include("${RunCMake_SOURCE_DIR}/../CMakePresets/validate_schema.cmake") +include("${RunCMake_SOURCE_DIR}/../CMakePresets/check.cmake") diff --git a/Tests/RunCMake/CommandLine/BuildDir--build--parallel-bad-number-stderr.txt b/Tests/RunCMake/CommandLine/BuildDir--build--parallel-bad-number-stderr.txt index e73d760..16f8be8 100644 --- a/Tests/RunCMake/CommandLine/BuildDir--build--parallel-bad-number-stderr.txt +++ b/Tests/RunCMake/CommandLine/BuildDir--build--parallel-bad-number-stderr.txt @@ -1,3 +1,3 @@ ^'--parallel' invalid number '12ab' given\. + -Usage: cmake --build <dir> \[options\] \[-- \[native-options\]\] +Usage: cmake --build \[<dir> \| --preset <preset>\] \[options\] \[-- \[native-options\]\] diff --git a/Tests/RunCMake/CommandLine/BuildDir--build--parallel-large-stderr.txt b/Tests/RunCMake/CommandLine/BuildDir--build--parallel-large-stderr.txt index 94fc157..e7b9aaa 100644 --- a/Tests/RunCMake/CommandLine/BuildDir--build--parallel-large-stderr.txt +++ b/Tests/RunCMake/CommandLine/BuildDir--build--parallel-large-stderr.txt @@ -1,3 +1,3 @@ ^The <jobs> value is too large\. + -Usage: cmake --build <dir> \[options\] \[-- \[native-options\]\] +Usage: cmake --build \[<dir> \| --preset <preset>\] \[options\] \[-- \[native-options\]\] diff --git a/Tests/RunCMake/CommandLine/BuildDir--build--parallel-no-space-bad-number-stderr.txt b/Tests/RunCMake/CommandLine/BuildDir--build--parallel-no-space-bad-number-stderr.txt index e73d760..16f8be8 100644 --- a/Tests/RunCMake/CommandLine/BuildDir--build--parallel-no-space-bad-number-stderr.txt +++ b/Tests/RunCMake/CommandLine/BuildDir--build--parallel-no-space-bad-number-stderr.txt @@ -1,3 +1,3 @@ ^'--parallel' invalid number '12ab' given\. + -Usage: cmake --build <dir> \[options\] \[-- \[native-options\]\] +Usage: cmake --build \[<dir> \| --preset <preset>\] \[options\] \[-- \[native-options\]\] diff --git a/Tests/RunCMake/CommandLine/BuildDir--build--parallel-zero-stderr.txt b/Tests/RunCMake/CommandLine/BuildDir--build--parallel-zero-stderr.txt index 8ed4fee..d1241f4 100644 --- a/Tests/RunCMake/CommandLine/BuildDir--build--parallel-zero-stderr.txt +++ b/Tests/RunCMake/CommandLine/BuildDir--build--parallel-zero-stderr.txt @@ -1,3 +1,3 @@ ^The <jobs> value requires a positive integer argument\. + -Usage: cmake --build <dir> \[options\] \[-- \[native-options\]\] +Usage: cmake --build \[<dir> \| --preset <preset>\] \[options\] \[-- \[native-options\]\] diff --git a/Tests/RunCMake/CommandLine/BuildDir--build-jobs-bad-number-stderr.txt b/Tests/RunCMake/CommandLine/BuildDir--build-jobs-bad-number-stderr.txt index c810087..d52b165 100644 --- a/Tests/RunCMake/CommandLine/BuildDir--build-jobs-bad-number-stderr.txt +++ b/Tests/RunCMake/CommandLine/BuildDir--build-jobs-bad-number-stderr.txt @@ -1,3 +1,3 @@ ^'-j' invalid number '12ab' given\. + -Usage: cmake --build <dir> \[options\] \[-- \[native-options\]\] +Usage: cmake --build \[<dir> \| --preset <preset>\] \[options\] \[-- \[native-options\]\] diff --git a/Tests/RunCMake/CommandLine/BuildDir--build-jobs-large-stderr.txt b/Tests/RunCMake/CommandLine/BuildDir--build-jobs-large-stderr.txt index 94fc157..e7b9aaa 100644 --- a/Tests/RunCMake/CommandLine/BuildDir--build-jobs-large-stderr.txt +++ b/Tests/RunCMake/CommandLine/BuildDir--build-jobs-large-stderr.txt @@ -1,3 +1,3 @@ ^The <jobs> value is too large\. + -Usage: cmake --build <dir> \[options\] \[-- \[native-options\]\] +Usage: cmake --build \[<dir> \| --preset <preset>\] \[options\] \[-- \[native-options\]\] diff --git a/Tests/RunCMake/CommandLine/BuildDir--build-jobs-no-space-bad-number-stderr.txt b/Tests/RunCMake/CommandLine/BuildDir--build-jobs-no-space-bad-number-stderr.txt index c810087..d52b165 100644 --- a/Tests/RunCMake/CommandLine/BuildDir--build-jobs-no-space-bad-number-stderr.txt +++ b/Tests/RunCMake/CommandLine/BuildDir--build-jobs-no-space-bad-number-stderr.txt @@ -1,3 +1,3 @@ ^'-j' invalid number '12ab' given\. + -Usage: cmake --build <dir> \[options\] \[-- \[native-options\]\] +Usage: cmake --build \[<dir> \| --preset <preset>\] \[options\] \[-- \[native-options\]\] diff --git a/Tests/RunCMake/CommandLine/BuildDir--build-jobs-zero-stderr.txt b/Tests/RunCMake/CommandLine/BuildDir--build-jobs-zero-stderr.txt index 8ed4fee..d1241f4 100644 --- a/Tests/RunCMake/CommandLine/BuildDir--build-jobs-zero-stderr.txt +++ b/Tests/RunCMake/CommandLine/BuildDir--build-jobs-zero-stderr.txt @@ -1,3 +1,3 @@ ^The <jobs> value requires a positive integer argument\. + -Usage: cmake --build <dir> \[options\] \[-- \[native-options\]\] +Usage: cmake --build \[<dir> \| --preset <preset>\] \[options\] \[-- \[native-options\]\] diff --git a/Tests/RunCMake/CommandLine/BuildDir--build-multiple-targets-with-clean-first-stderr.txt b/Tests/RunCMake/CommandLine/BuildDir--build-multiple-targets-with-clean-first-stderr.txt index 40d9bec..2dd9bc4 100644 --- a/Tests/RunCMake/CommandLine/BuildDir--build-multiple-targets-with-clean-first-stderr.txt +++ b/Tests/RunCMake/CommandLine/BuildDir--build-multiple-targets-with-clean-first-stderr.txt @@ -1,2 +1,2 @@ ^Error: Building 'clean' and other targets together is not supported\. -Usage: cmake --build <dir> \[options\] \[-- \[native-options\]\] +Usage: cmake --build \[<dir> \| --preset <preset>\] \[options\] \[-- \[native-options\]\] diff --git a/Tests/RunCMake/CommandLine/BuildDir--build-multiple-targets-with-clean-second-stderr.txt b/Tests/RunCMake/CommandLine/BuildDir--build-multiple-targets-with-clean-second-stderr.txt index 40d9bec..2dd9bc4 100644 --- a/Tests/RunCMake/CommandLine/BuildDir--build-multiple-targets-with-clean-second-stderr.txt +++ b/Tests/RunCMake/CommandLine/BuildDir--build-multiple-targets-with-clean-second-stderr.txt @@ -1,2 +1,2 @@ ^Error: Building 'clean' and other targets together is not supported\. -Usage: cmake --build <dir> \[options\] \[-- \[native-options\]\] +Usage: cmake --build \[<dir> \| --preset <preset>\] \[options\] \[-- \[native-options\]\] diff --git a/Tests/RunCMake/CommandLine/build-no-dir-stderr.txt b/Tests/RunCMake/CommandLine/build-no-dir-stderr.txt index 8d518f6..9b4d26b 100644 --- a/Tests/RunCMake/CommandLine/build-no-dir-stderr.txt +++ b/Tests/RunCMake/CommandLine/build-no-dir-stderr.txt @@ -1 +1 @@ -^Usage: cmake --build <dir> \[options\] \[-- \[native-options\]\] +^Usage: cmake --build \[<dir> \| --preset <preset>\] \[options\] \[-- \[native-options\]\] |