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