diff options
Diffstat (limited to 'Tests/Environment')
-rw-r--r-- | Tests/Environment/CMakeLists.txt | 35 | ||||
-rw-r--r-- | Tests/Environment/check_mod.cmake | 55 |
2 files changed, 90 insertions, 0 deletions
diff --git a/Tests/Environment/CMakeLists.txt b/Tests/Environment/CMakeLists.txt index 2b18d24..17009bd 100644 --- a/Tests/Environment/CMakeLists.txt +++ b/Tests/Environment/CMakeLists.txt @@ -9,6 +9,7 @@ add_test(Environment1 Environment) add_test(Environment2 Environment) add_test(EchoEnvironment1 ${CMAKE_COMMAND} -E environment) add_test(EchoEnvironment2 ${CMAKE_COMMAND} -E environment) +add_test(EchoEnvironment3 ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_SOURCE_DIR}/check_mod.cmake") # Make sure "CMAKE_ENV.*Happy Thanksgiving" is in the output of # the "1" tests: @@ -24,3 +25,37 @@ set_tests_properties(Environment1 EchoEnvironment1 PROPERTIES set_tests_properties(Environment2 EchoEnvironment2 PROPERTIES FAIL_REGULAR_EXPRESSION "CMAKE_ENV.*Happy Thanksgiving" ) + +set_property(TEST EchoEnvironment3 + PROPERTY ENVIRONMENT_MODIFICATION + # Variables expected to be unset. + "UNSET_EXPLICIT=set:value" + "UNSET_EXPLICIT=unset:" + "UNSET_VIA_RESET=set:value" + "UNSET_VIA_RESET=reset:" + + # Direct settings. + "DIRECT=set:old" + "DIRECT=set:new" + + # String manipulation. + "STRING_MANIP=set:-core-" + "STRING_MANIP=string_append:post-" + "STRING_MANIP=string_prepend:-pre" + "STRING_MANIP=string_append:suffix" + "STRING_MANIP=string_prepend:prefix" + + # Path manipulation. + "PATH_MANIP=set:core" + "PATH_MANIP=path_list_append:post" + "PATH_MANIP=path_list_prepend:pre" + "PATH_MANIP=path_list_append:suffix" + "PATH_MANIP=path_list_prepend:prefix" + + # CMake list manipulation. + "CMAKE_LIST_MANIP=set:core" + "CMAKE_LIST_MANIP=cmake_list_append:post" + "CMAKE_LIST_MANIP=cmake_list_prepend:pre" + "CMAKE_LIST_MANIP=cmake_list_append:suffix" + "CMAKE_LIST_MANIP=cmake_list_prepend:prefix" +) diff --git a/Tests/Environment/check_mod.cmake b/Tests/Environment/check_mod.cmake new file mode 100644 index 0000000..16d02f2 --- /dev/null +++ b/Tests/Environment/check_mod.cmake @@ -0,0 +1,55 @@ +execute_process( + COMMAND ${CMAKE_COMMAND} -E environment + OUTPUT_VARIABLE out + ERROR_VARIABLE err + RESULT_VARIABLE res) + +if (res) + message(FATAL_ERROR "Failed with exit code ${res}: ${err}") +endif () + +if (CMAKE_HOST_WIN32) + set(path_sep ";") +else () + set(path_sep ":") +endif () + +set(unexpect_UNSET_EXPLICIT "") +set(unexpect_UNSET_VIA_RESET "") +set(expect_DIRECT "new") +set(expect_STRING_MANIP "prefix-pre-core-post-suffix") +set(expect_PATH_MANIP "prefix${path_sep}pre${path_sep}core${path_sep}post${path_sep}suffix") +set(expect_CMAKE_LIST_MANIP "prefix;pre;core;post;suffix") + +set(expected_vars + DIRECT + STRING_MANIP + PATH_MANIP + CMAKE_LIST_MANIP) + +while (out) + string(FIND "${out}" "\n" nl_pos) + string(SUBSTRING "${out}" 0 "${nl_pos}" line) + math(EXPR line_next "${nl_pos} + 1") + string(SUBSTRING "${out}" "${line_next}" -1 out) + + string(FIND "${line}" "=" eq_pos) + string(SUBSTRING "${line}" 0 "${eq_pos}" name) + math(EXPR value_start "${eq_pos} + 1") + string(SUBSTRING "${line}" "${value_start}" -1 value) + + if (DEFINED "unexpect_${name}") + message(SEND_ERROR "Found `${name}=${value}` when it should have been unset") + elseif (DEFINED "expect_${name}") + list(REMOVE_ITEM expected_vars "${name}") + if (expect_${name} STREQUAL value) + message(STATUS "Found `${name}=${value}` as expected") + else () + message(SEND_ERROR "Found `${name}=${value}` when it should have been ${expect_${name}}") + endif () + endif () +endwhile () + +if (expected_vars) + message(SEND_ERROR "Did not test expected variables: ${expected_vars}") +endif () |