Browse Source

Tests: Add build preset tests

pull/340/head
Sam Freed 5 years ago
committed by Brad King
parent
commit
74a86566f0
  1. 1
      Tests/RunCMake/CMakeLists.txt
  2. 3
      Tests/RunCMake/CMakePresetsBuild/CMakeLists.txt.in
  3. 5
      Tests/RunCMake/CMakePresetsBuild/Good-build-build-other-check.cmake
  4. 14
      Tests/RunCMake/CMakePresetsBuild/Good-build-macros-check.cmake
  5. 6
      Tests/RunCMake/CMakePresetsBuild/Good-build-noEnvironment-check.cmake
  6. 8
      Tests/RunCMake/CMakePresetsBuild/Good-build-withEnvironment-check.cmake
  7. 3
      Tests/RunCMake/CMakePresetsBuild/Good.cmake
  8. 78
      Tests/RunCMake/CMakePresetsBuild/Good.json.in
  9. 1
      Tests/RunCMake/CMakePresetsBuild/Invalid-build-badConfigurePreset-result.txt
  10. 2
      Tests/RunCMake/CMakePresetsBuild/Invalid-build-badConfigurePreset-stderr.txt
  11. 1
      Tests/RunCMake/CMakePresetsBuild/Invalid-build-hidden-result.txt
  12. 2
      Tests/RunCMake/CMakePresetsBuild/Invalid-build-hidden-stderr.txt
  13. 1
      Tests/RunCMake/CMakePresetsBuild/Invalid-build-vendorMacro-result.txt
  14. 1
      Tests/RunCMake/CMakePresetsBuild/Invalid-build-vendorMacro-stderr.txt
  15. 0
      Tests/RunCMake/CMakePresetsBuild/Invalid.cmake
  16. 27
      Tests/RunCMake/CMakePresetsBuild/Invalid.json.in
  17. 5
      Tests/RunCMake/CMakePresetsBuild/ListPresets-build-x-stdout.txt
  18. 0
      Tests/RunCMake/CMakePresetsBuild/ListPresets.cmake
  19. 31
      Tests/RunCMake/CMakePresetsBuild/ListPresets.json.in
  20. 1
      Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-result.txt
  21. 2
      Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-stderr.txt
  22. 0
      Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset.cmake
  23. 15
      Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset.json.in
  24. 1
      Tests/RunCMake/CMakePresetsBuild/PresetsUnsupported-build-x-result.txt
  25. 2
      Tests/RunCMake/CMakePresetsBuild/PresetsUnsupported-build-x-stderr.txt
  26. 7
      Tests/RunCMake/CMakePresetsBuild/PresetsUnsupported.json.in
  27. 67
      Tests/RunCMake/CMakePresetsBuild/RunCMakeTest.cmake
  28. 14
      Tests/RunCMake/CMakePresetsBuild/TestVariable.cmake
  29. 3
      Tests/RunCMake/CMakePresetsBuild/check.cmake

1
Tests/RunCMake/CMakeLists.txt

@ -799,6 +799,7 @@ 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})
if(${CMAKE_GENERATOR} MATCHES "Make|Ninja")
add_RunCMake_test(TransformDepfile)

3
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")

5
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")

14
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")

6
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")

8
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")

3
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)

78
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"
}
}
]
}

1
Tests/RunCMake/CMakePresetsBuild/Invalid-build-badConfigurePreset-result.txt

@ -0,0 +1 @@
1

2
Tests/RunCMake/CMakePresetsBuild/Invalid-build-badConfigurePreset-stderr.txt

@ -0,0 +1,2 @@
CMake Error: No such configure preset in [^
]*/Tests/RunCMake/CMakePresetsBuild/Invalid: "dne"

1
Tests/RunCMake/CMakePresetsBuild/Invalid-build-hidden-result.txt

@ -0,0 +1 @@
1

2
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"

1
Tests/RunCMake/CMakePresetsBuild/Invalid-build-vendorMacro-result.txt

@ -0,0 +1 @@
1

1
Tests/RunCMake/CMakePresetsBuild/Invalid-build-vendorMacro-stderr.txt

@ -0,0 +1 @@
CMake Error: Could not evaluate build preset "vendorMacro": Invalid macro expansion

0
Tests/RunCMake/CMakePresetsBuild/Invalid.cmake

27
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"
}
]
}

5
Tests/RunCMake/CMakePresetsBuild/ListPresets-build-x-stdout.txt

@ -0,0 +1,5 @@
Available build presets:
"build-default" - build-default displayName
"empty"
"display" - display displayName

0
Tests/RunCMake/CMakePresetsBuild/ListPresets.cmake

31
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
}
]
}

1
Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset-build-noConfigurePreset-result.txt

@ -0,0 +1 @@
1

2
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

0
Tests/RunCMake/CMakePresetsBuild/NoConfigurePreset.cmake

15
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"
}
]
}

1
Tests/RunCMake/CMakePresetsBuild/PresetsUnsupported-build-x-result.txt

@ -0,0 +1 @@
1

2
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.

7
Tests/RunCMake/CMakePresetsBuild/PresetsUnsupported.json.in

@ -0,0 +1,7 @@
{
"version": 1,
"configurePresets": [
],
"buildPresets": [
]
}

67
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)

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

3
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")
Loading…
Cancel
Save