From f8ae1bbbecaf41bf1eda41f9304fbe759f13447e Mon Sep 17 00:00:00 2001 From: Tyler Yankee Date: Thu, 19 Mar 2026 09:59:58 -0400 Subject: [PATCH] ctest: Improve errors when no preset is specified Apply the same logic to both "equals" and non-"equals" forms of the argument when no preset is specified, and add test cases. --- Source/cmCTest.cxx | 7 ++++++- .../RunCMake/CMakePresetsTest/PresetsNoArg-test-result.txt | 1 + .../RunCMake/CMakePresetsTest/PresetsNoArg-test-stderr.txt | 1 + .../CMakePresetsTest/PresetsNoArgEq-test-result.txt | 1 + .../CMakePresetsTest/PresetsNoArgEq-test-stderr.txt | 1 + Tests/RunCMake/CMakePresetsTest/RunCMakeTest.cmake | 3 +++ 6 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 Tests/RunCMake/CMakePresetsTest/PresetsNoArg-test-result.txt create mode 100644 Tests/RunCMake/CMakePresetsTest/PresetsNoArg-test-stderr.txt create mode 100644 Tests/RunCMake/CMakePresetsTest/PresetsNoArgEq-test-result.txt create mode 100644 Tests/RunCMake/CMakePresetsTest/PresetsNoArgEq-test-stderr.txt diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx index e423b8e6fd..c31a40c257 100644 --- a/Source/cmCTest.cxx +++ b/Source/cmCTest.cxx @@ -1835,7 +1835,12 @@ int cmCTest::Run(std::vector const& args) } else { if (cmHasLiteralPrefix(*it, "--preset=")) { auto const& presetName = it->substr(9); - success = this->SetArgsFromPreset(presetName, listPresets); + if (presetName.empty()) { + cmSystemTools::Error("'--preset' requires an argument"); + success = false; + } else { + success = this->SetArgsFromPreset(presetName, listPresets); + } } else if (++it != args.end()) { auto const& presetName = *it; success = this->SetArgsFromPreset(presetName, listPresets); diff --git a/Tests/RunCMake/CMakePresetsTest/PresetsNoArg-test-result.txt b/Tests/RunCMake/CMakePresetsTest/PresetsNoArg-test-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/PresetsNoArg-test-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMakePresetsTest/PresetsNoArg-test-stderr.txt b/Tests/RunCMake/CMakePresetsTest/PresetsNoArg-test-stderr.txt new file mode 100644 index 0000000000..c477131387 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/PresetsNoArg-test-stderr.txt @@ -0,0 +1 @@ +^CMake Error: '--preset' requires an argument$ diff --git a/Tests/RunCMake/CMakePresetsTest/PresetsNoArgEq-test-result.txt b/Tests/RunCMake/CMakePresetsTest/PresetsNoArgEq-test-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/PresetsNoArgEq-test-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMakePresetsTest/PresetsNoArgEq-test-stderr.txt b/Tests/RunCMake/CMakePresetsTest/PresetsNoArgEq-test-stderr.txt new file mode 100644 index 0000000000..c477131387 --- /dev/null +++ b/Tests/RunCMake/CMakePresetsTest/PresetsNoArgEq-test-stderr.txt @@ -0,0 +1 @@ +^CMake Error: '--preset' requires an argument$ diff --git a/Tests/RunCMake/CMakePresetsTest/RunCMakeTest.cmake b/Tests/RunCMake/CMakePresetsTest/RunCMakeTest.cmake index d7fcb48d7d..11268c89c9 100644 --- a/Tests/RunCMake/CMakePresetsTest/RunCMakeTest.cmake +++ b/Tests/RunCMake/CMakePresetsTest/RunCMakeTest.cmake @@ -95,6 +95,9 @@ set(CMakePresetsTest_NO_CONFIGURE 1) set(CMakePresetsTest_FILE "${RunCMake_SOURCE_DIR}/Good.json.in") run_cmake_test_presets(ListPresets "" "" "x" "--list-presets") +run_cmake_command(PresetsNoArg-test ${CMAKE_CTEST_COMMAND} "--preset") +run_cmake_command(PresetsNoArgEq-test ${CMAKE_CTEST_COMMAND} "--preset=") + set(CMakePresetsTest_FILE "${RunCMake_SOURCE_DIR}/Condition.json.in") run_cmake_test_presets(ConditionListPresets "" "" "x" "--list-presets") unset(CMakePresetsTest_NO_CONFIGURE)